这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 按键扫描小技巧

共1条 1/1 1 跳转至

按键扫描小技巧

工程师
2014-09-29 20:14:54     打赏

经常用到按键检测程序,如果用到循环扫描的方法检测按键,通常利用以下语句:

 if(key1==0)
  {
     delay(5);
      if(key1==0)   
         key_num=1; 
      while(key1==0);
   }  语句delay(5)用于消抖延时,while(key1==0)用于检测按键是否松开,当按键按下时如果没有及时松开,程序会一直这里循环,影响其他语句执行。例如在程序中有数码管循环扫描程序,会造成每按一次按键数码管会短暂熄灭,造成闪烁。因此,利用一个全局变量button_flag作为标志数据可完美解决此问题:

 if(key1==0)
   { 
      if(button_flag==0)
      {
          button_flag=1;
          key_num=1;  
       }
   } else button_flag=0;    

当按键没有按下时button_flag=0,当按键按下时,因button_flag=0,能够读取键值,如果没松手,第二次执行到这儿时,因button_flag=1,不读取键值,button_flag也依旧不变,第三次,第四次执行到这儿都是这种情况。只有松手button_flag才会变为0,此方法还有消抖的功能,可以去掉延时消抖函数,进一步减少cpu的消耗时间。可以大大提升cpu的效率。


共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]