四種單片機按鍵設計方案與改進,拿走不謝!

在單片機系統里,按鍵是常見的輸入設備。本文將介紹四種按鍵硬件設計上的方案和一些軟件設計方面的技巧。

四種按鍵硬件設計

方案一:單個按鍵


直接檢測GPIO口單個按鍵,如圖1所示。

四種單片機按鍵設計方案與改進,拿走不謝!的圖1

圖1 方案一


方案二:矩陣鍵盤


在按鍵較多的情況下,則使用矩陣鍵盤,如圖2所示。


四種單片機按鍵設計方案與改進,拿走不謝!的圖2

圖2 方案二


方案三:外部中斷


將按鍵接到外部中斷引腳上,利用按鍵按下產生的邊沿信號進行按鍵檢測,如圖3所示。


四種單片機按鍵設計方案與改進,拿走不謝!的圖3

圖3 方案三


方案四:利用ADC


利用單片機的數字轉換器(ADC),設定按鍵按下前后經過ADC接口電壓的不同,根據電壓的差異來識別按鍵,如圖4所示。


四種單片機按鍵設計方案與改進,拿走不謝!的圖4

圖4 方案四

優缺點分析

以上四種設計分別各有優點和不足。


第一種設計是最簡單、基礎的做法,對于單片機初學者很容易理解和使用,但缺點是需要在主循環中不斷檢測按鍵是否按下,并且需要做消抖處理。若主循環中某個函數任務占用時間較長,則按鍵會有不同程度的“失靈”。


第二種設計的優點是能夠在GPIO數量有限的情況下,擴展盡可能多的按鍵。但缺點同上,需要不停檢測按鍵是否按下。


第三種設計的效率Z高,不需要循環檢測按鍵是否按下,但缺點是需要單片機有足夠的外部中斷接口供使用。


第四種設計的優點是只需要單片機有一個ADC接口、一根線,就能對多個按鍵進行識別,缺點是按鍵內部一旦接觸不良,則可能導致按鍵串位,并且按鍵產生的抖動有可能會造成識別錯誤。


改進方法

在以上常見按鍵設計的基礎上,分享一下筆者學習和工作中總結的按鍵方案。


改進一:

在原方案一的基礎上,加上與門電路,使得任何一個按鍵按下都能產生中斷,然后在中斷里面識別是哪個按鍵被按下。這改動令電路不需要循環掃描,大大提高了效率。方案如圖5所示。只需要在每個按鍵對應地增加一個二極管,利用二極管的線與特性,就可以實現按下任何按鍵都能產生中斷信號,同時按鍵之間互不影響。二極管選用普通整流二極管即可,經過測試,可靠可行。


四種單片機按鍵設計方案與改進,拿走不謝!的圖5

圖5 改進一


改進二:

在原有ADC按鍵的基礎上,也可以增加二極管的方式,實現按鍵中斷,并在中斷服務程序里進行AD轉換,從而識別按鍵。電路如圖6所示。

四種單片機按鍵設計方案與改進,拿走不謝!的圖6

圖6 改進二


改進三:

按鍵時難免會造成抖動,因此必須按鍵消抖。消抖也可以通過硬件消抖和軟件消抖,這里分享一個十分簡單且有效的硬件消抖方法:給按鍵并聯一個104左右的電容,這樣軟件上基本不用處理即可消除抖動。


改進四:

在按鍵掃描檢測的方案下,如果主循環中有某個函數占用時間較長,按鍵或會發生長短不一的“失靈”。對此可以將按鍵掃描放到定時器中斷里面,這樣就可周期性地檢測按鍵按下的情況,在不受主循環的影響下解析出按鍵的不同狀態。(按下、按住、彈起和未按下)


如果都設置了以上的改進,仍要注意以下兩點:

  • 定時器的定時時間不可過長也不可過短。過長容易檢測不到按下,過短會占用大量時間資源。

  • 中斷服務程序需簡單明了。只做檢測用,通過全局變量傳遞,在主循環內完成按鍵響應,盡量不要在中斷服務函數內占用太多時間。

*本文系網絡轉載,版權歸原作者所有,如有侵權請聯系刪除

登錄后免費查看全文
立即登錄
App下載
技術鄰APP
工程師必備
  • 項目客服
  • 培訓客服
  • 平臺客服

TOP

1