<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 牛人業(yè)話 > 按鍵設(shè)計(jì)一覽

          按鍵設(shè)計(jì)一覽

          作者:jobs 時(shí)間:2015-08-13 來源:電子產(chǎn)品世界 收藏

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

          本文引用地址:http://www.ex-cimer.com/article/278713.htm

            1、單個(gè)I/O口的實(shí)現(xiàn)方式

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

            圖1 單個(gè)I/O口實(shí)現(xiàn)方式

            軟件的實(shí)現(xiàn)方式較多,各有各自特點(diǎn),無論是大師級(jí)的,還是菜鳥級(jí)的都能勝任。下面版主給大家介紹這種被譽(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)代表的是連續(xù)按下。這兩個(gè)變量均被聲明為全局變量,被用做標(biāo)志符。我們?cè)谑褂脮r(shí),需要以一個(gè)定時(shí)間隔(如20ms)來查詢這兩個(gè)變量,并計(jì)數(shù)來判斷去抖與長(zhǎng)按。

            2、矩陣掃描方式(一)

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

            圖2 矩陣掃描方式(一)

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

            此方法的缺點(diǎn)是中規(guī)中矩。

            3、矩陣掃描方式(二)

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

            圖3 課本設(shè)計(jì)升級(jí)版

            軟件設(shè)計(jì)也是相當(dāng)簡(jiǎn)單的,假定鍵盤行列IO口標(biāo)號(hào)分別為H1/H2/H3和V1/V2/V3,掃鍵流程通常如下:Step1、H1/H2/H3和V1/V2/V3都設(shè)置為輸入;Step2、讀H1/H2/H3和V1/V2/V3狀態(tài),如果Hx和Vy讀到的狀態(tài)均為0,則認(rèn)為Hx與Vy交叉位置的鍵按下。

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

            此方法的缺點(diǎn)是:貌似這樣三個(gè)觸點(diǎn)的按鍵不太好找。

            4、矩陣掃描方式(三)

            當(dāng)現(xiàn)實(shí)情況相當(dāng)復(fù)雜時(shí),僅有有限個(gè)IO口,但是依然需要大量按鍵輸入時(shí),我們就必須要開動(dòng)腦筋了。正如下圖4所示的硬件電路。

            圖4 新型按鍵掃描矩陣設(shè)計(jì)

            3個(gè)IO口掃出9個(gè)鍵!我們?cè)俜治鲆幌路治鐾ǖ眠^才能真正使用。假設(shè)掃鍵流程:先掃對(duì)地的3個(gè)鍵,再掃描上面2排按鍵。先掃對(duì)地3個(gè)鍵,判斷沒有按鍵,接著對(duì)逐一對(duì)IO口進(jìn)行掃鍵。但當(dāng)對(duì)某一IO口掃鍵時(shí),如果有對(duì)地的鍵按下,這時(shí)有可能會(huì)誤判按鍵,因?yàn)閷?duì)地鍵比其他鍵有更高的響應(yīng)優(yōu)先級(jí)。例如:掃IO1,IO1 輸出“0”,恰好此時(shí)S4按下,IO2 檢測(cè)到有按鍵,那就不能判斷是S4還是S9。我們可以在程序上避免這種按鍵誤判:若IO2 檢測(cè)到有按鍵,那下一步就去判斷是否有對(duì)地鍵按下,如果沒有,那就可以正確地判斷是S4了。

            這種方法的缺點(diǎn)是這個(gè)電路設(shè)計(jì)已經(jīng)被申請(qǐng)專利了,所以小伙伴們~~這個(gè)電路設(shè)計(jì)千萬不要在工作中使用喲~~~

            5、專用按鍵掃描芯片實(shí)現(xiàn)方式

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

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

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


          關(guān)鍵詞: 嵌入式 按鍵

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();