www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當前位置:首頁 > 嵌入式 > 嵌入式教程
[導讀]基于Murphypinyin的嵌入式鍵盤設計

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

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

  1  硬件設計

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


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

[!--empirenews.page--]
  2  軟件設計

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

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

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


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

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


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

  2.2  Qt/Embedded的鍵盤映射

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

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

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

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

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

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

 ?、贙eycode:Qt中使用的按鍵名稱,如Qt::Key_Backspace、Qt::Key_Enter等。

 ?、跰odifiers:Qt所支持的鍵盤組合鍵。

  ④isPress:判斷按鍵的狀態(tài)是“按下”還是“彈起”。

 ?、輆utoRepeat:判斷本次事件是有自動重復機制產(chǎn)生,還是由一個現(xiàn)實中的按鍵產(chǎn)生。

  通過processKeyEvent()函數(shù)可以發(fā)送數(shù)字、小寫英文、大寫英文,但是目前Qt/Embedded上沒有中文輸入法,不能輸入中文。[!--empirenews.page--]

  2.3 Murphpinyin拼音輸入法的移植

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

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

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

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

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

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


  2.4按鍵復用

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

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

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

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

  3  總  結

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

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

經(jīng)過幾十年發(fā)展,嵌入式技術已經(jīng)用在了我們生活中的方方面面,但是嵌入式始終都帶有小眾,專業(yè)性強的屬性,讓很多非嵌入式領域的同學望而卻步。近十幾年的發(fā)展,物聯(lián)網(wǎng)覆蓋了越來越多領域,包括了家居,商業(yè),工業(yè),農(nóng)業(yè)等領域,不僅吸引...

關鍵字: 嵌入式 物聯(lián)網(wǎng) 技術

隨著IT技術飛速發(fā)展,互聯(lián)網(wǎng)已經(jīng)進入了“物聯(lián)網(wǎng)”時代。物聯(lián)網(wǎng)中需要的大量設備不在依賴人與人之間的交互產(chǎn)生聯(lián)系,更多通過協(xié)議、通信、程序設計等方式連接到一處。即 “物聯(lián)網(wǎng)”的目的則是讓所有的物品都具有計算機的智能但并不以通...

關鍵字: 嵌入式 物聯(lián)網(wǎng) 計算機

法國高端氫動力汽車制造商Hopium發(fā)布全球首款氫動力轎車 -- Hopium Machina Vision。在2022年巴黎汽車周上,Hopium宣布重新開放Hopium Machina Vision訂購,首批交付車輛...

關鍵字: 汽車制造 PI CHINA MAC

阿布扎比和沙特正在權衡,是否在瑞信(Credit Suisse)股價低迷之際,對該行的投資銀行和其他業(yè)務進行投資。阿聯(lián)酋和沙特在分別探索通過各自的主權基金,例如阿布扎比穆巴達拉發(fā)展公司和沙特公共投資基金(PIF)進行潛在...

關鍵字: MICHAEL UI SE PI

最近看到APP上,給我推送了很多類似的回答,借此機會,也想著重新審視一下自己的學習歷程,以及結合自身和大牛,分享一些學習經(jīng)驗,希望對大家有所啟發(fā)和幫助。

關鍵字: APP 嵌入式 C語言

萬物智聯(lián)時代,嵌入式技術及其應用的形態(tài)將更加豐富和多元,同時也將日益呈現(xiàn)深度物理融合、混合架構共存、群體智能協(xié)同、網(wǎng)絡安全攸關等諸多新的計算特性。顯然,經(jīng)典的嵌入式系統(tǒng)體系結構、軟硬件技術和開發(fā)方法都已很難應對新趨勢下的...

關鍵字: 嵌入式 物聯(lián)網(wǎng) 計算機

物聯(lián)網(wǎng)是新一代信息技術的重要組成部分,是互聯(lián)網(wǎng)與嵌入式系統(tǒng)發(fā)展到高級階段的融合。通用計算機經(jīng)歷了從智慧平臺到互聯(lián)網(wǎng)的獨立發(fā)展道路;嵌入式系統(tǒng)則經(jīng)歷了智慧物聯(lián)到局域智慧物聯(lián)的獨立發(fā)展道路。

關鍵字: 嵌入式 物聯(lián)網(wǎng) 計算機

北京2022年10月9日 /美通社/ -- 中國國家藥品監(jiān)督管理局(NMPA)正式宣布批準了赫賽汀®(通用名:曲妥珠單抗注射液(皮下注射)),聯(lián)合化療用于治療早期和轉移性HER2陽性乳腺癌患者。作為全球首個抗HE...

關鍵字: 靜脈 BSP PI ST

今天,小編將在這篇文章中為大家?guī)砉た刂靼宓挠嘘P報道,通過閱讀這篇文章,大家可以對工控主板具備清晰的認識,主要內(nèi)容如下。

關鍵字: 工控主板 嵌入式 主板

隨著工業(yè)4.0、醫(yī)療電子、智能家居、物流管理和電力控制等快速的發(fā)展和推進,嵌入式系統(tǒng)利用自身的技術特點,逐漸成為眾多行業(yè)的標配產(chǎn)品。嵌入式系統(tǒng)具有可控制、可編程、成本低等,它在未來的工業(yè)和生活中有著廣闊的應用前景。在現(xiàn)在...

關鍵字: 嵌入式 物聯(lián)網(wǎng) 人工智能

嵌入式教程

6897 篇文章

關注

發(fā)布文章

編輯精選

技術子站

關閉