新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于Murphypinyin的嵌入式鍵盤設計

        基于Murphypinyin的嵌入式鍵盤設計

        作者: 時間:2014-11-23 來源:網絡 收藏

          引 言

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

          隨著嵌入式系統的飛速發展,在嵌入式手持設備中,人機交互設備是與用戶接觸最多的部分,最能夠直接快速地體現出該設備的性能。所以,是否有一個友好的、快速的、可靠的人機交互設備已經成為衡量一款手持設備的重要指標。在嵌入式人機交互設備中,鍵盤由于其具有很高的準確性和可靠性,能夠適應各種惡劣的工作環境,并且具有很長的使用壽命,而得到廣泛應用。

          本文根據手持終端的特點,設計出一款矩陣鍵盤,并在平臺下開發出鍵盤的驅動程序。采用Qt/Embedded構建圖形界面,通過對Qt/Embedded自帶輸入法的分析,結合Murphpinyin中文輸入法軟件包,構建了一款可輸入數字、中/英文的嵌入式鍵盤。

          1 硬件設計

          本系統的硬件部分主要是一個4列5行的矩陣鍵盤,如圖1所示。其中列線COL0~COL3使用了S3C2440的4個中斷引腳——EINT10、ENIT13、EINT15、EINT20,并且每根列線都有一個4.7 kΩ的上拉電路,把中斷引腳電平拉高,確保按鍵空閑時不會觸發中斷;行線ROW0~ROW4使用的是S3C2440的5個普通I/O口——GPE11、 GPE13、GPG3、GPG6、GPG11。這里需要注意的問題是,一定要確保列線所用的中斷在的各個設備中尚未使用到,否則在后面的驅動程序中將會造成驅動程序初始化失敗。



          考慮到手持終端操作的方便性,將所有的按鍵進行重新布局,如圖2所示。為了延長手持設備的使用壽命、提高可靠性,增加了電源按鍵Power。另外,考慮到手持設備的低功耗要求,增加了背光控制按鈕Back-Light,通過控制LCD_PWREN引腳的高低電平,控制LCD背光的開關。其中電源按鍵 Power、背光控制按鍵BackLight為單獨按鍵,直接與S3C2440的中斷引腳相連。本文重點對矩陣鍵盤做詳細介紹,電源按鍵和背光控制按鍵的處理機制與矩陣鍵盤類似,這里不再做介紹。



          2 軟件設計

          2.1 矩陣鍵盤的驅動程序設計

          矩陣鍵盤是作為Linux的一個字符設備注冊到系統中的。為了降低對系統資源的損耗,采用中斷處理函數對按鍵做處理;同時考慮到按鍵的抖動問題,采用定時器來消除抖動。

          該驅動程序的流程如圖3所示。首先,使用S3C2440_Kb_init()函數將鍵盤作為一個字符設備進行注冊,初始化行線引腳為:輸出、非上拉,并將所有行輸出置為低電平;注冊該鍵盤設備。初始化列線所連接的中斷引腳為:輸入、下降沿觸發中斷,并建立中斷與中斷處理函數Key_interrupt()的連接。



          當有按鍵按下后,由于所有的行為低電平,必然有一行和一列線導通,從而將相應的列線拉低,觸發中斷。然后,中斷處理函數Key_interrupt()記錄相應的中斷號碼,由于按鍵存在抖動,單憑一次中斷的觸發就判定相應的按鍵按下很不可靠,所以在中斷觸發后開啟定時器kb_timer對按鍵狀態再次進行判定。

          上層應用程序使用S3C2440_Kb_open()打開鍵盤設備,開啟列線中斷,初始化定時器。當中斷觸發后,開啟定時器,定時器定時時間到后,觸發定時器中斷kb_timer_handler()。kb_timer_handler()首先會調用鍵盤掃描函數 Scan_keyboard()掃描按鍵狀態,Scan_keyboard()流程如圖4所示。如果經過3次鍵盤掃描,每次都掃描到相同的按鍵值被按下,則證明確實有按鍵被按下,Scan_keyboard()函數返回:KEYDOWN。如果按本次按鍵值與上一次按鍵值不同,則保存本次按鍵值到循環隊列,這樣可以不保存重復數據到緩沖隊列。如果連續10次掃描到按鍵的狀態都不為KEY_DOWN,則證明按鍵已經彈起,關閉定時器kb_timer。



          S3C2440_Kb_read()函數負責從循環隊列中讀取按鍵值反饋給上層應用程序。

        linux操作系統文章專題:linux操作系統詳解(linux不再難懂)

        linux操作系統文章專題:linux操作系統詳解(linux不再難懂)

        linux相關文章:linux教程



        上一頁 1 2 下一頁

        關鍵詞: Murphypinyin Linux

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 黄石市| 微博| 中山市| 南通市| 墨江| 商水县| 舒城县| 盐池县| 虹口区| 定南县| 白玉县| 古蔺县| 凉山| 阿图什市| 沛县| 外汇| 浙江省| 兴和县| 寿阳县| 丰宁| 萨嘎县| 剑河县| 淄博市| 兴城市| 扎赉特旗| 永城市| 晋城| 巴林右旗| 延川县| 平潭县| 衡水市| 北流市| 双江| 潜山县| 云阳县| 南涧| 扬中市| 珠海市| 绵阳市| 嵩明县| 青河县|