標題: 基于51單片機的七彩呼吸燈protues仿真+程序keil5 [打印本頁]
作者: 1543330241 時間: 2021-7-10 09:44
標題: 基于51單片機的七彩呼吸燈protues仿真+程序keil5
(1) 起始狀態時,8個燈處于同頻率“呼吸”狀態。
(2) 按鍵1按下時,1號到8號依次由亮到暗“呼吸”。
(3) 按鍵2按下時,1號到8號依次由暗到亮“呼吸”。
(4)按鍵3按下時,恢復起始亮法。
由于是在仿真中,需要加入驅動電路才能看出來“呼吸”的效果,否則只能看到燈在閃爍。
做實物時不需要加驅動電路,直接連接單片機就可以看出來那種效果。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
呼吸燈.png (49.18 KB, 下載次數: 75)
下載附件
2021-7-10 09:43 上傳
51hei.gif (126.04 KB, 下載次數: 58)
下載附件
2021-7-10 14:47 上傳
單片機源程序如下:
- #include <reg51.h>
- #define MAX 0x40 //定時上限定義
- #define MIN 0x00 //定時下限定義
- #define TIMELINE 10 //時間分頻常數
- #define TRUE 1
- #define FALSE 0 //標志位常數
- sbit s1 = P2^0;
- sbit s2 = P2^1;
- sbit s3 = P2^2;
- unsigned int TimeCounter;
- bit ArrowFlg = 0; //方向標志位
- unsigned char upCounter,downCounter; //增加計數器和減少計數器
- unsigned char table1[] = {0x00,0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff} ;
- unsigned char table2[] = {0xff,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00} ;
- unsigned char k=0,j=-1;
- char key1,key=3;
- char keyscan()
- {
- if(s1==0){while(!s1);key=1;}
- if(s2==0){while(!s2);key=2;}
- if(s3==0){while(!s3);key=3;}
- return key;
- }
- //T0的中斷服務子函數
- void T0Deal() interrupt 1
- {
- TH0=0xf1;
- TL0=0xf1;
- TR0=1;
- TimeCounter++; //定時計數器增加
- if(TimeCounter == TIMELINE)
- {
- if(key1==1)
- {
- upCounter++;
- downCounter--;
- if((upCounter == MAX)&&(downCounter == MIN))
- {
- upCounter = MIN;
- downCounter = MAX; //計數器初始化
- k++;if(k>=9)k=0;
- }
- }
- if(key1==2)
- {
- upCounter--;
- downCounter++;
- if((upCounter == MIN)&&(downCounter == MAX))
- {
- upCounter = MAX;
- downCounter = MIN; //計數器初始化
- j++;if(j>=9)j=0;
- }
- }
- if(key==3)
- {
- if((upCounter == MAX)&&(downCounter == MIN)) //計數方向標志位切換
- {
- ArrowFlg = FALSE;
- }
- if((upCounter == MIN)&&(downCounter == MAX))
- {
- ArrowFlg= TRUE;
- }
- if(ArrowFlg == 1) //如果是增加計數
- {
- upCounter++;
- downCounter--;
- }
- else //如果是減少計數
- {
- upCounter--;
- downCounter++;
- }
- }
- TimeCounter=0;
- }
- }
- //延時函數
- void Delay(unsigned int i)
- {
- unsigned int j;
- while(i--)
- {
- for(j=0;j<32;j++); //延時
- }
- }
- void main()
- {
- upCounter = MIN;
- downCounter = MAX; //計數器初始化
- TMOD = 0x01; //設置定時器工作方式1
- TH0 = 0xF0;
- TL0 = 0xF0; //T0初始化值
- EA = 1;
- ET0 = 1; //開中斷
- TR0 = 1; //啟動T0
- while(1)
- {
- key1=keyscan();
- if(key1==1){P1= table1[k-1];Delay(downCounter);P1=table1[k]; Delay(upCounter);}
- if(key1==2){P1=table2[j]; Delay(downCounter);P1=table2[j-1]; Delay(upCounter); }
- if(key1==3){P1=0x00; Delay(downCounter);P1=0xff; Delay(upCounter);}
- }
- }
復制代碼
所有資料51hei提供下載:
七彩呼吸燈.zip
(118.5 KB, 下載次數: 127)
2021-7-10 09:44 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者: sonique0371 時間: 2021-11-6 08:11
無論哪個按鍵,LED都不亮
作者: dyx811 時間: 2021-11-7 20:39
可以達到預期效果。謝謝分享
作者: hdhdh 時間: 2021-11-8 08:44
樓主可以發表下所用的器件嗎各種
作者: PPHH 時間: 2023-4-9 20:47
我也是,請問一下,你有解決嗎
作者: heicad 時間: 2023-4-10 05:07
用Proteus8.13版本打開可以 你看我打開的效果
-
51hei.gif
(187.08 KB, 下載次數: 82)
下載附件
2023-4-10 05:07 上傳
| 歡迎光臨 (http://www.denmoz.com/bbs/) |
Powered by Discuz! X3.1 |