獨立式按鍵和矩陣式按鍵相對,是指一個按鍵占用一個GPIO口的情況,主要用在按鍵數(shù)比較少的場合,用作按鍵輸入實現(xiàn)產(chǎn)品的人機交互。比如洗衣機的面板按鍵、電飯煲的按鍵等。
按鍵一般都是通過機械式按鍵來實現(xiàn)的,根據(jù)是否自鎖可以分為自鎖按鍵和非自鎖按鍵。自鎖按鍵,導通和斷開需要兩次按鍵動作,第一次按下時處于導通/斷開狀態(tài),松手后保持該狀態(tài),第二次按下后實現(xiàn)復位。而非自鎖按鍵,松手后即復位,如果要狀態(tài)保持,需要持續(xù)按壓。機械式按鍵是通過簧片接觸和斷開實現(xiàn)開關動作的,所以在按下和彈起的時候都會出現(xiàn)抖動的情況。如果不處理抖動就會出現(xiàn)誤動作。所以,機械式按鍵的消抖處理是必須的。如下圖所示。
抖動發(fā)生在按下和彈起時,一般抖動持續(xù)5-10ms,程序在按鍵檢測時,如果不進行濾波則會出現(xiàn)按鍵多次的誤觸發(fā)。那么消抖程序該如何設計呢?
在學習單片機初期,很多例程都告訴我們采用延時的方法去抖動,思路如下:當檢測到按鍵動作時,先延時10ms,在進行一次按鍵檢測,如果還是檢測到按鍵動作,則再延時10ms,如果還能檢測到按鍵動作則認為按鍵發(fā)生了。這種方法最容易理解,但是非常浪費資源。不建議使用。
在設計產(chǎn)品時,一般使用如下兩種方式。第一種方式,定義一個按鍵計數(shù)變量和標志位,當檢測到按鍵時,讓按鍵計數(shù)變量自加,判斷按鍵計數(shù)器的值如果大于一定值,則標志位置1,否則標志位清零。
第二種方式。采用定時器中斷,設置10ms定時變量,當按鍵發(fā)生時啟動定時器,10ms后進入中斷再次檢測按鍵事件,如果依然檢測到按鍵發(fā)生則代表按鍵有效。
以上消抖方案可以根據(jù)實際情況進行優(yōu)化。
免責聲明:本文內(nèi)容由21ic獲得授權后發(fā)布,版權歸原作者所有,本平臺僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!