独闷闷网

 找回密码
 立即注册
搜索
查看: 3997|回复: 2
打印 上一主题 下一主题
收起左侧

[求助] 为什么用else if(ucKeyLock1==0);判断按键被按下?已解答。

[复制链接]
跳转到指定楼层
楼主
发表于 2014-7-22 22:20:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 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,防止按键按住不松手的时候不断触发按键。这样,按键只能按一次触发一次,松开手后再按一次,又触发一次。



乐于分享,勇于质疑!
沙发
发表于 2014-10-15 22:10:50 | 只看该作者
厉害,洪哥
乐于分享,勇于质疑!
回复

使用道具 举报

板凳
 楼主| 发表于 2014-10-15 23:11:12 | 只看该作者

谢谢夸奖。
乐于分享,勇于质疑!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|独闷闷网 ( 粤ICP备12007667号-2 )

GMT+8, 2024-11-29 20:50 , Processed in 0.202599 second(s), 16 queries .

快速回复 返回顶部 返回列表