<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統 > 設計應用 > 淺談如何按鍵消抖

          淺談如何按鍵消抖

          作者: 時間:2012-08-06 來源:網絡 收藏

          軟件消抖

          如果按鍵較多,常用軟件方法去抖,即檢測出鍵閉合后執(zhí)行一個,5ms~10ms的延時,讓前沿抖動消失后再一次檢測鍵的狀態(tài),如果仍保持閉合狀態(tài)電平,則確認為真正有鍵按下。當檢測到按鍵釋放后,也要給5ms~10ms的延時,待后沿抖動消失后才能轉入該鍵的處理程序。還可以利用定時器中斷來消抖。

          下面再介紹一種的方法:利用switch()結構,程序設計如下:

          無延時的軟件消抖


          /*********************************************
          名稱:鍵盤掃描子函數
          功能:在按鍵穩(wěn)定期內判斷鍵值,并返回鍵值
          **********************************************/
          uchar keyscan(void)
          {
          static char key_state = 0;
          static char key_value = 0;
          uchar key_press, key_return = 0;
          key_press=turn_leftturn_right; //讀按鍵I/O電平
          switch (key_state)
          {
          case 0 : // 按鍵初始態(tài)
          if (key_press==0) key_state = 1; // 鍵被按下,但需要確認是否是干擾
          break;
          case 1 : // 按鍵確認態(tài)
          if (key_press==0)
          //如有鍵按下則不是干擾,判斷鍵值
          { if(turn_left==0) //判斷是哪一個按鍵被按下
          key_value=1; //按鍵較多時可采用switch選擇結構
          else if(turn_right==0)
          key_value=2;
          else key_value=0;
          key_state = 2; // 狀態(tài)轉換到鍵釋放態(tài)
          }
          else key_state = 0; // 按鍵已抬起,屬于干擾,轉換到按鍵初始態(tài)
          break;
          case 2 :
          if (key_press==1)
          {
          key_return=key_value;//按鍵釋放后再輸出鍵值
          key_value=0;
          key_state = 0; //如果按鍵釋放,轉換到按鍵初始態(tài)
          } break;
          }return key_return; //返回鍵值
          }
          /*********************************************
          名稱:按鍵處理子函數
          功能:
          **********************************************/
          void key_operation(void)
          {
          switch (keyscan()) //根據鍵值不同,執(zhí)行不同的內容
          { case 1:
          hight_votage-=1;
          if(hight_votage5)
          hight_votage=5; break;
          case 2:
          hight_votage+=1;
          if(hight_votage>25)
          hight_votage=25; break;
          default :break;
          }
          }
          只要有按鍵就一定要想到消抖,總之不管是硬件消抖還是軟件消抖,在腦海里始終要想到按鍵按下時出現圖一的情景,然后再進行相應的設計。

          幾個好的按鍵設計的總結
          對于多個按鍵的設計常用思路是: 按照面向過程的編程方式, 將數據與過程分離. 把和按鍵狀態(tài)相關的東西比如按鍵功能統統塞到結構里, 把消抖的代碼放在一個函數中。這里介紹按鍵設計的幾種方法:

          1、 矩陣鍵盤,http://www.51hei.com/f/jzjpcx.rar
          (這個文檔里放了幾個矩陣鍵盤的程序,個人覺得這幾個程序比較精簡,大家可以參看一下)

          2、 ADC按鍵,具體設計點擊這個網址:http://www.ceet.hbnu.edu.cn/bbs/viewthread.php?tid=7641extra=highlight=%CA%FD%D7%D6%CA%BE%B2%A8%C6%F7page=2

          ADC按鍵的優(yōu)點是節(jié)省IO口,但是需要調配好電阻值,個人覺得有點麻煩。

          3、 并入串出按鍵,具體設計點擊這個網址:http://www.ceet.hbnu.edu.cn/bbs/redirect.php?tid=8059goto=lastpost#lastpost

          4、 4*3鍵盤并且復用端口很牛 http://www.51hei.com/mcu/1316.html


          上一頁 1 2 下一頁

          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();