微机原理键盘扫描及显示设计实验

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、 实验名称:

键盘扫描及显示设计实验 二、 实验目的

1. 学习按键扫描的原理及电路接法; 2 .掌握利用8255完成按键扫描及显示。

三、 实验内容及步骤

1.实验内容

编写程序完成按键扫描功能,并将读到的按键值依次显示在数码管上。实验机的按 键及显示模块电路如图 1所示。按图2连线。

Γ≡≡

If *

—I

〔01S

P

π图1键盘及显示电路

2. 实验步骤 (1) 按图1接线;

(2) 键入:CheCk 命令,记录分配的I/O 空间; (3) 利用查出的地址编写程序,然后编译链接; (4) 运行程序,观察数码管显示是否正确。

四、流程图

22LZj

XD2汽

XDrX

XDir d √

I I

WirI ⅝IOR A .■

[QYO Λ :

07 PBfl D⅛ PBl

* C4

PB3

PBl •皿 PBi 71 PB6 DO E55

PB7

FA.Q Al

PAJ

AO 吨

!

PA5 I WR PCo 7 RD PCI ∙÷ CS PΩ I PCI

图2实验连线

>Cχ

⅛ 7

H *J J XXXX

t- ⅛r√ *JJ <⅛i YYYY

开始

五、源程序

KeySCa n. asm

;键盘扫描及数码管显示实验 根据CHECKE 置信息修改下列符号值 *******************

的A 口地址

的B 口地址 的C 口地址 的控制寄存器地址

STACKI SEGMENT STACK

DW 256 DUP(?) STACKI ENDS DATA SEGMENT DTABLE

3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H DATA ENDS ; 键值表,0〜F 对应的7段数码管的段位值

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

START: MOV AX,DATA

MOV DS,AX MOV SI,3000H ; 建立缓冲区,存放要显示的键值 MOV AL,00H ;

先初始化键值为 0

MOV [SI],AL MOV [SI+1],AL MOV [SI+2],AL MOV [SI+3],AL MOV DI,3003H

初始化8255工作方式

方式0, A 口、B 口输出,C 口低4位输入・ *************** IoYo EQU 9800H 片选IOYO 对应的端口始地址 MY8255_ _A EQU IOY0+00H*4 ;8255 MY8255

_

_B EQU IOY0+01H*4 ;8255

MY8255_

_C EQU IOY0+02H*4 ;8255 DB

MOV DX,MY8255_MODE MOV AL,81H

;

・***************************************************************** MY8255_MODE EQU IOY0+03H*4 ;8255

OUT DX,AL BEGIN:

CALL DIS ; CALL CLEAR ; CALL CCSCAN ; 显示刷新清屏扫描按键

JNZ GETKEY1 ; 有键按下则跳置GETKEY1

MOV AH,1 ; INT 16H

JZ BEGIN ; QUIT: 判断PC键盘是否有按键按下

无按键则跳回继续循环,有则退出

MOV AX,4C00H ;

INT 21H

返回到DOS

GETKEY1:

CALL DIS ;

CALL DALLY

CALL DALLY

CALL CCSCAN ;

JNZ GETKEY2 ; JMP

BEGIN ; 显示刷新

再次扫描按键有键按下则跳置GETKEY2 否则跳回开始继续循环

GETKEY2:

MOV CH,0FEH

MOV CL,00H ;

COLUM:

设置当前检测的是第几列

MOV AL,CH ; MOV DX,MY8255_A

OUT DX,AL

MOV DX,MY8255_C ;

IN AL,DX 选取一列,将X1〜X4中一个置O

读Y1〜Y4,用于判断是哪一行按键闭合

L1:TEST AL,O1H ; JNZ L2 ; MOV AL,OOH ;

JMP KCODE 是否为第1 行

不是则继续判断

设置第1 行第1 列的对应的键值

L2:TEST AL,O2H ; JNZ L3 ; 是否为第2 行不是则继续判断

MOV AL,04H

JMP KCODE

L3:TEST AL,04H JNZ L4

MOV AL,08H

JMP KCODE

L4:TEST AL,08H JNZ NEXT

MOV AL,0CH

KCODE:

ADD AL,CL

CALL PUTBUF

PUSH AX KON:CALL DIS

CALL CLEAR

CALL CCSCAN

JNZ KON POP

AX

NEXT:

INC CL MOV

AL,CH TEST

AL,08H JZ

KERR

ROL AL,1 MOV

CH,AL JMP

COLUM KERR:

JMP BEGIN 设置第2 行第1 列的对应的键值

是否为第3 行

不是则继续判断

设置第3 行第1 列的对应的键值

是否为第4 行

不是则继续判断

设置第4 行第1 列的对应的键值

将第1 列的值加上当前列数,确定按键值保存按键值

显示刷新

清屏扫描按键,判断按键是否弹

起未弹起则继续循环等待弹起

当前检测的列数递增

检测是否扫描到第4 列

是则跳回到开始处

没检测到第4 列则准备检测下一列

CCSCAN PROC NEAR MOV AL,00H

MOV DX,MY8255_A

OUT DX,AL 扫描是否有按键闭合子程序将4列全选通,X1〜X4置O

相关文档
最新文档