不用中断一样的实现,而且可以有多少个按键就可以有多少种流水灯方式。你使用的键盘函数直接调用流水灯函数就可以。比如使用独立键盘,if(P1.1==0) light_water(); 然后:
void light_water()
{
num=1;
for(a=0;a<8;a++)
{
P1.1=num<<1;
delay(1000); //延时;
keyboard();//执行时又不停扫描键盘函数;
}
}
这样就会有一个LED从右往左移动8次;那么当第一次流水未完时,又调用第二个流水函数light_water1就能中断当前执行的流水函数又去执行第二个流水灯函数了。
希望我的回答能帮助到你。
这个程序可以试一下
#include "reg52.h"
typedef unsigned int WORD;
sbit key = P3^4;
void Delay_ms(WORD n)//软件延时
{
WORD x;
while (n--)
{
x = 100;
while (x--);
}
}
void main()
{
bit Y=0;
P1=0X01;
P3=0XFF;
while(1)
{
if(key==0)
{
Delay_ms(10);
if(!key)
{
Y=~Y;
while(!key);
}
}
if(Y==1)
{
if(P1==0X00)P1=0X01;
Delay_ms(100);
P1=P1<<1;
}
}
}
具体怎么控制,暂停后灯需要亮吗?