新闻中心

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 下一页

评论


相关推荐

技术专区

关闭