小键盘按键识别(微机原理课程设计)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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方式选择控制字
1 D6 D5 D4 D3 D
2 D1 D0
方式选择控制字标志A组方式:
00=方式0
01=方式1
1X=方式2
A口IO
1=输入
0=输出
C上半
口IO:
1=输入
0=输出
B组方式:
0=方式0
1=方式1
B口IO:
1=输入
0=输出
C下半口
IO:
1=输入
0=输出
4、源程序:
TITLE LITTLEKEYBOARD
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,10000010B
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,10010000B
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,10000010B
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