在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 基于Murphypinyin的嵌入式鍵盤設計

            基于Murphypinyin的嵌入式鍵盤設計

            作者: 時間:2010-03-02 來源:網絡 收藏

              2 軟件

            本文引用地址:http://www.biyoush.com/article/152071.htm

              2.1 矩陣的Linux驅動程序

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

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


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

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


              S3C2440_Kb_read()函數負責從循環(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類的構造函數中,通過open()函數打開矩陣鍵盤 key_matrix,通過對打開的鍵盤設備創(chuàng)建一個QscoketNotifer來監(jiān)控按鍵設備,通過信號與槽機制,建立該 QscoketNotifer與讀鍵盤函數ReadKeyboardData()的連接,當key_matrix被激活時,就會觸發(fā)讀鍵盤函數 ReadKeyboardData()。代碼如下:

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

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

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

             ?、賃nicode:按鍵的Unicode編碼,如數字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)是“按下”還是“彈起”。

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

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

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


            評論


            相關推薦

            技術專區(qū)

            關閉