能夠實現一下功能:
1、按下模式1按鈕時,實現如下功能:
D2亮(其它燈不亮)→D4亮(其它燈不亮)→D6亮(其它燈不亮)→D8亮(其它燈不亮)并且以此循環,每個等亮1S(用定時器實現延時)。
2、按下模式2按鈕時,實現如下功能:
D1不亮(其它燈亮)→D3不亮(其它燈亮)→D5不亮(其它燈亮)→D7不亮(其它燈亮)并且以此循環,每個燈點亮1S(用定時器實現延時)。
3、當按下停止按鈕時,停止工作,所有等熄滅。(適合初學者參考學習)
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
2.png (139.27 KB, 下載次數: 78)
下載附件
仿真放大圖
2020-5-27 20:50 上傳
3.png (255.94 KB, 下載次數: 68)
下載附件
仿真圖
2020-5-27 20:51 上傳
1.png (60.11 KB, 下載次數: 67)
下載附件
實現的功能(題目要求u)
2020-5-27 20:50 上傳
4.png (102.67 KB, 下載次數: 82)
下載附件
程序的一部分
2020-5-27 20:55 上傳
51hei.png (15.87 KB, 下載次數: 89)
下載附件
2020-5-27 22:25 上傳
單片機源程序如下:
- #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()//延時函數
- {
- unsigned int i = 1000;
- while(i--);
- }
- void main()//主函數
- {
- 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)//死循環
- {
- 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.png (13.07 KB, 下載次數: 78)
下載附件
2020-5-27 22:25 上傳
所有資料51hei提供下載:
定時計數器控制流水燈.zip
(53.8 KB, 下載次數: 72)
2020-5-27 20:51 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|