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

#include<reg52.h>sbitkey=P3^2;sbitLED=P1^0;unsignedinti,j;voiddelay(unsignedintz){for... #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);
}
}
}
为啥独立按键按下后再释放时邓不熄灭了?
展开
 我来答
hpj4525
2012-11-22 · TA获得超过331个赞
知道小有建树答主
回答量:479
采纳率:100%
帮助的人:336万
展开全部
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);//你的程序跑到这里 就卡在这里了 一直停在这里
}
}
}
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
笑谈我不言9514
2012-11-22 · TA获得超过622个赞
知道小有建树答主
回答量:522
采纳率:0%
帮助的人:317万
展开全部
LED=~LED;
while(1); //死里面了。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xjcwcl123
2012-11-22 · TA获得超过303个赞
知道小有建树答主
回答量:483
采纳率:0%
帮助的人:286万
展开全部
你最后一句while(1);就进入死循环了,按键怎么会有反应呢?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
小粒子ex877
2012-11-22 · TA获得超过127个赞
知道小有建树答主
回答量:1607
采纳率:0%
帮助的人:508万
展开全部
因为下面多了个while(1)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式