新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于ARM9的多行列鍵盤設計及其驅動實現

        基于ARM9的多行列鍵盤設計及其驅動實現

        作者: 時間:2012-04-13 來源:網絡 收藏

        3.3 掃描程序

        的工作原理是通過的行線和列線的狀態來判斷鍵盤中有無按鍵被按下。鍵盤掃描程序的功能就是用來判斷處于按下狀態的按鍵的具體位置及取得相應的鍵碼值,因此掃描程序的是鍵盤模塊的核心。

        鍵盤掃描程序的主要有兩種,即輪詢方式和中斷方式[5]。在本例中,利用操作系統定時器隊列與輪詢掃描方式結合的方法對鍵盤的程序進行了,主要是以下兩個方面的原因。其一是AT91RM9200芯片的中斷信號線是非常寶貴的硬件資源,每一組GPIO端口只配置了一根中斷信號線,即32個GPIO端口共享一條信號線。這樣若采用中斷方式,則至少需要占用一條芯片中斷信號線,對多的鍵盤,如果其所采用的 GPIO端口不是來自于同一組時,就需要占用多條中斷信號線。而且若其他設備使用的GPIO端口與鍵盤使用的GPIO口屬于同一組,那么在兩種設備的程序中,必須進行中斷共享,這樣不僅使系統的軟件設計更為復雜,且易產生中斷丟失和中斷竟態等問題,使設備性能受到影響。其二鍵盤是系統中屬于一種相對低速的設備,采用輪詢方式完全可以滿足鍵盤的輸入要求。

        ARM-Linux操作系統提供了良好的定時器機制,因此通過簡單定時器操作,就可以以固定間隔對鍵盤的狀態進行掃描并對按鍵事件進程處理,固定間隔的大小可根據系統需求進行配置,定義器的詳細操作可參見文獻[1]。如前所述,鍵盤掃描程序的功能就是對鍵盤的狀態進行判斷和處理。若無按鍵按下,則掃描直接返回;若有按鍵按下,則對被按下鍵的位置進行判斷,并將相應的鍵碼值寫入緩沖區中。因為本例中的鍵盤是為POS機配置,因此按鍵的準確性是至關重要,因此在掃描代碼中對按鍵值進行了多次驗證,下面是本例中使用的鍵盤掃描程序的偽代碼:
        int Scan_Keyboard()
        {

        定義并初始化變量;

        取得鍵碼放置緩沖區的自旋鎖;

        if 緩沖區中還有空;

        ① 依次判斷各GPIO口的狀態,若無低電平,則無鍵按下,直接退出if語句;否則,有鍵按下,且當前檢驗的GPIO口連接的行線即為按鍵所在的行;

        ② 給鍵盤列線連接的數據線依次送入高電平,再通過判斷按鍵行線所在的GPIO端口的電平狀態,得到按鍵所在的列;

        延時一小段時間,以消除鍵盤抖動;

        ③ 再向給鍵盤列線連接的數據線全送低電平,使用代碼段①再次判斷是否有鍵按下,若有,則取得按鍵所在的行;

        ④ 同樣使用代碼段②重新判斷按鍵所在的列;

        ⑤ 判斷第一次得到的按鍵的行與列是否與第二次完全一樣,若完全相同,則可進入下一步,否則退出if語句;

        ⑥ 重新向給鍵盤列線連接的數據線全送低電平,并判斷按鍵是否彈起,若仍處于按下狀態,則繼續等待,否則根據行與列,轉化為相應鍵值,并寫入緩沖區;

        if語句結束;

        釋放自旋鎖;

        函數返回 0;
        }

        完成驅動程序代碼編寫后,就可以將鍵盤的驅動程序加載到ARM-Linux內核中了,既可以采用靜態加載方式,也可以采用動態方式進行加載。加載后,在應用程序中鍵盤的編程使用方式與其他字符設備一樣。采用本文所述方式設計的鍵盤,目前已配置在筆者參與開發的POS機中交用戶使用,據用戶測試,鍵盤的輸入準確率和反應時間都達到了設計要求。

        4、結束語

        本文以運行ARM-Linux的AT91RM9200系統為基礎,提出了一種在上擴展特殊鍵盤的新設計方法,并對鍵盤擴展的硬件設計和驅動軟件開發都作了詳細說明。本設計方法利用數據鎖存方式替代了常規的GPIO擴展,提高了系統硬件的資源利用率,這一思想也為在其他嵌入式設備擴展多鍵盤提供了一種新的設計思路。

        參考文獻
        [1] 魏永明,駱剛,姜君(譯).Linux設備驅動程序(第二版)[M].中國電力出版社.2002.4
        [2] ATMEL.AT91RM9200 User Manual.2005
        [3] 張秀松.AT91RM9200的嵌入式工業控制系統設計[J].微計算機信息,2006,1-2:45-47
        [4] 王建忠,田力,武凌.20T核的AT91RM9200微控制器在嵌入式家庭網關中的應用[J].微計算機信息, 2004,20(5):49-51
        [5] 馬忠梅.ARMLinux嵌入式系統教程[M].北京航空航天大學出版社.2004.9

        DIY機械鍵盤相關社區:機械鍵盤DIY


        pos機相關文章:pos機原理



        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 棋牌| 将乐县| 黄冈市| 云阳县| 老河口市| 绥滨县| 彰化县| 萨嘎县| 抚顺市| 文昌市| 浪卡子县| 离岛区| 东乡| 乃东县| 广南县| 德昌县| 花垣县| 浦江县| 中阳县| 墨竹工卡县| 镇安县| 封丘县| 扎兰屯市| 杂多县| 田东县| 潞城市| 荆门市| 外汇| 金溪县| 城固县| 绥化市| 通城县| 甘德县| 昌图县| 临沭县| 宁远县| 普宁市| 沅陵县| 长葛市| 商城县| 仙游县|