您好打扰了,我想问一下,我想利用两个独立按键,控制流水灯的两种状态变换。
想要的效果就是比如K1按下就一直显示这种状态,按下K2切换另一种状态,松手流水灯不会熄灭
#include
#include
void Delay10ms() //@12.000MHz
{
unsigned char i, j;
i = 117;
j = 184;
do
{
while (--j);
} while (--i);
}
sbit K3 = P3^2;
sbit K4 = P3^3;
sbit led1 = P2^0;
sbit led2 = P2^1;
sbit led3 = P2^2;
sbit led4 = P2^3;
sbit led5 = P2^4;
sbit led6 = P2^5;
sbit led7 = P2^6;
sbit led8 = P2^7;
void main()
{
while(1)
{
if(K3==0)
{
led1 = 0;
led8 = 0;
Delay10ms();
led1 = 1;
led8 = 1;
led2 = 0;
led7 = 0;
Delay10ms();
led2 = 1;
led7 = 1;
led3 = 0;
led6 = 0;
Delay10ms();
led3 = 1;
led6 = 1;
led4 = 0;
led5 = 0;
Delay10ms();
led4 = 1;
led5 = 1;
}
else
{
P2=0xff;
}
if(K4==0)
{
Delay10ms();
led1 = 0;
Delay10ms();
led1 = 1;
led2 = 0;
Delay10ms();
led2 = 1;
led3 = 0;
Delay10ms();
led3 = 1;
led4 = 0;
Delay10ms();
led4 = 1;
led5 = 0;
Delay10ms();
led5 = 1;
led6 = 0;
Delay10ms();
led6 = 1;
led7 = 0;
Delay10ms();
led7 = 1;
led8 = 0;
Delay10ms();
led8 = 1;
}
else
{
P2=0xff;
}
}
}
你的需求就有点模糊,两个按键,就会有四种组合状态,你只描述了两种情况而且这两种情况还只提到了一个按键的状态。
对这类应用,可以给个通用的处理框架:
1,主循环里检测按键状态,根据按键状态确定LED显示模式
2,定时器中断里刷新LED状态,根据LED显示模式和当前时刻确定显示状态,改变每个LED的亮灭。用定时器中断有个好处,不会因为按键检测的消抖延时导致显示节奏被打乱。