一 引言
键盘在单片机应用系统中,实现输入数据、传送命令的功能.是人工干预的主要手段,它的编制优劣直接影响系统的性能。键是一种常开型按钮开关,平时(常态)键的二个触点处于断开状态,按下键时它们才闭合(短路)。键盘分编码键盘和非编码键盘。
编码键盘: 由硬件逻辑电路完成必要的键识别工作与可靠性措施。每按一次键, 键盘自动提供被按键的读数, 同时产生一选通脉冲通知微处理器, 一般还具有反弹跳和同时按键保护功能。这种键盘易于使用, 但硬件比较复杂, 对于主机任务繁重之情况, 采用8279 可编程键盘管理接口芯片构成编码式键盘系统是很实用的方案。
非编码键盘:只简单地提供键盘的行列与矩阵, 其他操作如键的识别, 决定按键的读数等仅靠软件完成, 故硬件较为简单, 但占用CPU较多时间。有: 独立式按键结构、矩阵式按键结构。
二 键盘电路结构
(一) 独立式按键接口设计
独立式按键就是各按键相互独立, 每个按键单独占用一根I/O 口线, 每根I/O 口线的按键工作状态不会影响其他I/O 口 线上的工作状态。因此, 通过检测输入线的电平状态可以很容易判断哪个按键被按下了。
优点:电路配置灵活, 软件结构简单。
缺点:每个按键需占用一根I/O 口线, 在按键数量较多时,I/O 口浪费大, 电路结构显得复杂。
因此, 此键盘是用于按键较少或操作速度较高的场合。
(二) 矩阵式键盘接口设计
矩阵式键盘适用于按键数量较多的场合, 由行线和列线组成, 按键位于行列的交叉点上。节省I/O 口。
矩阵键盘工作原理: 行线通过上拉电阻接到+5V 上。无按键, 行线处于高电平状态, 有键按下, 行线电平状态将由与此行线相连的列线电平决定。列线电平为低, 则行线电平为低;列线电平为高, 则行线电平为高。
三 Proteus电路图设计
图1为本系统的Proteus仿真电路图,用MCS-51的P3.0- P3.3作为行线,P3.4-P3.7作为列线,用P2口控制数码管显示按键。
四 程序设计
本文采用扫描方式来判断按键并由MCU控制数码管显示按键。先从P3口的高四位输出低电平,低四位输出高电平,从P3口的低四位读取键盘状态。再从P3口的低四位输出低电平,高四位输出高电平,从P3口的高四位读取键盘状态。将两次读取结果组合起来就可以得到当前按键的特征编码。每个按键有它的行值和列值,行值和列值的组合就是识别这个按键的编码,计算公式为键值=行号×行数+列号。
点击图片查看大图
图1 Proteus电路图
点击图片查看大图
图2 键盘扫描流程图,汇编源程序如下:
LINE EQU30H
ROWEQU31H
VALEQU32H
ORG00H
START:MOVDPTR,#TABLE;段码表首地址
MOVP2,#00H;数码管显示初始化
LSCAN:MOVP3,#0F0H;列线置高电平,行线置高电平
L1:JNBP3.0,L2;逐行扫描
LCALLDELAY
JNBP3.0,L2
MOVLINE,#00H;存行号
LJMPRSCAN
L2:JNBP3.1,L3
LCALLDELAY
JNBP3.1,L3
MOVLINE,#01H;存行号
LJMPRSCAN
L3:JNBP3.2,L4
LCALLDELAY
JNBP3.2,L4
MOVLINE,#02H;存行号
LJMPRSCAN
L4:JNBP3.3,L1
LCALLDELAY
JNBP3.3,L1
MOVLINE,#03H;存行号
RSCAN:MOVP3,#0FH;行线列线电平互换
C1:JNBP3.4,C2;逐列扫描
MOVROW,#00H;存列号
LJMPCALCU
C2:JNBP3.5,C3
MOVROW,#01H;存列号
LJMPCALCU
C3:JNBP3.6,C4
MOVROW,#02H;存列号
LJMPCALCU
C4:JNBP3.7,C1
MOVROW,#03H;存列号
CALCU:MOVA,LINE;根据行号和列号计算键值
MOVB,#04H
MULAB
ADDA,ROW
MOVVAL,A;存键值
MOVCA,@A+DPTR;要据键值查段码
MOVP2,A;输出段码显示
LJMPLSCAN
DELAY:MOVR6,#20
D1:MOVR7,#250
DJNZR7,$
DJNZR6,D1
RET
TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H
DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H
END
五 总结
点击图片查看大图
图3 按键“6”显示效果
点击图片查看大图
图4 按键“E”显示效果
图3 与图4为按键“6”与按键“E”的按键效果,通过仿真结果可知,4×4键盘设计正确。键盘是单片机系统设计中一种主要的信息输入接口, 合理的设计, 不仅可以节省系统的设计成本, 更可使仪器设备的操作变得更为简单、方便, 很大程度上提高系统综合性能。