51单片机,按键控制流水灯程序,懂的进!
51单片机,按键控制流水灯程序,懂的进!
八个LED灯与单片机P1口连,按键key1与单片机P32连.该程序是完成以下工作:单片机上电,流水灯每一秒移一位,当按键key1按下后,流水灯停止在该灯处;当再次按下key1时,流水灯在停止处继续移位.
在有些时候(注意:只是有些时候)在流水灯运行的时候,按下按键,流水灯停止,而当再一次按下的时候,流水灯却一直停在那里,而不重新开始运行了.
请各位高手帮我看看该程序是否哪里有缺陷!
//
#include
#include
#define uchar unsigned char
#define uint unsigned int
sbit key1=P3^2;
uchar num=0,temp;
void delay_ms(uchar N)
{
x05uchar i,j;
x05for(i=N;i>0;i–)
x05x05for(j=220;j>0;j–);
}
void init()
{
x05P0=0xfe;
x05TMOD=0x01;
x05TH0=(65536-45872)/256;
x05TL0=(65536-45872)%256;
x05EA=1;
x05ET0=1;
x05TR0=1;x05
}
void display(void)
{
x05P0=_crol_(P0,1);
x05temp=P0;
}
void key_scan(void)
{
x05if(key1==0)
x05{
x05x05delay_ms(10);
x05x05if(key1==0)
x05x05{
x05x05x05P0=temp;
x05x05x05TR0=~TR0;
x05x05}
x05}
x05while(!key1);
}
void main()
{
x05init();
x05while(1)
x05{
x05x05if(num==20)
x05x05{
x05x05x05num=0;
x05x05x05display();
x05x05}
x05x05key_scan();
x05}
}
void timer0() interrupt 1
{
x05TH0=(65536-45872)/256;
x05TL0=(65536-45872)%256;
x05num++;
}
不好意思,8个LED是与单片机P0口连,写错了.程序中写的P0是没错的!