独闷闷网
标题:
为什么用else if(ucKeyLock1==0);判断按键被按下?已解答。
[打印本页]
作者:
jianhong_wu
时间:
2014-7-22 22:20
标题:
为什么用else if(ucKeyLock1==0);判断按键被按下?已解答。
本帖最后由 jianhong_wu 于 2014-11-5 22:10 编辑
if(key_sr1==1)//IO是高电平,说明按键没有被按下,这时要及时清零一些标志位
{
ucKeyLock1=0; //按键自锁标志清零
uiKeyTimeCnt1=0;//按键去抖动延时计数器清零,此行非常巧妙,是我实战中摸索出来的。
}
else if(ucKeyLock1==0)//有按键按下,且是第一次被按下 为什么?
{
uiKeyTimeCnt1++; //累加定时中断次数
if(uiKeyTimeCnt1>const_key_time1)
{
uiKeyTimeCnt1=0;
ucKeyLock1=1; //自锁按键置位,避免一直触发
ucKeySec=1; //触发1号键
}
}
鸿哥解答:
(1)首先,我们要明白C语言的语法中,
if(条件1)
{
}
else if(条件2)
{
}
以上语句是一对组合语句,不能分开来看。当条件1成立的时候,它是绝对不会判断条件2的。当条件1不成立的时候,才会判断条件2
。
因此回到我们的问题,当程序执行到条件2
else if(ucKeyLock1==0)
的时候,就已经默认了 条件1
if(key_sr1==1)
不成立,这个条件不成立,就意味着
key_sr1==0
,也就是有按键被按下,所以,这里的else if(ucKeyLock1==0)等于else if(ucKeyLock1==0&&key_sr1==0),而
ucKeyLock1是一个自锁标志位,一旦按键被触发后,这个标志位会变1,防止按键按住不松手的时候不断触发按键。这样,按键只能按一次触发一次,松开手后再按一次,又触发一次。
作者:
wzy616611
时间:
2014-10-15 22:10
厉害,洪哥
作者:
jianhong_wu
时间:
2014-10-15 23:11
wzy616611 发表于 2014-10-15 22:10
厉害,洪哥
谢谢夸奖。
欢迎光临 独闷闷网 (http://dumenmen.com/)
Powered by Discuz! X3.2