<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于Windows CE的7×3手機(jī)鍵盤(pán)驅(qū)動(dòng)實(shí)現(xiàn)

          基于Windows CE的7×3手機(jī)鍵盤(pán)驅(qū)動(dòng)實(shí)現(xiàn)

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

          對(duì)于7×3的,下圖為物理按鍵和掃描碼的對(duì)應(yīng)關(guān)系(掃描碼為16進(jìn)制):

           

          5列(KP_MKOUT4)

          6列(KP_MKOUT5)

          7列(KP_MKOUT6)

          1行(KP_MKIN0)

          0x04

          0x05

          0x06

          2行(KP_MKIN1)

          0x14

          0x15

          0x16

          3行(KP_MKIN2)

          0x24

          0x25

          0x26

          4行(KP_MKIN3)

          0x34

          0x35

          0x36

          5行(KP_MKIN4)

          0x44

          0x45

          0x46

          6行(KP_MKIN5)

          0x54

          0x55

          0x56

          7行(KP_MKIN6)

          0x64

          0x65

          0x66

          7. ScanCodeToVKeyEx函數(shù)

          此函數(shù)提供掃描碼到虛擬鍵的映射操作,主要調(diào)用MapVkeyFromSCode函數(shù)完成從掃描碼到虛擬按鍵的映射。在 MapVkeyFromSCode函數(shù)的實(shí)現(xiàn)過(guò)程中,首先需要按照自己的要求和物理鍵盤(pán)的布局確定SC2VKMap[i][j]二維數(shù)組,其中數(shù)組的第一列為物理鍵盤(pán)上每個(gè)按鍵所對(duì)應(yīng)的掃描碼,第二列為第一列掃描碼所對(duì)應(yīng)的虛擬按鍵,開(kāi)發(fā)者可以根據(jù)實(shí)際需要確定掃描碼和虛擬按鍵的對(duì)應(yīng)關(guān)系,通過(guò)這個(gè)二維數(shù)組的設(shè)定,就可以在程序運(yùn)行的過(guò)程中,當(dāng)檢測(cè)到有按鍵被按下時(shí),通過(guò)KeypdPdd_GetEventEx函數(shù)產(chǎn)生的掃描碼,然后通過(guò)查表的方式得到掃描碼所對(duì)應(yīng)的虛擬按鍵值。下表為掃描碼與虛擬碼的對(duì)應(yīng)關(guān)系表:

           

          5列

          6列

          7列

          掃描碼

          虛擬碼

          物理按鍵

          掃描碼

          虛擬碼

          物理按鍵

          掃描碼

          虛擬碼

          物理按鍵

          1行

          0x04

          VK_A

          預(yù)留

          0x05

          VK_B

          0x06

          VK_C

          預(yù)留

          2行

          0x14

          VK_D

          0x15

          VK_E

          菜單鍵

          0x16

          VK_F

          3行

          0x24

          VK_G

          OK鍵

          0x25

          VK_H

          0x26

          VK_I

          Cancel鍵

          4行

          0x34

          VK_1

          1

          0x35

          VK_2

          2

          0x36

          VK_3

          3

          5行

          0x44

          VK_4

          4

          0x45

          VK_5

          5

          0x46

          VK_6

          6

          6行

          0x54

          VK_7

          7

          0x55

          VK_8

          8

          0x56

          VK_9

          9

          7行

          0x64

          VK_J

          *

          0x65

          VK_0

          0

          0x66

          VK_K

          #

          其中VK_A、VK_B、VK_C、VK_D、VK_E、VK_F、VK_G、VK_H、VK_I、VK_J、VK_K、VK_1、VK_2、 VK_3、VK_4、VK_5、VK_6、VK_7、VK_8、VK_9、VK_0對(duì)應(yīng)的輸出為A、B、C、D 、E、F、G、H、I、J、K、1、2、3、4、5、6、7、8、9、0,但實(shí)際顯示的時(shí)候可以按照具體的要求進(jìn)行定義,完成物理按鍵對(duì)應(yīng)的輸出值,每個(gè)按鍵所實(shí)現(xiàn)的功能是由上層應(yīng)用程序定義的,這里再不詳細(xì)敘述。

          8. KeyPadGpioConfigure函數(shù)

          此函數(shù)的功能是完成所對(duì)應(yīng)GPIO口的配置,在具體函數(shù)的實(shí)現(xiàn)和開(kāi)發(fā)中必須按照物理鍵盤(pán)的布局及芯片引腳占用情況進(jìn)行相應(yīng)的更改的。下面為KeyPadGpioConfigure函數(shù)的實(shí)現(xiàn):

          XLLP_UINT32_T GpioDirOutList[]={3,107,108,96, }; //3個(gè)輸出端口引腳號(hào)

          XLLP_UINT32_T GpioDirInList[]={7,100,101,102,97,39,90,91}; //矩陣鍵盤(pán)7個(gè)輸出端口引腳號(hào)XLLP_UINT32_T GpioAltFnPinList[]={10,39,90,91,96,97,100,101,102,107,108};//矩陣鍵盤(pán)GPIO引腳 XLLP_UINT32_T GpioAltFnValList[]={10,1,1,1,3,1,1,1,1,2,2}; // GPIO對(duì)應(yīng)的附加功能選擇

          if(v_pGPIOReg != 0) //判斷鍵盤(pán)GPIO寄存器是否已經(jīng)被配置

          {

          XllpGpioSetDirectionIn(v_pGPIOReg, GpioDirInList); //設(shè)置GPIO輸入端口方向

          XllpGpioSetDirectionOut(v_pGPIOReg, GpioDirOutList); //設(shè)置GPIO輸出端口方向

          XllpGpioSetOutput0(v_pGPIOReg, GpioDirOutList); //設(shè)置GPIO輸出端口

          XllpGpioSetAlternateFn(v_pGPIOReg, GpioAltFnPinList, GpioAltFnValList); //設(shè)置GPIO附加功能

          }

          if(v_pKeyPadRegs != 0) //判斷鍵盤(pán)寄存器是否已經(jīng)被配置

          {

          v_pKeyPadRegs->kpControlReg=(MATRIX_KP_NUMBER_OF_ROWS| MATRIX_KP_NUMBER_OF_COLUMNS | MAT_SCAN_LINE4 | MAT_SCAN_LINE5 | MAT_SCAN_LINE6 | AUTO_SCAN_ON_ACTIVITY | MATRIX_INTR_ENABLE | MATRIX_KP_ENABLE ) ; //設(shè)置矩陣鍵盤(pán)控制寄存器初值

          retval = XLLP_TRUE;

          }

          return(retval);

          9. 結(jié)束語(yǔ)

          本文作者創(chuàng)新點(diǎn):完整地分析了Windows CE操作系統(tǒng)中7×3矩陣鍵盤(pán)的基本原理及其驅(qū)動(dòng)程序模型,此設(shè)計(jì)是按照目前通用的手機(jī)鍵盤(pán)開(kāi)發(fā)。并從實(shí)現(xiàn)方法的角度深入剖析了Windows CE中矩陣鍵盤(pán)掃描碼的獲取流程、將掃描碼映射到虛擬碼的方法,最后給出了矩陣鍵盤(pán)所對(duì)應(yīng)GPIO口的配置方法,對(duì)于類(lèi)似系統(tǒng)的矩陣鍵盤(pán)驅(qū)動(dòng)開(kāi)發(fā)具有重要的參考價(jià)值。

          參考文獻(xiàn)

          [1] 阿蘭特嵌入式實(shí)驗(yàn)室.PXA27x處理器開(kāi)發(fā)手冊(cè),2005:825-826.

          [2] 楊翠娥,王麗敏,王景敏.實(shí)時(shí)系統(tǒng)VxWorks下設(shè)備驅(qū)動(dòng)程序的編寫(xiě)[J].微計(jì)算機(jī)信息2004年第一期

          [3] 傅曦.Windows CE 嵌入式開(kāi)發(fā)入門(mén)——基于Xscale架構(gòu)[M] 北京.人民郵電出版社,2006 :227-230.

          [4] 微軟.Platform Builder幫助文檔.

          [5] Windows CE設(shè)備驅(qū)動(dòng)程序開(kāi)發(fā)指南:15-16.


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

          關(guān)鍵詞: 矩陣鍵盤(pán) WindowsCE MDD PDD

          評(píng)論


          相關(guān)推薦

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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();