按鍵設計一覽
按鍵——在嵌入式系統應用里,占有非常重要的地位。按鍵——也是用戶(hù)交互系統里最重要的一個(gè)部分。雖然,目前大行其道的觸摸屏,電容屏吞噬了大壁江山,但是按鍵依然不可替代。于是,我們就來(lái)看看按鍵是如何設計的吧!
本文引用地址:http://dyxdggzs.com/article/278713.htm1、單個(gè)I/O口的實(shí)現方式
這種方式硬件設計最為簡(jiǎn)單,軟件實(shí)現也最為容易,但是其占用I/O口比例較高,如果按鍵大于4個(gè),則此方案就值得商榷。硬件原理示意圖如圖1所示:
圖1 單個(gè)I/O口實(shí)現方式
軟件的實(shí)現方式較多,各有各自特點(diǎn),無(wú)論是大師級的,還是菜鳥(niǎo)級的都能勝任。下面版主給大家介紹這種被譽(yù)為“最經(jīng)典的按鍵掃描方法”。
源代碼如下:
unsigned char Trg;
unsigned char Cont;
void KeyRead( void )
{
unsigned char ReadData = PINB^0xff; // 1
Trg = ReadData & (ReadData ^ Cont); // 2
Cont = ReadData; // 3
}
Trg(triger) 代表的是觸發(fā),Cont(continue)代表的是連續按下。這兩個(gè)變量均被聲明為全局變量,被用做標志符。我們在使用時(shí),需要以一個(gè)定時(shí)間隔(如20ms)來(lái)查詢(xún)這兩個(gè)變量,并計數來(lái)判斷去抖與長(cháng)按。
2、矩陣掃描方式(一)
矩陣掃描的方式,我想大家在學(xué)習嵌入式時(shí),教程一定會(huì )介紹的。因此這里版主也就不再多說(shuō)了。硬件設計如圖2所示:
圖2 矩陣掃描方式(一)
軟件設計上,一個(gè)行掃描,一個(gè)列檢測?;驹谒械慕坛汤锒加羞@個(gè)軟件示例。這里,版主不再贅述。
此方法的缺點(diǎn)是中規中矩。
3、矩陣掃描方式(二)
看完課本的教程后,下面的方法也許會(huì )給大家耳目一新的感覺(jué)。硬件設計如圖3所示:
圖3 課本設計升級版
軟件設計也是相當簡(jiǎn)單的,假定鍵盤(pán)行列IO口標號分別為H1/H2/H3和V1/V2/V3,掃鍵流程通常如下:Step1、H1/H2/H3和V1/V2/V3都設置為輸入;Step2、讀H1/H2/H3和V1/V2/V3狀態(tài),如果Hx和Vy讀到的狀態(tài)均為0,則認為Hx與Vy交叉位置的鍵按下。
從上面流程可以看出程序代碼要簡(jiǎn)單不少,既能減少掃鍵的代碼量,又能加快掃鍵處理的時(shí)間,站在軟件的角度看此方法要較課本的方式先進(jìn)的多。
此方法的缺點(diǎn)是:貌似這樣三個(gè)觸點(diǎn)的按鍵不太好找。
4、矩陣掃描方式(三)
當現實(shí)情況相當復雜時(shí),僅有有限個(gè)IO口,但是依然需要大量按鍵輸入時(shí),我們就必須要開(kāi)動(dòng)腦筋了。正如下圖4所示的硬件電路。
圖4 新型按鍵掃描矩陣設計
3個(gè)IO口掃出9個(gè)鍵!我們再分析一下分析通得過(guò)才能真正使用。假設掃鍵流程:先掃對地的3個(gè)鍵,再掃描上面2排按鍵。先掃對地3個(gè)鍵,判斷沒(méi)有按鍵,接著(zhù)對逐一對IO口進(jìn)行掃鍵。但當對某一IO口掃鍵時(shí),如果有對地的鍵按下,這時(shí)有可能會(huì )誤判按鍵,因為對地鍵比其他鍵有更高的響應優(yōu)先級。例如:掃IO1,IO1 輸出“0”,恰好此時(shí)S4按下,IO2 檢測到有按鍵,那就不能判斷是S4還是S9。我們可以在程序上避免這種按鍵誤判:若IO2 檢測到有按鍵,那下一步就去判斷是否有對地鍵按下,如果沒(méi)有,那就可以正確地判斷是S4了。
這種方法的缺點(diǎn)是這個(gè)電路設計已經(jīng)被申請專(zhuān)利了,所以小伙伴們~~這個(gè)電路設計千萬(wàn)不要在工作中使用喲~~~
5、專(zhuān)用按鍵掃描芯片實(shí)現方式
這個(gè)版主并不想多說(shuō)了,我們最最常用的101鍵盤(pán)就是屬于此類(lèi)的實(shí)現方式。當然,對于嵌入式使用的小型按鍵也有小型的按鍵掃描芯片。這里版主推薦給大家的是周立功的按鍵掃描專(zhuān)用芯片zlg7920。這個(gè)芯片是通過(guò)I2C方式通訊,不再占用系統的IO引腳,實(shí)現也非常方式,參考資料百度也是非常多的。這里版主就不多說(shuō)了,廣告已經(jīng)打了不少了,嘿嘿~~
總結:在版主的實(shí)際工作中,主要以引腳方式來(lái)實(shí)現按鍵,再多的按鍵推薦還是用專(zhuān)用芯片來(lái)做吧~~
linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂) 電容屏相關(guān)文章:電容屏原理 雙絞線(xiàn)傳輸器相關(guān)文章:雙絞線(xiàn)傳輸器原理
評論