小键盘按键识别

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

微机原理与接口技术课程设计报告

专业:

班级:

姓名:

学号:

小键盘按键识别

一.课题任务与要求

实验箱上有一个24键小键盘,出厂时按键接点已经按图所示连接。小键盘有8根横向引出线。实验前将8根横向引出线与PA0~PA7相连,3根纵向引出线与PB0~PB2相连,再从“I/O口地址译码器”选择一个译码器输出连接到8255的片选端,做好上述连接之后,就构成了以8255为核心的键盘输入电路要求:

在实际的自动控制系统中,键盘输入电路的作用是输入数据(0~9,A~F)或者输入控制信号(G,M,P,R,W,X,Y,S)。实现上述功能的核心程序是“按键识别”。

本实验要求设计按键识别程序,当按下小键盘上某一个键的时候,主机屏幕显示闭合键的键名,按下小键盘“R”键之后停止演示。

二.完成任务的方法或方案简介

本程序显示数字0到9,刚刚开始提出两中解决方案一是用跳转法直接显示数值,二是用查找法间接显示数值,本程序是用第一种方案,虽然程序多了些,但直观容易理解,故采纳第一种方案。

DISPLAY函数用来将BUFFER中的键值显示在数码管上。

设定A口方式0输出,B口方式0输入。

GETINPUT函数通过行值和列值查出输入的键值,并将它保存在AL中,如果输入是R,则AL赋值为FFH;如果输入非法字符,则AL赋值为0AH。

设定如果是R则退出程序.

CHANGE函数用来改变BUFFER中保存的键值,将BUFFER中的键值移位,最后一位加入AL中的新键值。

CLOSEALL此函数用在退出程序时将数码管关闭.

以上是主题函数,在设计过程中还碰到了一些细节问题,例数码管的显示才用延迟20MS的办法解决,具体方案在DISPLAY函数中。

三.实现系统1、程序框图:

2、实验电路图:

3、8255方式选择控制字

SSEG SEGMENT PARA STACK 'STACK'

DB 256 DUP (0)

SSEG ENDS

DSEG SEGMENT

A_8255 EQU 210H

B_8255 EQU 211H

CON_8255 EQU 213H

BUFFER DB 6 DUP(0)

HANG DB

LIE DB

NEWHANG DB

NEWLIE DB

TABLE DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH, DSEG ENDS

CSEG SEGMENT

ASSUME CS:CSEG, DS:DSEG,SS:SSEG

START PROC NEAR

MOV AX,DSEG

MOV DS,AX

CALL CLOSEALL

(关掉数码管,防止因为最初数码管有显示而使程序执行不正常。)

CMPAGAIN:

CALL DISPLAY

(DISPLAY函数用来将BUFFER中的键值显示在数码管上。)

MOV DX,CON_8255

MOV AL,B

OUT DX,AL

(设定A口方式0输出,B口方式0输入)

AGAIN:

CALL DISPLAY

MOV DX,A_8255

MOV AL,0

OUT DX,AL (0->PA7---PA0)

MOV DX,B_8255

IN AL,DX

AND AL,00000111B (取出PB0-PB2

CMP AL,00000111B

JE AGAIN

MOV LIE,AL(将列值保存)

CALL DELAY1(延时20ms)

MOV DX,CON_8255

MOV AL,B

OUT DX,AL

(预置A口方式0输入,B口方式0输入)

MOV DX,A_8255

IN AL,DX

MOV HANG,AL(将行值保存)

CALL GETINPUT

(GETINPUT函数通过行值和列值查出输入的键值,并将它保存在AL中,如果输入是R,则

AL赋值为FFH;如果输入非法字符,则AL赋值为0AH。)

CMP AL,0AH

JE CMPAGAIN

(如果是非法字符则跳回)

CMP AL,0FFH

JNE CONTINUE

(如果是R则退出程序.)

CALL CLOSEALL

MOV AH,4CH

INT 21H

CONTINUE:

CALL CHANGE

(CHANGE函数用来改变BUFFER中保存的键值)

MOV DX,CON_8255

MOV AL,B

OUT DX,AL

(设定A口方式0输出,B口方式0输入)

LLL:

CALL DISPLAY

MOV DX,B_8255

IN AL,DX

AND AL,00000111B

(取出PB0-PB2)

CMP AL,00000111B

JNE LLL

JMP CMPAGAIN

(不断扫描,如果不松开按键,那么就循环等待;直到按键松开就跳回。) RET

START ENDP

;*********************************

(此函数用以延时20MS)

DELAY1 PROC NEAR

PUSH AX

PUSH CX

PUSH DX

MOV AH,86H

MOV CX,0

MOV DX,20000

INT 15H

POP DX

POP CX

POP AX

RET

DELAY1 ENDP

;********************************

(GETINPUT函数通过行值和列值查出输入的键值,并将它保存在AL中,如果输入是R,则AL赋值为FFH;如果输入非法字符,则AL赋值为0AH。)

GETINPUT PROC NEAR

CMP LIE,00000110B

JE LIE0

CMP LIE,00000101B

JE LIE1

CMP LIE,00000011B

JE LIE2

MOV AL,0AH

RET

LIE2:CMP HANG,00010000B

JE NEXT

MOV AL,0AH

RET

相关文档
最新文档