单片机独立按键控制LED灯的熄灭

#include<reg52.h>
sbit key=P3^2;
sbit LED=P1^0;
unsigned int i,j;
void delay(unsigned int z)
{
for(i=10;i>0;i--)
for(j=z;j>0;j--);
}
void main()
{
key=1;
while(1)
{
LED=1;
if(!key)
{
delay(20);
if(!key)
LED=~LED;
while(1);
}
}
}
为啥独立按键按下后再释放时邓不熄灭了?

第1个回答  2012-11-22
LED=~LED;

取反的速度太快
按键按下 实际是led高频闪烁

按键松开后 跳出while(1)松手检测
然后在main的while(1)里面一直等待按键再次按下,同时led=1,也就是说是亮 因此
你的函数的功能基本上可以是 按键按下 led高频闪烁
按键松开 led常亮

所以你要改逻辑结构才行追问

我的LED=1表示是熄灭状态,还有那个while(1)既然表示死循环,那么我按下后即使松开,它是不是在继续执行while循环啊?我觉得while循环它是跳不出去的。

追答

void main()
{
key=1;
while(1)
{
LED=1;
if(!key)
{
delay(20);
if(!key)
LED=~LED;
while(1);//你的程序跑到这里 就卡在这里了 一直停在这里
}
}
}

本回答被提问者和网友采纳
第2个回答  2012-11-22
LED=~LED;
while(1); //死里面了。。
第3个回答  2012-11-22
你最后一句while(1);就进入死循环了,按键怎么会有反应呢?
第4个回答  2012-11-22
因为下面多了个while(1)
相似回答