键盘按键与数码管显示
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验五 键盘按键与数码管显示 学生预习
实验目的: 熟悉星研集成开发环境,掌握微机接口程序编写调试的基本方法。 掌握矩阵式键盘的工作原理及识别键盘按键的方法。 掌握 8 段数码管显示数字或字符的工作原理和它的使用方法。 掌握用 8255 扫描键盘及用 8255 刷新数码管显示的方法。
实验要求: 在(2 行*8 列)小键盘上任意按下某个按键,该键的键值将同时显示在 8 个数码管上。
按键松开时显示上一次的按键值。 实验器材:
电脑一台,微机原理与接口实验箱一台,连接导线若干。 实验原理:
8255 控制键盘和数码管工作的相关原理图:
精品文档交流
CS: 片选信号,低电平有效; JP24: PC 口(键盘行); JP23: PA 口; JP17: 数码管位选
A0、A1: 地址信号。
JP20: PB 口(键盘列);
JP16:
数码管段码
A C F B7 3 2 E6 A D 5 91 C8 4 0 B D
精品文档交流
A: 按键的列线(PB 口控制) C: 数码管位码(PB 口控制)
B: 数码管段码(PA 口控制) D: 按键的行线(PC0、PC1 控制)
(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,0
FB01H,0F701H,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
精品文档交流