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