<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
關(guān) 閉

新聞中心

EEPW首頁(yè) > 工控自動(dòng)化 > 設計應用 > MiniGUI中開(kāi)發(fā)實(shí)現鍵盤(pán)輸入設備方案解析

MiniGUI中開(kāi)發(fā)實(shí)現鍵盤(pán)輸入設備方案解析

作者: 時(shí)間:2012-05-14 來(lái)源:網(wǎng)絡(luò ) 收藏

嵌入式系統通常擁有特定的。用于實(shí)現數據輸入和人機交互,其種類(lèi)繁多,并且不同的設備依賴(lài)不同的硬件實(shí)現。為了減弱系統的硬件相關(guān)性和提高可移植性,提供了統一的輸入抽象層IAL(Input Abstract Layer)接口來(lái)支持不同的,減小了開(kāi)發(fā)輸入設備的難度。下面以開(kāi)發(fā)4×4小輸入為例,介紹在中開(kāi)發(fā)和實(shí)現特定輸入設備輸入的方法。

本文引用地址:http://dyxdggzs.com/article/202338.htm

1 輸入的處理方式

MiniGUI對鍵盤(pán)輸入的處理方式如圖1所示。鍵盤(pán)設備驅動(dòng)程序從鍵盤(pán)接收原始的輸入事件和數據,并把它轉換為MiniGUI抽象的鍵盤(pán)事件和數據。相關(guān)的底層事件處理例程把這些鍵盤(pán)事件轉換為上層的擊鍵消息,放到相應的消息隊列中。應用程序通過(guò)消息循環(huán)獲取這些消息,交由窗口過(guò)程處理。

開(kāi)發(fā)特定的鍵盤(pán)輸入,主要完成底層的兩部分工作:鍵盤(pán)驅動(dòng)程序設計和鍵盤(pán)輸入引擎開(kāi)發(fā)。前者負責從鍵盤(pán)接收原始輸入事件和數據,后者負責把原始的輸入事件和數據轉抉成MiniGUI抽象的鍵盤(pán)事件和數據。至于抽象鍵盤(pán)事件和數據轉換成上層的擊鍵消息等工作,則是由MiniGUI提供的底層事件處理例程自己完成,無(wú)需用戶(hù)設計,這正是MiniGUI提供輸入抽象層接口(IAL)所帶來(lái)的好處。下面具體介紹小鍵盤(pán)輸入的開(kāi)發(fā)過(guò)程與實(shí)現方法,主要介紹重要接口函數的實(shí)現。

2 鍵盤(pán)驅動(dòng)程序設計

該設備驅動(dòng)要實(shí)現的主要功能是進(jìn)行小鍵盤(pán)行列掃描,接收原始鍵盤(pán)輸入事件和數據,如有無(wú)鍵按下、按下某鍵或釋放某鍵。返回的字符型按鍵信息(小鍵盤(pán)掃描碼)由兩部分組成:“高位”代表鍵盤(pán)輸入事件,即按下(高位為O)或釋放(高位為1);“低7 位”代表鍵盤(pán)輸入數據,即按下或釋放的按鍵值。

2.1 鍵盤(pán)按鍵值的獲取

當按下某個(gè)鍵時(shí),和該鍵所在行列相連的兩路通用外設I/O引腳就會(huì )導通,其電平就會(huì )相同,因此驅動(dòng)中只需要輪詢(xún)各路I/O引腳就可以知道按鍵值。比如,使各行線(xiàn)輸入低電平,各列線(xiàn)都通過(guò)上拉電阻接高電平,此時(shí)檢測各列,如果某一列電平為低,則說(shuō)明該列所在的鍵盤(pán)已經(jīng)按下,使該列與行導通變?yōu)榈碗娖?,這樣就可以確定按鍵所在列號(j);同理,將各列置低電平,再依次查詢(xún)各行,就可以確定按鍵的行號(i)。若定義一個(gè)鍵值映射數組key_arrow[5] [5]表示所有鍵盤(pán)按鍵值:Key_arrow[5][5]={{0,O,O,O,0,0},{0,‘7’,‘8’,‘9’,‘A’},{0,‘4’, ‘5’,‘6’,‘B’},{0,‘1’,‘2’,‘3’,‘C’},{0,‘D’,‘O’,‘.’,‘E’}},則按鍵值就為key_arrow[i] [j]。初始化時(shí)行列號均為0,因此當小鍵盤(pán)無(wú)鍵按下時(shí),返回按鍵值為0(即字符NULL)。

需要注意的是,要保證驅動(dòng)正常工作,設置好行列線(xiàn)的輸入輸出模式后,需要一定時(shí)間延時(shí)以后才能開(kāi)始進(jìn)行行(列)查詢(xún)。這是因為行列線(xiàn)進(jìn)行輸入輸出模式切換時(shí)存在硬件延遲。

2.2 鍵盤(pán)掃描碼的獲取

為了判斷鍵盤(pán)事件是按下還是釋放,定義兩個(gè)無(wú)符號型字符變量last和key。前者是靜態(tài)變量,存放等待釋放的鍵的按鍵值,即前一次掃描讀到的按鍵值;后者存放當前鍵盤(pán)掃描碼。當鍵盤(pán)事件為按下時(shí),它的值和鍵盤(pán)按鍵值相同;當鍵盤(pán)事件為釋放時(shí),它的值等于last高位置l后的值。

2.3 功能實(shí)現流程

我們用驅動(dòng)程序read接口函數實(shí)現這些功能。當應用程序凋用read函數后,該函數先進(jìn)行行列掃描,得到鍵盤(pán)按鍵值key_arrow[i][j]后進(jìn)行判斷。著(zhù)其非零,即有鍵按下,則直接將此按鍵值作為鍵盤(pán)的掃描碼(key=key_arrow[i][j]),并將其賦給字符變量last,表示該鍵等待釋放。如果key_arrow[i][j]為零,即無(wú)鍵按下,則判斷是否有需要釋放的鍵:若沒(méi)有(即last為O),就直接將按鍵值(key=0)作為鍵盤(pán)掃描碼;若有鍵需要釋放(1ast非零),就把1ast高位置1作為鍵盤(pán)掃描碼(key=last 10x80),表示釋放剛按下的鍵,然后last清零,表示已沒(méi)有按鍵等待釋放。read函數最后發(fā)送鍵盤(pán)掃描碼(key)到用戶(hù)緩沖區后返回。

3 鍵盤(pán)輸入引擎的設計

第2部分要開(kāi)發(fā)的是小鍵盤(pán)輸入引擎。它負責把鍵盤(pán)驅動(dòng)提供的原始鍵盤(pán)輸入事件和數據(即小鍵盤(pán)掃描碼)轉換為MiniGUI抽象的鍵盤(pán)事件和數據(由系統掃描碼索引的鍵盤(pán)數組)。

3.1 MiniGUI的IAL接口

前面已提到,IAL定義了一組不依賴(lài)于任何特殊硬件的抽象接口,而用于實(shí)現這一抽象接口的底層代碼就稱(chēng)為輸入引擎。在代碼實(shí)現上,MiniGUI通過(guò) INPUT結構來(lái)表示“輸入引擎”。它實(shí)際是一個(gè)擁有若干函數指針成員的結構體,MiniGUI在特定的時(shí)候調用這些函數來(lái)達到操作硬件的目的,因此,編寫(xiě)特定的輸入引擎,主要就是編碼實(shí)現INPUT結構中的各個(gè)函數。該結構定義在/minigui-free/libminigui-1.3. 3/src/ial/ial.h中,其中的主要成員函數如表l所列。為表述方便,定義當前工作目錄為/mlnlgui-free/libminigui- 1.3.3,后文出現的所有文件目錄及路徑均在該目錄下。

DIY機械鍵盤(pán)相關(guān)社區:機械鍵盤(pán)DIY



上一頁(yè) 1 2 3 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>