单片机独立按键控制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);
}
}
}
为啥独立按键按下后再释放时邓不熄灭了? 展开
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);
}
}
}
为啥独立按键按下后再释放时邓不熄灭了? 展开
4个回答
展开全部
LED=~LED;
取反的速度太快
按键按下 实际是led高频闪烁
按键松开后 跳出while(1)松手检测
然后在main的while(1)里面一直等待按键再次按下,同时led=1,也就是说是亮 因此
你的函数的功能基本上可以是 按键按下 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);//你的程序跑到这里 就卡在这里了 一直停在这里
}
}
}
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
LED=~LED;
while(1); //死里面了。。
while(1); //死里面了。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你最后一句while(1);就进入死循环了,按键怎么会有反应呢?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
因为下面多了个while(1)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |