键盘按键与数码管显示
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验五键盘按键与数码管显示学生预习
实验目的:
熟悉星研集成开发环境,掌握微机接口程序编写调试的基本方法。
掌握矩阵式键盘的工作原理及识别键盘按键的方法。
掌握8段数码管显示数字或字符的工作原理和它的使用方法。
掌握用8255扫描键盘及用8255刷新数码管显示的方法。
实验要求:
在(2行*8列)小键盘上任意按下某个按键,该键的键值将同时显示在8个数码管上。按键松开时显示上一次的按键值。
实验器材:
电脑一台,微机原理与接口实验箱一台,连接导线若干。
实验原理:
8255控制键盘和数码管工作的相关原理图:
CS:片选信号,低电平有效; A0、A1:地址信号。
JP24:PC口(键盘行); JP20:PB口(键盘列);
JP23:PA口; JP16: 数码管段码
JP17: 数码管位选
(2行*8列)小键盘:
实验箱上2行*8列小键盘上当某个按键被按下时,该键所在行的行线值为0、所在列的列线值也为0。根据这个特点结合上述原理图采用“列扫描法”可以识别出当前被按下的按键。
8个数码管:
实验箱上8个8段数码管。每个数码管有8个笔段,按逆时针方向依次称为a段--dp 段,8个段接收来自外部的一个8位二进制数(D7—D0),并且笔段a 对应数据位D0……..笔段dp 对应数据位D7 ,数码管共阳,段码端接收低电平相应的笔段点亮,段码端接收的数据决定了数码管显示的具体内容。
数码管的位码控制GND端,当它接收低电平时该数码管会被选中有效工作:即这时只要段码端有有效的数据数码管就会显示数据。
8255各端口的分工:
8255的A口工作在方式0输出状态控制数码管的段码;B端口工作在方式0输出状态控制数码管的位码,并且同时控制键盘列线的扫描;C端口工作在方式0输入状态,其中的PC0、PC1控制键盘的第一、第二行行值的读入。
硬件连线:
8255:D3区:8255片选CS、A0、A1 连接A3区:系统CS1、A0 、A1;
D3区:PC0、PC1 连接F5区:KL1、KL2 (控制键盘2行);
D3区:JP20(PB0-PB7)、(A口)B=JP16(SEGA-SEGP)、(B口)C=JP17(DIG0-DIG7) 连接F5区:A=JP37(1-8)(键盘列线)、B(JP36)(段码)、C(JP35)(位码)
程序编制流程图:程序编制的流程图请参考实验指导书P12
开发环境:阅读“星研集成开发环境的使用”文档,了解接口程序开发调试的一般流程。
要求做好实验预习,明确实验目的和要求,理解实验原理,编写好可调试程序。
.MODEL TINY
.DATA
SEGTAB DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,0H,0C6H,40H,86H,8EH;LED灯编码KEYCODE DW 0FE02H,0FD02H,0FB02H,0F702H,0EF02H,0DF02H,0BF02H,7F02H,0FE01H,0FD01H,0FB01H,0F 701H,0EF01H,0DF01H,0BF01H,7F01H;键盘列行码
A EQU 270H;8255各控制端口地址
B EQU 271H
C EQU 272H
CON EQU 273H
COUNT DW 1;延时程序参数
.STACK 100
.CODE
START:
MOV AX,@DATA
MOV DS,AX
MOV DX,CON;设置8255工作方式A,B端输出,PC0,PC1输入,方式0
MOV AL,81H
OUT DX,AL
WAITE: CALL SCANKEY;扫描件键盘子程序
CMP AX,-1
JZ WAITE
CALL TRANSLATE;列行码转化为LED灯编码子程序
CALL LED_DISP;LED显示程序
JMP WAITE
MOV AX,4C00H
INT 21H
SCANKEY PROC
PUSH CX
PUSH DX
MOV DX,B
;MOV AL,0FH 经过测试去掉此步骤,在其它实验设备上可以完整显示
;OUT DX,AL 硬件设备有错,这两句用以在错误的硬件电路上完整的显示结果MOV AL,0
OUT DX,AL;列输出全“0”
MOV DX,C
IN AL,DX;读取行端口
AND AL,03H
CMP AL,3H;检测列信息是否全“1”,判断有无按键
JZ NO_KEY;无按键时,转移后返回“-1”
;延时20ms
CALL DELAY
IN AL,DX;读取行端口
AND AL,03H
CMP AL,3H;检测列信息是否全“1”,判断有无按键JZ NO_KEY;无按键时,转移后返回“-1”
MOV AH,0FEH
MOV CX,8
NEXT: MOV AL,AH
ROL AH,1
MOV DX,B
OUT DX,AL
MOV DX,C
IN AL,DX;读取行码
AND AL,03H
CMP AL,3H
LOOPZ NEXT
JZ NO_KEY;没有按键,转以后返回“-1”
ROR AH,1;AX存放形成的列行码
JMP EXIT
NO_KEY:
MOV AX,-1
EXIT: POP DX
POP CX
RET
SCANKEY ENDP
TRANSLATE PROC
PUSH CX
PUSH SI
PUSH DI
MOV CX,16
LEA SI,SEGTAB-1
LEA DI,KEYCODE-2
SCANTAB:INC SI
INC DI
INC DI
CMP AX,[DI]
LOOPNZ SCANTAB
JNZ QUIT
MOV DL,[SI];得到要显示的段码
QUIT: POP DI
POP SI
POP CX