新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于Windows CE的7×3手機鍵盤驅動實現

        基于Windows CE的7×3手機鍵盤驅動實現

        作者: 時間:2012-03-22 來源:網絡 收藏

        對于7×3的,下圖為物理按鍵和掃描碼的對應關系(掃描碼為16進制):

         

        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函數

        此函數提供掃描碼到虛擬鍵的映射操作,主要調用MapVkeyFromSCode函數完成從掃描碼到虛擬按鍵的映射。在 MapVkeyFromSCode函數的實現過程中,首先需要按照自己的要求和物理鍵盤的布局確定SC2VKMap[i][j]二維數組,其中數組的第一列為物理鍵盤上每個按鍵所對應的掃描碼,第二列為第一列掃描碼所對應的虛擬按鍵,開發者可以根據實際需要確定掃描碼和虛擬按鍵的對應關系,通過這個二維數組的設定,就可以在程序運行的過程中,當檢測到有按鍵被按下時,通過KeypdPdd_GetEventEx函數產生的掃描碼,然后通過查表的方式得到掃描碼所對應的虛擬按鍵值。下表為掃描碼與虛擬碼的對應關系表:

         

        5列

        6列

        7列

        掃描碼

        虛擬碼

        物理按鍵

        掃描碼

        虛擬碼

        物理按鍵

        掃描碼

        虛擬碼

        物理按鍵

        1行

        0x04

        VK_A

        預留

        0x05

        VK_B

        0x06

        VK_C

        預留

        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對應的輸出為A、B、C、D 、E、F、G、H、I、J、K、1、2、3、4、5、6、7、8、9、0,但實際顯示的時候可以按照具體的要求進行定義,完成物理按鍵對應的輸出值,每個按鍵所實現的功能是由上層應用程序定義的,這里再不詳細敘述。

        8. KeyPadGpioConfigure函數

        此函數的功能是完成所對應GPIO口的配置,在具體函數的實現和開發中必須按照物理鍵盤的布局及芯片引腳占用情況進行相應的更改的。下面為KeyPadGpioConfigure函數的實現:

        XLLP_UINT32_T GpioDirOutList[]={3,107,108,96, }; //3個輸出端口引腳號

        XLLP_UINT32_T GpioDirInList[]={7,100,101,102,97,39,90,91}; //矩陣鍵盤7個輸出端口引腳號XLLP_UINT32_T GpioAltFnPinList[]={10,39,90,91,96,97,100,101,102,107,108};//矩陣鍵盤GPIO引腳 XLLP_UINT32_T GpioAltFnValList[]={10,1,1,1,3,1,1,1,1,2,2}; // GPIO對應的附加功能選擇

        if(v_pGPIOReg != 0) //判斷鍵盤GPIO寄存器是否已經被配置

        {

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

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

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

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

        }

        if(v_pKeyPadRegs != 0) //判斷鍵盤寄存器是否已經被配置

        {

        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 ) ; //設置矩陣鍵盤控制寄存器初值

        retval = XLLP_TRUE;

        }

        return(retval);

        9. 結束語

        本文作者創新點:完整地分析了Windows CE操作系統中7×3矩陣鍵盤的基本原理及其驅動程序模型,此設計是按照目前通用的手機鍵盤開發。并從實現方法的角度深入剖析了Windows CE中矩陣鍵盤掃描碼的獲取流程、將掃描碼映射到虛擬碼的方法,最后給出了矩陣鍵盤所對應GPIO口的配置方法,對于類似系統的矩陣鍵盤驅動開發具有重要的參考價值。

        參考文獻

        [1] 阿蘭特嵌入式實驗室.PXA27x處理器開發手冊,2005:825-826.

        [2] 楊翠娥,王麗敏,王景敏.實時系統VxWorks下設備驅動程序的編寫[J].微計算機信息2004年第一期

        [3] 傅曦.Windows CE 嵌入式開發入門——基于Xscale架構[M] 北京.人民郵電出版社,2006 :227-230.

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

        [5] Windows CE設備驅動程序開發指南:15-16.


        上一頁 1 2 3 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 葵青区| 新安县| 诏安县| 湖南省| 临颍县| 栾城县| 嫩江县| 怀化市| 瑞昌市| 崇左市| 仙桃市| 孝感市| 岱山县| 墨玉县| 眉山市| 灵山县| 常熟市| 河东区| 定安县| 综艺| 松溪县| 庆阳市| 周宁县| 梁河县| 蛟河市| 永安市| 茶陵县| 白玉县| 平利县| 东乡族自治县| 元氏县| 卢龙县| 武川县| 灵寿县| 襄垣县| 武清区| 庄浪县| 云安县| 定南县| 乌拉特后旗| 兴城市|