新聞中心

        EEPW首頁 > 嵌入式系統 > 牛人業話 > 按鍵設計一覽

        按鍵設計一覽

        作者:jobs 時間:2015-08-13 來源:電子產品世界 收藏

          ——在系統應用里,占有非常重要的地位。——也是用戶交互系統里最重要的一個部分。雖然,目前大行其道的觸摸屏,電容屏吞噬了大壁江山,但是依然不可替代。于是,我們就來看看按鍵是如何設計的吧!

        本文引用地址:http://www.104case.com/article/278713.htm

          1、單個I/O口的實現方式

          這種方式硬件設計最為簡單,軟件實現也最為容易,但是其占用I/O口比例較高,如果按鍵大于4個,則此方案就值得商榷。硬件原理示意圖如圖1所示:

          圖1 單個I/O口實現方式

          軟件的實現方式較多,各有各自特點,無論是大師級的,還是菜鳥級的都能勝任。下面版主給大家介紹這種被譽為“最經典的按鍵掃描方法”。

          源代碼如下:

          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) 代表的是觸發,Cont(continue)代表的是連續按下。這兩個變量均被聲明為全局變量,被用做標志符。我們在使用時,需要以一個定時間隔(如20ms)來查詢這兩個變量,并計數來判斷去抖與長按。

          2、矩陣掃描方式(一)

          矩陣掃描的方式,我想大家在學習時,教程一定會介紹的。因此這里版主也就不再多說了。硬件設計如圖2所示:

          圖2 矩陣掃描方式(一)

          軟件設計上,一個行掃描,一個列檢測。基本在所有的教程里都有這個軟件示例。這里,版主不再贅述。

          此方法的缺點是中規中矩。

          3、矩陣掃描方式(二)

          看完課本的教程后,下面的方法也許會給大家耳目一新的感覺。硬件設計如圖3所示:

          圖3 課本設計升級版

          軟件設計也是相當簡單的,假定鍵盤行列IO口標號分別為H1/H2/H3和V1/V2/V3,掃鍵流程通常如下:Step1、H1/H2/H3和V1/V2/V3都設置為輸入;Step2、讀H1/H2/H3和V1/V2/V3狀態,如果Hx和Vy讀到的狀態均為0,則認為Hx與Vy交叉位置的鍵按下。

          從上面流程可以看出程序代碼要簡單不少,既能減少掃鍵的代碼量,又能加快掃鍵處理的時間,站在軟件的角度看此方法要較課本的方式先進的多。

          此方法的缺點是:貌似這樣三個觸點的按鍵不太好找。

          4、矩陣掃描方式(三)

          當現實情況相當復雜時,僅有有限個IO口,但是依然需要大量按鍵輸入時,我們就必須要開動腦筋了。正如下圖4所示的硬件電路。

          圖4 新型按鍵掃描矩陣設計

          3個IO口掃出9個鍵!我們再分析一下分析通得過才能真正使用。假設掃鍵流程:先掃對地的3個鍵,再掃描上面2排按鍵。先掃對地3個鍵,判斷沒有按鍵,接著對逐一對IO口進行掃鍵。但當對某一IO口掃鍵時,如果有對地的鍵按下,這時有可能會誤判按鍵,因為對地鍵比其他鍵有更高的響應優先級。例如:掃IO1,IO1 輸出“0”,恰好此時S4按下,IO2 檢測到有按鍵,那就不能判斷是S4還是S9。我們可以在程序上避免這種按鍵誤判:若IO2 檢測到有按鍵,那下一步就去判斷是否有對地鍵按下,如果沒有,那就可以正確地判斷是S4了。

          這種方法的缺點是這個電路設計已經被申請專利了,所以小伙伴們~~這個電路設計千萬不要在工作中使用喲~~~

          5、專用按鍵掃描芯片實現方式

          這個版主并不想多說了,我們最最常用的101鍵盤就是屬于此類的實現方式。當然,對于使用的小型按鍵也有小型的按鍵掃描芯片。這里版主推薦給大家的是周立功的按鍵掃描專用芯片zlg7920。這個芯片是通過I2C方式通訊,不再占用系統的IO引腳,實現也非常方式,參考資料百度也是非常多的。這里版主就不多說了,廣告已經打了不少了,嘿嘿~~

          總結:在版主的實際工作中,主要以引腳方式來實現按鍵,再多的按鍵推薦還是用專用芯片來做吧~~

        linux操作系統文章專題:linux操作系統詳解(linux不再難懂)
        電容屏相關文章:電容屏原理
        雙絞線傳輸器相關文章:雙絞線傳輸器原理


        關鍵詞: 嵌入式 按鍵

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 桐庐县| 牟定县| 萍乡市| 景洪市| 濉溪县| 尼勒克县| 无棣县| 奉化市| 合江县| 闽清县| 龙州县| 铁岭县| 聊城市| 百色市| 平乐县| 彭州市| 青阳县| 鹰潭市| 高密市| 句容市| 江阴市| 邢台市| 新乐市| 澄城县| 清镇市| 即墨市| 延边| 光山县| 庆安县| 伽师县| 内乡县| 红桥区| 通许县| 河东区| 峡江县| 丽江市| 安国市| 丰城市| 尤溪县| 镇赉县| 闵行区|