單片機(jī)跑馬燈強(qiáng)化版
#include
#include
#define uint unsigned int
#define uchar unsigned char//宏定義
void delay(uint a);//聲明延時函數(shù)
uchar c,d;
sbit P00=P0^0;
sbit P30=P3^0;
sbit P31=P3^1;
sbit P32=P3^2;//位操作
bit key_flag=0;//位定義
void main()
{
uint e,h;
P00=0;
delay(100);
P00=1;
delay(500);
P00=0;
TMOD=1;//設(shè)定定時器工作方式為1
TH1=(65536-20000)/256; //定時器高八位裝入初值
TL1=(65536-20000)%256;//定時器低八位裝入初值
ET0=1;//啟動定時器中斷
EA=1;//開啟總中斷
TR0=1;//開啟定時器
while(1)
{
if(key_flag==1)
{
c=0xfe;d=0xfe;
for(e=8;e>0;e--)
{if(key_flag==1)
{for(h=8;h>0;h--)
{P1=c;
delay(100);
c=_crol_(c,1);//左移一位
}
P2=d;
d=_crol_(d,1);//LED跑馬燈主程序
P30=0;P31=0;//位操作
delay(100);
P30=1;P31=1;//位操作
}
else P2=0xdb;//P1口電平
}
}
else
P1=0x7e;//P2口電平
}
}
void delay(uint a)//延時函數(shù)
{
uint f,g;
for(;a>0;a--)
for(f=200;f>0;f--);
for(g=200;g>0;g--);
}
void timer_int0() interrupt 1//聲明中斷函數(shù)
{
if(P32==0)
{delay(60);//鍵盤防抖延遲
if(P32==0)
key_flag=1^key_flag;//按位異或
}
TH1=(65536-20000)/256;//定時器高八位重新裝入初值
TL1=(65536-20000)%256;//定時器低八位重新裝入初值
}//此為按鍵檢測,每隔20ms檢測一次
評論