独闷闷网

标题: 为什么用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