999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于Murphypinyin的嵌入式鍵盤設計

2010-06-22 08:19:50吳蓬勃張金燕卜新華
單片機與嵌入式系統應用 2010年1期
關鍵詞:嵌入式英文設備

吳蓬勃,張金燕,卜新華

(1.石家莊郵電職業技術學院,石家莊050031; 2.石家莊鐵道學院)

吳蓬勃(助教),主要研究方向為嵌入式系統開發。

引 言

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

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

1 硬件設計

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

圖1 5×4矩陣鍵盤電路原理

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

圖2 5×4矩陣鍵盤布局圖

2 軟件設計

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

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

該驅動程序的流程如圖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()函數負責從循環隊列中讀取按鍵值反饋給上層應用程序。

圖4 鍵盤掃描函數Scan_keyboard()流程

圖3 矩陣鍵盤驅動程序流程

2.2 Qt/Embedded的鍵盤映射

Qt/Embedded是 Trolltech公司針對采用嵌入式Linux的電子設備開發的綜合應用平臺。Qt/Embedded包含完整的應用層、靈活的用戶界面、窗口操作系統、應用程序以及開發框架[1]。

Qt/Embedded本身提供了對按鍵的支持,它在文件qkeyboard_qws.cpp中提供了一個QWSKeyboardHandler類來處理按鍵事件。本系統創建了QWSKeyboardHandler類的一個子類 QWSKEYMATRIXHandler。在 QWSKEYMATRIXHandler類的構造函數中,通過open()函數打開矩陣鍵盤key_matrix,通過對打開的鍵盤設備創建一個QscoketNotifer[1]來監控按鍵設備,通過信號與槽機制,建立該QscoketNotifer與讀鍵盤函數ReadKeyboardData()的連接,當key_matrix被激活時,就會觸發讀鍵盤函數ReadKeyboardData()。代碼如下:

notifier=new QSocketNotifier(key_matrix,QSocketNotifier::Read,this);

connect(notifier,SIGNAL(activated(int)),this,SLOT(ReadKeyboardData()));

在讀鍵盤函數ReadKeyboardData()中,調用矩陣鍵盤驅動程序的讀函數Read()來獲取按鍵值。為了使得按鍵值能夠傳送給應用程序,要使用QWSKeyboardHandler類的成員函數processKeyEvent(int unicode,int keycode,int modifiers,bool isPress,bool autoRepeat)[3],各參數功能如下:

①Unicode:按鍵的 Unicode編碼,如數字 1的unicode編碼為1,字母A的unicode編碼為A。如果該項為0,則為功能鍵 Shift、Left、Right等;如果該項為 0xFFFF,則只傳送鍵值keycode,不打印編碼。

②Keycode:Qt中使用的按鍵名稱,如Qt::Key_Backspace、Qt::Key_Enter等。

③Modifiers:Qt所支持的鍵盤組合鍵。

④isPress:判斷按鍵的狀態是“按下”還是“彈起”。

⑤autoRepeat:判斷本次事件是有自動重復機制產生,還是由一個現實中的按鍵產生。

通過processKeyEvent()函數可以發送數字、小寫英文、大寫英文,但是目前Qt/Embedded上沒有中文輸入法,不能輸入中文。

2.3 Murphpinyin拼音輸入法的移植

Murphypinyin是目前為止基于Qt/Embedded的一個比較好的開源中文輸入法,而且Murphypinyin帶有軟鍵盤,用戶可以通過觸摸屏輸入中文、英文、數字和符號等。對于Murphypinyin到Qt/Embedded的移植,網絡上有很多參考資料,這里不再作介紹。

但是將Murphypinyin應用到手持終端上目前還有一個問題:Murphypinyin帶有的軟鍵盤是標準的 PC101鍵盤,按鍵數量很多。在對體積、重量要求很苛刻的手持終端上,觸摸屏本身的尺寸受到嚴重的制約,PC101鍵盤會占據觸摸屏的大部分顯示面積;而且單個按鍵所占面積很小,從而對觸摸屏的定位精度要求很高。然而觸摸屏本身受周圍環境的影響較大,很容易造成定位不準。本系統將矩陣鍵盤映射到Murphypinyin上,通過矩陣鍵盤輸入中文、英文和數字,這樣在手持終端上可以使用普通的LCD,從而降低了系統成本、提高了系統的可靠性。

首先考慮的問題是:如何用鍵盤打開Murphypinyin輸入法?這里可以修改Murphypinyin軟件包中的Pinyin-Frame.cpp文件中的:

bool QPinyinFrame::filter(int unicode,int keycode,int modifiers,bool isPress,bool autoRepeat)

其中:if(!isHidden()&&isPress)語句用來判斷Murphypinyin輸入法是否已經打開并且有按鍵按下。如果是,則判斷當前是中文模式、還是英文模式。中文模式則調用GetKey(unicode,keycode)函數,根據輸入的拼音搜索漢字;英文模式則調用SendKey(unicode,keycode)函數發送大寫或小寫英文字母。如果unicode==9&&keycode==Qt::Key_Tab,則進行中英文切換。在這里可以添加判斷語句:if(keycode==Qt::Key_Num-Lock)。當NumLock按鍵按下時,調用:QPinyinFrame::sizeHint()和QPinyinFrame::show()兩個函數來開啟Murphypinyin輸入法界面。如果再次按下NumLock按鍵,則調用QPinyinFrame::hide()來隱藏輸入法界面。

用鍵盤打開Murphypinyin輸入法之后,可以通過鍵盤發送拼音字母來輸入漢字。通過發送unicode==9&&keycode==Qt::Key_Tab來進行中英文切換。

2.4 按鍵復用

由于手持終端設備對自身的體積有嚴格的要求,為了縮小鍵盤的體積,本系統模仿手機鍵盤的布局,采用按鍵復用的方式來縮小鍵盤大小。將26個英文字母按字母表順序3個或4個一組依次排列在2~9這8個數字鍵上,并與阿拉伯數字進行復用[4](見圖2)。

硬件上的簡化必然導致軟件復雜度的增加。為了使得系統能夠在按下一個按鍵后自動識別是數字、英文大寫字母、英文小寫還是拼音字母,需要修改Qt/Embedded中qkeyboard_qws.cpp的QWSKEYMATRIXHandler::ReadKeyboardData()函數。

當有按鍵按下后,首先需要判斷當前是處于何種模式:數字、拼音、小寫英文還是大寫英文模式,實現流程如圖5所示。通過NumLock按鍵和狀態標志字English-Mode來進行數字狀態和其他幾個狀態的切換。通過Tab按鍵來進行中、英文模式的切換,通過CapsLock按鍵來進行英文大小寫字母的切換。

為了使一個按鍵能夠輸入不同的字符,本系統使用不同的key_ID值來標識各個字符,這樣,每按一次鍵都是不同的。圖6是對于按鍵2的復用過程。根據不同的key_ID結合當前所處的輸入模式,發送相應的數字、小寫英文或大寫英文字符。

圖5 輸入模式切換圖

圖6 一鍵多用

3 總 結

本文介紹了基于S3C2440的矩陣鍵盤的硬件設計方法和軟件的驅動開發方法,通過將Murphpinyin開源軟件包與Qt/Embeded自帶輸入法的融合,使用按鍵復用的策略,采用較少的按鍵,構建了一款可輸入數字、中/英文的嵌入式鍵盤,并在S3C2440上實現。為手持終端提供了一種嵌入式鍵盤的解決方案。

[1]胡章勇,蔣朝根.Linux的鍵盤驅動與Qt/E的鍵盤映射[J].單片機與嵌入式系統應用,2008(9).

[2]李杰,曹宇,等.基于嵌入式Linux的矩陣鍵盤的設計與實現[J].現代電子技術,2006(24).

[3]Trolltech.QWSKeyboardHandler Class Reference.[2009-10-05].http://www.kuqin.com/qtdocument/qwskeyboardhandler.html#processKeyEvent.

[4]張萍,徐晶.Qt/Embedded環境下嵌入式鍵盤驅動的實現[J].計算機工程,2007,33(11).

猜你喜歡
嵌入式英文設備
諧響應分析在設備減振中的應用
基于MPU6050簡單控制設備
電子制作(2018年11期)2018-08-04 03:26:08
搭建基于Qt的嵌入式開發平臺
嵌入式軟PLC在電鍍生產流程控制系統中的應用
電鍍與環保(2016年3期)2017-01-20 08:15:32
英文摘要
鄱陽湖學刊(2016年6期)2017-01-16 13:05:41
英文摘要
英文摘要
財經(2016年19期)2016-08-11 08:17:03
英文摘要
500kV輸變電設備運行維護探討
工業設計(2016年12期)2016-04-16 02:52:00
原來他們都是可穿戴設備
消費者報道(2014年7期)2014-07-31 11:23:57
主站蜘蛛池模板: 国产欧美视频一区二区三区| 国产色爱av资源综合区| 日韩欧美网址| 亚洲AV成人一区二区三区AV| 91热爆在线| 国产精品yjizz视频网一二区| 欧美啪啪网| 四虎永久免费网站| 国产午夜小视频| 久久精品波多野结衣| 亚洲中文在线视频| 麻豆精品国产自产在线| 99久久精彩视频| 国产凹凸一区在线观看视频| 中文字幕在线免费看| 伊人久久综在合线亚洲2019| 国产午夜福利在线小视频| 日韩精品免费一线在线观看| 老司国产精品视频91| 亚洲国产无码有码| 最新国产高清在线| 91福利免费| 色婷婷视频在线| 最新精品久久精品| 欧美亚洲日韩中文| 亚洲日本www| 伊人久热这里只有精品视频99| 人妻中文久热无码丝袜| 成人午夜福利视频| 欧美精品xx| 性视频一区| 四虎国产永久在线观看| 少妇人妻无码首页| 免费观看欧美性一级| 熟妇人妻无乱码中文字幕真矢织江| 五月天综合网亚洲综合天堂网| 中文字幕亚洲乱码熟女1区2区| 日韩av手机在线| 欧美一区中文字幕| 欧美日本中文| 国产福利免费视频| 国产小视频a在线观看| 欧美色丁香| 欧美午夜视频在线| 国产精品自在自线免费观看| 蝌蚪国产精品视频第一页| 欧美狠狠干| 97超级碰碰碰碰精品| 99视频在线看| 午夜视频日本| 女人爽到高潮免费视频大全| 国产日本一线在线观看免费| 色网站在线免费观看| 国产欧美视频在线| 2021最新国产精品网站| 亚洲欧美日韩成人在线| 又大又硬又爽免费视频| 日韩毛片免费观看| 欧美在线一二区| 日本a∨在线观看| 精品视频一区二区观看| 无码中字出轨中文人妻中文中| 欧美一级黄片一区2区| 欧美另类精品一区二区三区 | 色135综合网| 91丝袜在线观看| 国产精品污污在线观看网站| 免费毛片网站在线观看| 中文字幕在线永久在线视频2020| 试看120秒男女啪啪免费| 无码精品一区二区久久久| 亚洲综合中文字幕国产精品欧美| 国产成人免费| 在线免费观看AV| 91精品国产自产在线老师啪l| 亚洲综合国产一区二区三区| 国产91小视频在线观看| 久久永久免费人妻精品| 亚洲天堂免费| 九九热在线视频| 亚洲三级影院| 成人91在线|