微机原理与接口技术学习笔记 键 盘 接 口
编辑整理:浙江自考网 发表时间:2018-05-23 【大 中 小】
9.2.1 键盘的工作原理
键盘由一组排列成矩阵形式的按住开关组成,通常有编码键盘和非编码键盘两种类型。 编码键盘中的某一个键按下后。能够提供与该键相对应的编码信息。如果是ASCII(美国信息交换标准码)键盘,就能够提供与该键相对应的ASCII代码。编码键盘的缺点是硬件设备会随着键数的增加而增加。非编码键盘不直接提供按下键的编码信息,而是用较为简单的硬件和一套专用程序来识别按下键的位置,井提供与按下键相对应的中间代码,然后再把中间代码转换成要对应的编码。这样非编码键盘就为系统软件在定义键盘的某些操作上提供了更大的灵活性。
由于键盘通常排列成矩阵格式,因此可以用硬件或软件的方法对行、列分别进行扫描,去查找按动着的键。常用的方法有行反转法、行扫描法和行列扫描法等多种。
如果键盘是排成8行乘8列的64点阵,则可以把这两组8位的行列线分别连到两个并行接口双向传送的连接线。点阵上的键一旦被按动,该点行列的信号就可认为被接通。先对行送全1,再对列送全0。结果行线上凡有键按下的地方原来的1被列上送来的0所代替,记录下相对应的行寄存器的8位信息。反过来,把列送全1,再对行送全0,于是对应列上有键按下的线便变为0,再把列上的信息送到另一个寄存器并记录下来。把行列两次记录下的信息拼成1个16位的数据,就可以确定按下键的位置。如果16位数据中的0不止2个,则说明发生了重键,需重新再做一遍,直到正确的代码出现为止,这就是行列反转法,简称“行翻转法”。
行扫描法是用一个步进的信号加到列线组上,每步进一次,就读回行组上的状态,以检查有无键按动。如果向列扫描线上发送步进的1信号,行接收线在有按动的键时,就能从交点上获得1信号,否则为0。一旦行接收信号中只有一个1信号,就可以从8位列信号和8位行信号中确定出按下键的位置。同样,在一次列扫描结束后,若有两个以上的1出现在代码中,就是有重键产生。这时,要重新再做一遍,直到行列组成的代码中只有两个1时,才是应该读取的数据。
行列扫描法与行扫描法相似,它是先在列线上加人步进信号,依次检查哪一列有键按下,然后再在行线上加入步进信号,依次检查哪一行有键按下。根据行列线上的检查结果,就可以确定按键的位置。在IBM PC/XT中,对键盘就是采用这种扫描方法的。
9.2.2 非编码键盘与微处理器的接口
图9-1为非编码键盘和微处理器的接口电路。图中8255A端口A工作在方式0,用作输出口,端口B也工作在方式0、用作输入口。在按下一个键时,与它对应的行和列短接,形成了通路,通过查找闭合键所在的行和列的位置,程序就能决定被按下的键所代表的代码(称为“键号”,0~63)。
检测键盘输入过程如下:端口A送全“0”到8根行线上,CPU再从端口B读入8根列线上的信息。如果读入的信息为全“1”(高电平),则表示目前尚无键闭合;否则,表示现在已有按下的键。为进一步查找闭合键所在的行和列的编码,CPU在端口A的PA0引线上送出低电平信号,其余(PA7~PA1)引线上输出高电平信号。CPU再次通过B端口读入列线上的电平信号,并判断是否为全“1”。如果是全“l”,则表示在第0行上无键闭合;否则,表示闭合键在第0行上。再进一步找出读入的字节数据中“0”所在的位,即按下的键所在的列的位置。在第0行上无键闭合的情况下,则依次对行1,行2,…行7进行上述操作,找出被按下的键所在行和列的编号。由此,可以通过软件的办法,找到被按下的键所代表的编码。
使用行扫描方式寻找按下键的编号(键号)的程序如下:
…
…
PORTA EQU OFFF8H
PORTB EQU OFFFAH
PORTC EQU OFFFCH
PORTCN EQU OFFFEH
MOV DX,PORTCN ;置8255A端口 A、B工作在方式0
MOV AL,10000010B ;端口A为输出口,端口B为输入口
OUT DX,AL
WAITK:MOV DX,PORTA ;等待键闭合
MOV AL,0 ;行码送全“0”
OUT DX,AL
MOV DX,PORTB ;读列码
IN AL,DX
CMP AL,OFFH
JZ WAITK ;无键按下,继续等待
MOV BL,0 ;扫描键盘矩阵,送键号初值
MOV BH,11111ll0B ;置初始扫描模式——行码送FEH
MOV CX,8
FNDROW: MOV A1,BH ;送行码
MOV DX,PORTA
OUT DX,AL
ROL BH,1 ;修改行码
MOV DX,PORTB ;读列码
IN AL,DX
CMP AL,OFFH
JNZ FNDCOL ;有键按下,查列号
ADD BL,8 ;无键按下,指向下一行键号初值
LOOP FNDROW ;8行扫描未完,送下一行扫描码
JMP DONE ;8行扫描完,无键按下
FNDCOL: ROR AL,1 ;查哪一列有键按下
JNC RIGHT ;查到按下键的键号
INC BL ;键号加 1,查下一列
JMP FNDCOL
RIGHT: : ;按下键的编号在BL中
:
DONE: : ;无键闭合
浙江自考网声明:
1、由于各方面情况的调整与变化,本网提供的考试信息仅供参考,考试信息以省考试院及院校官方发布的信息为准。
2、本网信息来源为其他媒体的稿件转载,免费转载出于非商业性学习目的,版权归原作者所有,如有内容与版权问题等请与本站联系。