键盘按键与数码管显示

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档