国产免费AV|泡泡玛特欧洲总部将设在伦敦|中文天堂网www新版资源在线|一本久道综合在线中文|国精产品一二三产区的使用方法|香蕉鱼在线观看|www.27eee
ELEOK
標題:
基于51單片機的七彩呼吸燈proteus仿真+程序keil5
[打印本頁]
作者:
coolice
時間:
2021-7-12 00:27
標題:
基于51單片機的七彩呼吸燈proteus仿真+程序keil5
1) 起始狀態時,8個燈處于同頻率“呼吸”狀態。
(2) 按鍵1按下時,1號到8號依次由亮到暗“呼吸”。
(3) 按鍵2按下時,1號到8號依次由暗到亮“呼吸”。
(4)按鍵3按下時,恢復起始亮法。
由于是在仿真中,需要加入驅動電路才能看出來“呼吸”的效果,否則只能看到燈在閃爍。
做實物時不需要加驅動電路,直接連接單片機就可以看出來那種效果。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
3.gif
(121.47 KB)
下載附件
2021-7-12 00:25 上傳
單片機源程序如下:
#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);}
}
}
復制代碼
七彩呼吸燈完整源碼和仿真文件.zip
(118.5 KB, 售價: 2 E幣)
2021-7-12 00:27 上傳
點擊文件名下載附件
售價: 2 E幣
[記錄]
[
購買
]
歡迎光臨 ELEOK (http://m.afoofa.cn/)
Powered by Discuz! X5.0