键盘矩阵的按键识别方法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式,在矩阵键盘中每条水平线和垂直线在交叉处不直接相连,而是通过一个按键相连接,这样在由N条水平线和M条垂直线最多可以有N *M 个按键,大大的减少了对于芯片I/O的占用。
键盘矩阵的按键识别方法
图1 矩阵键盘的结构
方法一行扫描法
1、判断键盘中有无键按下将全部行线P1.4-P1.7置低电平,当然P1.0-P1.3为高电平(或许芯片内部已经将这些引脚它上拉),然后检测列线的状态。
只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相交叉的4个按键之中。
若所有列线均为高电平,则键盘中无键按下。
2、判断闭合键所在的位置在确认有键按下后,即可进入确定具体闭合键的过程。
其方法是:依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。
在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。
若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。
方法
二
先从P1口的高四位输出低电平,低四位输出高电平,从P1口的低四位读取键盘状态。
再从P1口的低四位输出低电平,高四位输出高电平,从P1口的高四位读取键盘状态。
将两次读取结果组合起来就可以得到当前按键的特征编码。
在I.MX27中keypad模块的实现
Keypad port 相关引脚说明:
在keypad模块中总共有16个引脚(8个行引脚 8个列引脚)
KP_COL[7:0] 其中[5:0] 作为键盘模块的列引脚如果未使用也可以做为通常的GPIO口使用
[7:6]两引脚复用可以作为键盘模块的列引脚 7脚还可以用做串口2的UART2_CTS 引脚
6脚还可以当做串口2 的UART2_TXD脚使用 6脚有时还做为芯片内部的测试引脚
KP_ROW[5:0] 其中[5:0] 作为键盘模块的行引脚如果未使用也可以做为通常的GPIO口使用
[7:6]两引脚复用可以作为键盘模块的行引脚 7脚还可以用做串口2的UART2_RTS 引脚
6脚还可以当做串口2 的UART2_RXD脚使用
keypad port 相关的寄存器
KPCR 键盘控制寄存器
当列引脚作为输出时有凉宫输出方式
1)Open-Drain Output (漏极开路输出)
2) Totem-Pole-Output(图腾柱式输出)
KPSR 键盘状态寄存器
作用用于控制键盘的状态设定键盘的中断方式等
kDDR 键盘数据流向寄存器
作用用于控制键盘引脚作为输出功能还是作为输入功能使用当相应位被置为0代表输入当相应位被置为1时代表输出
kPDR 键盘数据寄存器
作用用于输出或者读出相应行列引脚上的数据,当相应引脚被置为输入/输出模式该寄存器的响应为代表输入/输出的值
Keypad功能能模块的具体实现。