·列输出能被驱动成全低、全高或者全高阻,允许8x8键矩阵的任意组和按键;
·Port A8位或的结果驱动一个键盘中断;
·键盘中断能够唤醒系统。
3.2键盘电路原理图
实现的系统硬件构成为4×4的行列式键盘,键盘的连接电路如图13-4所示。行线通过一个电阻被上拉到VCC,VCC是+5V电压。行线与按键的一个引脚相连,列线与按键的另一个引脚相连。平时列线被置成低电平,没有按键被按下时,行线保持高电平:而有按键被按下时,行线被拉成低电平,这时候控制器知道有按键被按下,但只能判断出在哪一行,不能判断出在哪一列,因此接下来就要进行键盘扫描,以确定具体是哪个按键被按下。
键盘扫描的过程是将列线逐列置成低电平,然后读取行线状态,直到行线中出现低电平,这时可知哪一列是低电平;然后将行线与列线的状态装入键码寄存器,进行按键译码,得到按下的按键的相应编码,这样就完成了按键扫描过程。当然,一个完整的按键扫描过程还需要配合相应的键盘去抖动手段才能正确地识别按键,不会发生重键和错误判断等情况。
对于使用者来说,利用此电路可以作为底层嵌入式的键盘控制器,即实现对键盘的扫描,识别出键码。控制器与ARM的通信协议可以采用串口、并行、PS2、USB等。
4软件设计
4.1键盘扫描程序
键盘扫描程序的实现是首先给两个(矩阵中的2)口线上送高电平,然后在一个循环体内依次在端口PO(矩阵中的8)经锁存器送一个只有一位为O其余为1的电平(即十六进制数0xFE循环左移一位实现),判断移位的次数和两个口线中的哪个为低电平亦即逻辑O来实现。下面通过具体程序来说明。
当然这只是最基本的键盘扫描子程序,当扫捕到键号以后还要根据其他一些具体条件来进行相应的译码,才能决定最后按下的键代表什么具体值。键值有功能键、数字键和字母键,每种键值都有不同的译码处理。键盘扫描子程序是与硬件结构相对应的,因此考虑到端口资源的充分利用,改用4×4的矩阵键盘结构可以节省两个IO端口,但是键盘扫描程序要稍微复杂一些;但由于ARM其运
行速度远远超过传统的微处理器,这一点带来的影响可以忽略不计。下面是改进后的键盘扫描子程序。
相关推荐: