網路城邦
上一篇 回創作列表 下一篇  字體:
自行車後方閃爍警示燈
2014/12/31 04:19:05瀏覽261|回應0|推薦0

/*-----------------------------------------------

  名稱: 自行車後方閃爍警示燈

  編寫:

  日期:2014_12 30

  修改: A105D.hex

  內容:自行車後方閃爍警示燈

        模式一:全數LED熄滅

        模式二:全數LED點亮

        模式三:向左移位-慢速單顆

        模式四:向右移位-慢速單顆

        模式五:不移位,全數點亮與熄滅交替

        模式六:向右移位-快速雙顆

        模式七:向左移位-快速雙顆

        模式八:向右移位-快速單顆

------------------------------------------------*/

#include <reg52.h>       //包含起頭文件,起頭文件包含特殊功能寄存器的定義

#include <delay.h>

 

sbit LED1=P2^0;          // 用sbit 關鍵字 定義 LED到P2.0埠,

sbit LED2=P2^1;

sbit LED3=P2^2;

sbit LED4=P2^3;

sbit LED5=P2^4;

sbit LED6=P1^5;

sbit LED7=P1^6;

sbit LED8=P1^7;

 

#define KeyPort16  P3  //按鍵埠P3.0

 

unsigned int LED_count=0;

unsigned int LED_flag=0;

unsigned int LED_time=0;

bit LED_flash;

 

void Delay(unsigned int t); //參數聲明

/*------------------------------------------------

                    主程式

------------------------------------------------*/

void main (void)

{

while (1)                 //主迴圈

{

        LED_flag=0;     //為所選擇之LED閃爍模式

        LED_count=0;    //為計數已移位之次數

        LED_flash=1;    //閃爍旗號

        LED_time=250;   //閃爍的快慢時間

START:

        switch(P3)      //檢測按鍵是否有按壓                           

        {

            case 0xfe:

                DelayMs(20);                    //按鍵彈跳20ms

                if (P3==0xfe) LED_flag++;     //檢測按鍵P3^0是否被壓下

                if (LED_flag>7) LED_flag=0;break;

                default:break;                  //如果都沒按下,直接跳出

        }

 

        switch(LED_flag)

        {  

        case 0:P2=0xff;break;                //模式一:全數LED熄滅

        case 1:P2=0x00;break;                //模式二:全數LED點亮

        case 2:P2=0xff;LED_time=250;    //模式三:向左移位-慢速單顆

            switch(LED_count)

                {   case 0:P2=0xfe;break;

                    case 1:P2=0xfd;break;

                    case 2:P2=0xfb;break;

                    case 3:P2=0xf7;break;

                    case 4:P2=0xef;break;

                    case 5:P2=0xdf;break;

                    case 6:P2=0xbf;break;

                    case 7:P2=0x7f;break;

                    default:break;

                }  

                LED_count++;if (LED_count >7) LED_count=0;break;

        case 3:P2=0xff;LED_time=250;    //模式四:向右移位-慢速單顆

            switch(LED_count)

                {   case 0:P2=0x7f;break;

                    case 1:P2=0xbf;break;

                    case 2:P2=0xdf;break;

                    case 3:P2=0xef;break;

                    case 4:P2=0xf7;break;

                    case 5:P2=0xfb;break;

                    case 6:P2=0xfd;break;

                    case 7:P2=0xfe;break;

                    default:break;

                }  

                LED_count++;if (LED_count >7) LED_count=0;break;

        case 4: LED_time=250;               //模式五:不移位,全數點亮與熄滅交替

                if (LED_flash==0) P2=0xff ;

                    else

                         P2=0x00; LED_flash=!LED_flash; break;

        case 5:P2=0xff; LED_time=100;        //模式六:向右移位-快速雙顆

            switch(LED_count)

                {   case 0:P2=0xfe;break;

                    case 1:P2=0xfc;break;

                    case 2:P2=0xf9;break;

                    case 3:P2=0xf3;break;

                    case 4:P2=0xe7;break;

                    case 5:P2=0xcf;break;

                    case 6:P2=0x9f;break;

                    case 7:P2=0x3f;break;

                    case 8:P2=0x7f;break;

                    default:break;

                }  

                LED_count++;if (LED_count >8) LED_count=0;break;

        case 6:P2=P2=0xff;LED_time=100;      //模式七:向左移位-快速雙顆

            switch(LED_count)

                {   case 0:P2=0x7f;break;

                    case 1:P2=0x3f;break;

                    case 2:P2=0x9f;break;

                    case 3:P2=0xcf;break;

                    case 4:P2=0xe7;break;

                    case 5:P2=0xf3;break;

                    case 6:P2=0xf9;break;

                    case 7:P2=0xfc;break;

                    case 8:P2=0xfe;break;

                    default:break;

                }  

                LED_count++;if (LED_count >8) LED_count=0;break;

        case 7:LED_time=100;        //模式八:向右移位-快速單顆

            switch(LED_count)

                {   case 0:P2=0xfe;break;

                    case 1:P2=0xfd;break;

                    case 2:P2=0xfb;break;

                    case 3:P2=0xf7;break;

                    case 4:P2=0xef;break;

                    case 5:P2=0xdf;break;

                    case 6:P2=0xbf;break;

                    case 7:P2=0x7f;break;

                    default:break;

                }  

                LED_count++;if (LED_count >7) LED_count=0;break; 

        default:break; 

        }

        DelayMs(LED_time);    //延遲程式,延遲參數可以決定延遲時間長度

            //用於改變閃爍快慢頻率

        goto START;

    }

}

 

( 興趣嗜好其他 )
回應 推薦文章 列印 加入我的文摘
上一篇 回創作列表 下一篇

引用
引用網址:https://classic-blog.udn.com/article/trackback.jsp?uid=PYANG&aid=19915237