小键盘按键识别微机原理课程设计Word格式文档下载.docx
- 文档编号:15871270
- 上传时间:2022-11-16
- 格式:DOCX
- 页数:13
- 大小:95.50KB
小键盘按键识别微机原理课程设计Word格式文档下载.docx
《小键盘按键识别微机原理课程设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《小键盘按键识别微机原理课程设计Word格式文档下载.docx(13页珍藏版)》请在冰豆网上搜索。
本程序显示数字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
D2
D1
D0
4、源程序:
TITLELITTLEKEYBOARD
SSEGSEGMENTPARASTACK'
STACK'
DB256DUP(0)
SSEGENDS
DSEGSEGMENT
A_8255EQU210H
B_8255EQU211H
CON_8255EQU213H
BUFFERDB6DUP(0)
HANGDB?
LIEDB?
NEWHANGDB?
NEWLIEDB?
TABLEDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,
DSEGENDS
CSEGSEGMENT
ASSUMECS:
CSEG,DS:
DSEG,SS:
SSEG
STARTPROCNEAR
MOVAX,DSEG
MOVDS,AX
CALLCLOSEALL
(关掉数码管,防止因为最初数码管有显示而使程序执行不正常。
)
CMPAGAIN:
CALLDISPLAY
(DISPLAY函数用来将BUFFER中的键值显示在数码管上。
MOVDX,CON_8255
MOVAL,10000010B
OUTDX,AL
(设定A口方式0输出,B口方式0输入)
AGAIN:
MOVDX,A_8255
MOVAL,0
OUTDX,AL(0->
PA7---PA0)
MOVDX,B_8255
INAL,DX
ANDAL,00000111B(取出PB0-PB2
CMPAL,00000111B
JEAGAIN
MOVLIE,AL(将列值保存)
CALLDELAY1(延时20ms)
MOVDX,CON_8255
MOVAL,10010000B
(预置A口方式0输入,B口方式0输入)
MOVHANG,AL(将行值保存)
CALLGETINPUT
(GETINPUT函数通过行值和列值查出输入的键值,并将它保存在AL中,如果输入是R,则AL赋值为FFH;
CMPAL,0AH
JECMPAGAIN
(如果是非法字符则跳回)
CMPAL,0FFH
JNECONTINUE
(如果是R则退出程序.)
CALLCLOSEALL
MOVAH,4CH
INT21H
CONTINUE:
CALLCHANGE
(CHANGE函数用来改变BUFFER中保存的键值)
LLL:
CALLDISPLAY
MOVDX,B_8255
INAL,DX
ANDAL,00000111B
(取出PB0-PB2)
JNELLL
JMPCMPAGAIN
(不断扫描,如果不松开按键,那么就循环等待;
直到按键松开就跳回。
RET
STARTENDP
;
*********************************
(此函数用以延时20MS)
DELAY1PROCNEAR
PUSHAX
PUSHCX
PUSHDX
MOVAH,86H
MOVCX,0
MOVDX,20000
INT15H
POPDX
POPCX
POPAX
RET
DELAY1ENDP
********************************
GETINPUTPROCNEAR
CMPLIE,00000110B
JELIE0
CMPLIE,00000101B
JELIE1
CMPLIE,00000011B
JELIE2
MOVAL,0AH
LIE2:
CMPHANG,00010000B
JENEXT
NEXT:
MOVAL,0FFH
LIE0:
CMPHANG,01111111B
JEKEY8
CMPHANG,10111111B
JEKEY9
KEY8:
MOVAL,8
KEY9:
MOVAL,9
LIE1:
JEKEY0
JEKEY1
CMPHANG,11011111B
JEKEY2
CMPHANG,11101111B
JEKEY3
CMPHANG,11110111B
JEKEY4
CMPHANG,11111011B
JEKEY5
CMPHANG,11111101B
JEKEY6
CMPHANG,11111110B
JEKEY7
KEY0:
MOVAL,0
KEY1:
MOVAL,1
KEY2:
MOVAL,2
KEY3:
MOVAL,3
KEY4:
MOVAL,4
KEY5:
MOVAL,5
KEY6:
MOVAL,6
KEY7:
MOVAL,7
GETINPUTENDP
**********************************
(CHANGE函数用来改变BUFFER中保存的键值,将BUFFER中的键值移位,最后一位加入AL中的新键值。
CHANGEPROCNEAR
PUSHSI
MOVSI,OFFSETBUFFER
MOVAH,[SI+1]
MOV[SI],AH
MOVAH,[SI+2]
MOV[SI+1],AH
MOVAH,[SI+3]
MOV[SI+2],AH
MOVAH,[SI+4]
MOV[SI+3],AH
MOVAH,[SI+5]
MOV[SI+4],AH
MOV[SI+5],AL
POPSI
CHANGEENDP
DISPLAYPROCNEAR
PUSHBX
MOVBX,OFFSETTABLE
MOVCL,1
XUNHUAN:
MOVAL,[SI]
XLAT
MOVDX,201H
OUTDX,AL
MOVDX,200H
MOVAL,CL
INCSI
SHLCL,1
CMPCL,40H
JNEXUNHUAN
POPBX
DISPLAYENDP
(此函数用在退出程序时将数码管关闭.)
CLOSEALLPROCNEAR
XUNHUAN1:
CMPCL,20H
JNEXUNHUAN1
CLOSEALLENDP
CSEGEND
ENDSTART
四、程序运行结果分析:
六.实验总结:
1.实验电路板上8255的端口地址位210H-213H,这与书上给的不一样,开始时在这方面花费了较多时间。
2.通过此次程序设计,我对计算机读取键盘值的过程有了一定的认识。
最开始编程序时并没有想到如果始终按同一个键不放,数码管上就会一下子出来很多字符。
调试时发现了这个问题,想到的解决方法有两种,一种是每一次按键后检测键是否松开,直到松开后再继续执行下一次判断;
另一种是按键后延缓一个固定的时间(大约0.2秒)再判断(计算机的键盘就是采取这样的方法)。
本程序采用的是第一种方法。
3.编程序要养成好的习惯,我最初的程序结束时并没有关掉数码管,以致下次用时数码管显示不正确。
好的程序应该各方面想得周到一些,例如我后来在开始和结束时都加了关闭数码管程序(CLOSEALL),这就避免了上述问题。
4.我并没有采用查表得方法来获得键值,我觉得用跳转的方法能使程序的可读性强一些。
当然,程序代码会长许多,但此法由于思路清楚,比较容易查错。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 小键盘 按键 识别 微机 原理 课程设计