用51单片机写了一个流水灯程序,有一点问题,请高手解惑

2024-11-24 18:21:59
推荐回答(3个)
回答1:

单片机的流水灯程序,因为程序就这么写的,决定了流水灯左移7次,再右移7次,结束两个循环后,才能执行下面的while(!key),按键才有效,而在循环过程中,不执行while(!key),所以按键无效。下图画红框内的两个循环。


要想按键随时有效,应该把两个移位函数_cror_,_crol_ 放在主程中,检测key也放在主程中,而不能这样放一个子程序中。

回答2:

因为你的开关控制和你的亮灯循环耦合了啊。
while(key)
{
u8 i=0;
l1=0xfe;
for(i=0;i<7;i++)
{
l1=_crol_(l1,1);
delay(20000);
}
for(i=0;i<7;i++)
{
l1=_cror_(l1,1);
delay(20000);
}
你这段代码 按键除非一直松开,如果for循环不结束除非你有按键中断要等它流水灯跑完..
例如添加个int light_sign = 0; switch(key) 每次扫到了light_sign就 ++
当 key = 0 || light_sign 越过你闪烁灯范围(这里是7)就清零
然后你的灯根据获得的light_sign 进行当前变化而非for循环就行了.

回答3:

#include
#include
#define LED P2
void delay(char i);
void main()
{ unsigned char LedVablue=0xFE;
while(1)
{
LedVablue= _crol_(LedVablue,1); //_crol_(x,Y)是
//里面的一个库函数,相当于汇编的带进位循环
LED=LedVablue;
delay(100);

}
}
void delay(char i)
{
char j;
for(;i>0;i--)
for(j=0;j<250;j++);
}