综合实验 键盘扫描及显示设计实验
一、 实验目的
(1) 学习按键扫描的原理及电路接法。
(2) 掌握利用8255 完成按键扫描及显示。
二、 实验内容
连接8255 与键盘扫描单元,编写程序完成按键扫描功能,并将读到的按键
值依次显示在数码管上。
三、实验说明及步骤
实验系统中的键盘及数码管显示单元提供了4 行×4 列共16 个按键,6 位7
段数码管也接成扫描电路方式。共用段位控制信号A~Dp,各自独立的公共端X1~
X6,其中X1~X4 是与列扫描信号复用,行扫描信号为Y1~Y4。电路原理如图10-1
所示。
图10-1 键盘及数码管显示单元电路结构图
X1~X6 控制6 位数码管的公共端,其中X1~X4 连接到按键的一端,作为列选,
确定是哪一列的按键按下。Y1~Y4 连接到按键的另一端,作为行选,用于检测
哪一行的按键按下。结合行选和列选即可得出是哪一个按键按下。在软件设计上
要注意消除按键抖动的处理以及数码管显示的刷新。参考程序流程如图10-2 所
示,参考实验接线如图10-3 所示。
图10-2 键盘扫描及显示实验参考程序流程图
图10-3 键盘扫描及显示实验参考接线图
实验步骤如下。
(1) 确认从PC 机引出的两根扁平电缆已经连接在实验平台上。
(2) 运行Tdpit 集成操作软件,查看端口资源分配情况。记录与所使用片选信号
对应的I/O端口始地址。
(3) 利用查出的地址,参考图10-2 所示流程图编写程序,然后编译链接。
(4) 参考图10-3 所示连接实验线路。
(5) 运行程序,按动键盘矩阵上的按键,观察数码管显示是否正确。
六、思考题
(1)实验结果是什么?不修改连线图,如何能显示其他的结果(字符)?
(2) 你能修改实验参考连线图,得出不同的显示现象(顺序)吗?
;使用行扫描方式寻找按下键的编号(键号)的程序如下:
0FFF8H
0FFFAH
0FFFCH
0FFFEH
EQU
PORTA
EQU
PORTB
PORTC
EQU
PORTCN EQU
;代码段开始
CODE SEGMENT
ASSUME CS:CODE
START:
;初始化 8255
;方式 0,A 口、B 口、C 口低四位均为输出,C 口高四位输入
;保存键号
DX,PORTCN
AL,81H
DX,AL
MOV
MOV
OUT
MOV DL,16
MOV BX,OFFSET SSEGCODE ;要求用 BX 寄存器指向表的首地址
MOV AL,DL
XLAT
MOV DX,PORTA
OUT DX,AL
MOV AH,10000000B
MOV AL,AH
MOV DX,PORTB
OUT DX,AL
;取段选码
;送位选码
WAITK:
;判读是否有键按下
;写出 C 口内容 00H,即令所有行为低电平
;C 口低四位作行选择线
DX,PORTC
AL,00001111B
DX,AL
AL,DX
AL,0FH
AL,0FH
WAITK
MOV
MOV
OUT
IN
AND
CMP
JZ
MOV CX,0BFFFH ;延迟常数,可以修改来改变延时时间
;判断是否有列线为低电平
;无键按下继续等待
DELAY:
LOOP DELAY ;有,则延迟清除抖动,当 cx=0 时则停止该循环
MOV
MOV
MOV
;有键按下判断具体按键,BL 为键号,初始值=0
BL,0
BH,01111111B ;行扫描码
;扫描 4 行
CX,4
;行处理
FNDROW:
MOV
OUT
ROR
IN
AND
CMP
JNZ
AL,BH
DX,AL
BH,1
AL,DX
AL,0FH
AL,0FH
FNDCOL
;输出行扫描码
;保存下一行扫描码
;读取检测码
;取低四位
;检测码有一位,
;表示找到按键所在行了
ADD
BL,4
;检测码全 1,按键在后面行
;键号加 4,继续扫描下一行
LOOP
JMP
FNDROW
WAITK
;DONE
;列处理
FNDCOL:
ROR
AL,1
JNC LOOPDISP
INC BL
JMP FNDCOL
;找按键所在列
;JNC,CF 为 0 则转移
;检测码中的第一个零位,就是按键所在列。
;****************************************
DB
SSEGCODE
0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,98H,88H,83H,0C6H,0A1H,86H,8EH,0FFH
LOOPDISP:
BX,OFFSET SSEGCODE
;取段选码
ROL AH,1
MOV AL,BL
MOV
XLAT
DX,PORTA
MOV
OUT
DX,AL
MOV AL,AH
MOV
OUT
DX,PORTB
DX,AL
;送位选码
NOP
NOP
JMP WAITK
CODE ENDS
END START