xkdlwj的个人空间 https://bbs.21ic.com/?862122 [收藏] [复制] [RSS]

日志

按键扫描小技巧

已有 694 次阅读2013-1-20 12:22 |系统分类:单片机| 按键, 扫描, 小技巧

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

 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的效率。


路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)