字體:小 中 大 | |
|
|
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; } } |
|
( 興趣嗜好|其他 ) |