能夠實現(xiàn)一下功能:
1、按下模式1按鈕時,實現(xiàn)如下功能:
D2亮(其它燈不亮)→D4亮(其它燈不亮)→D6亮(其它燈不亮)→D8亮(其它燈不亮)并且以此循環(huán),每個等亮1S(用定時器實現(xiàn)延時)。
2、按下模式2按鈕時,實現(xiàn)如下功能:
D1不亮(其它燈亮)→D3不亮(其它燈亮)→D5不亮(其它燈亮)→D7不亮(其它燈亮)并且以此循環(huán),每個燈點亮1S(用定時器實現(xiàn)延時)。
3、當按下停止按鈕時,停止工作,所有等熄滅。(適合初學者參考學習)
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
仿真放大圖
仿真圖
實現(xiàn)的功能(題目要求u)
程序的一部分
單片機源程序如下:
- #include <reg51.h>
- sbit key1 = P3^2;//給P3_2重命名
- sbit key2 = P3^4;//給P3_4重命名
- sbit key3 = P3^6;//給P3_6重命名
- unsigned char LED_shift[8] = {0xfd, 0xf7, 0xdf, 0x7f, 0x01, 0x04, 0x10, 0x40};
- void delay()//延時函數(shù)
- {
- unsigned int i = 1000;
- while(i--);
- }
- void main()//主函數(shù)
- {
- unsigned char cnt= 0;//設置標志位
- unsigned char tmp = 0;
- unsigned char sec = 0;
- unsigned char shift = 0;
-
- TMOD = 0x01;//設置定時器0為定時模式,方式1
- TH0 = (65536 - 10000)/256;
- TL0 = (65536 - 10000)%256;//初值計算
- TR0 = 1;
-
- while(1)//死循環(huán)
- {
- if(key1 == 0)//按鍵檢測
- {
- delay();//防抖
- if(key1 == 0)
- {
- shift = 1;
- }
- while(!key1);
- }
- if(key2 == 0)//按鍵檢測
- {
- delay();//防抖
- if(key2 == 0)
- {
- while(!key2);
- }
- shift = 2;
- }
- if(key3 == 0)//按鍵檢測
- {
- delay();//防抖
- if(key3 == 0)
- {
- while(!key3);
- }
- shift = 0;
- }
- if(TF0 == 1)
- {
- TF0 = 0;
- TH0 = (65536 - 10000)/256;
- TL0 = (65536 - 10000)%256; //初值重裝
-
- tmp++;
- if(tmp >= 99)//定時1秒
- {
- tmp = 0;//重新清零
- if(shift == 0)
- {
- P1 = 0xff;
- }
- else if(shift == 1)
- {
- if(sec < 4)
- {
- P1 = LED_shift[sec];
- sec++;
- }
- else
- {
- sec = 0;
- }
- }
- else if(shift == 2)
- {
- if(sec < 4)
- {
- P1 = LED_shift[sec+4];
- sec++;
- }
- else
- {
- sec = 0;
- }
- }
- }
- }
- }
- }
復制代碼
所有資料51hei提供下載:
定時計數(shù)器控制流水燈.zip
(53.8 KB, 下載次數(shù): 72)
2020-5-27 20:51 上傳
點擊文件名下載附件
|