清华大学电子工程系:《微机原理》实验二小键盘按键识别

一.实验要求 本次实验的要求与前一实验类似但仅要求识别小键盘0~9数字键将小键盘键入的任意 长的0~9数字串,采用左移位动态显示的方法显示在数码管电路上当小键盘按下”R时 停止演示 实验电路图 数码管显示电路 AND2 三.程序框图 预置:A口为方式0输出 B口为方式0输入 0>PA7-----PA0 PB2----PB0 AH AH=7? 四.程序清单
1 一.实验要求: 本次实验的要求与前一实验类似,但仅要求识别小键盘0~9数字键,将小键盘键入的任意 长的 0~9 数字串,采用左移位动态显示的方法显示在数码管电路上,当小键盘按下”R”时 停止演示. 二.实验电路图: 三.程序框图: 四.程序清单: 预置:A 口为方式 0 输出 B 口为方式 0 输入 0 PA7-------PA0 PB2----PB0 AH AH=7?

TITLE LITTLEKEYBOARD MOV DX.A 8255 SSEG SEGMENT PARA STACK STACK' IN AL DX DB 256 DUP(O MOV HANG.AL SSEG ENDS CALL GETINPUT DSEG SEGMENT CMP AL.OAH A 8255 EQU 220H JE CMPAGAIN B 8255 EQU 221H CMP AL. OFFH CON 8255 EQU 223H JNE CONTINUE BUFFER DB 6 DUP(O) CALL CLOSEALL HANG DB MOV AH. 4CH LIE DB INT 21H NEWHANG CONTINUE NEWLIE DB CALL CHANGE LE MOV CX.O 3FH,06H, 5BH, 4FH,66H, 6DH, 7DH,07H, 7FH, LABLE 6FH CALL DISPLAY DSEG ENDS INC CX CSEG SEGMENT CMP CX. 256 ASSUME CS CSEG. DS: DSEG SS: SSEG JNE LABLE START PROC NEAR JMP CMPAGAIN MOV AX DSEG RET MOV DS.AX START ENDP CMPAGAIN CALL DISPLAY DELAY 1 PROC NEAR MOV DX. CON 8255 PUSHAX MOV AL,10000010B PUSH CX OUT DX.AL PUSH DX agaIN: MOV AH.86H CALL DISPLAY MOV CX. O MOV DX,A 8255 MODX.20000 MOV AL,O INT 15H OUT DX.AL POP DX MOV DX. B 8255 POP CX IN AL, DX POPAX CMP AL.00000111B RET JEAGAIN DELAY I ENDP CALL DELAY I MOV DX. CON 8255 GETINPUT PROC NEAR MOV AL,10010000B CMP LIE. 00000110B OUT DX.AL JE LIEO MOV DX. B 8255 CMP LIE. 00000101B MOV AL, LIE JE LIE OUT DX. AL CMP LIE,00000011B 2
2 TITLE LITTLEKEYBOARD SSEG SEGMENT PARA STACK 'STACK' DB 256 DUP (0) SSEG ENDS DSEG SEGMENT A_8255 EQU 220H B_8255 EQU 221H CON_8255 EQU 223H 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 CMPAGAIN: CALL DISPLAY MOV DX,CON_8255 MOV AL,10000010B OUT DX,AL AGAIN: CALL DISPLAY MOV DX,A_8255 MOV AL,0 OUT DX,AL MOV DX,B_8255 IN AL,DX CMP AL,00000111B JE AGAIN MOV LIE,AL CALL DELAY1 MOV DX,CON_8255 MOV AL,10010000B OUT DX,AL MOV DX,B_8255 MOV AL,LIE OUT DX,AL MOV DX,A_8255 IN AL,DX MOV HANG,AL CALL GETINPUT CMP AL,0AH JE CMPAGAIN CMP AL,0FFH JNE CONTINUE CALL CLOSEALL MOV AH,4CH INT 21H CONTINUE: CALL CHANGE MOV CX,0 LABLE: CALL DISPLAY INC CX CMP CX,256 JNE LABLE JMP CMPAGAIN RET START ENDP ;********************************* 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 PROC NEAR CMP LIE,00000110B JE LIE0 CMP LIE,00000101B JE LIE1 CMP LIE,00000011B

JE LIE2 RET MOV AL, OAH KEY4: MOV AL, 4 RET RET LIE2 CMP HANG. 00010000B KEY5: MOV AL, 5 JE NEXT RET MOV AL, OAH KEY6: MOV AL, 6 RET RET NEXT: MOV AL, OFFH KEY7: MOV AL, 7 RET RET LIEO: CMP HANG. 10000000B GETINPUT ENDP JE KEY CMP HANG. 01000000B CHANGE PROC NEAR JE KEY9 PUSHAX MOV AL, OAH PUSH SI RET MOV SIOFFSET BUFFER KEY8: MOV AL, 8 MOV AH,SI+1I RET MOV ISIL,AH KEY9: MOV AL. 9 MOV AH, [SI+2 RET MOV ISI+I,AH LIEl: CMP HANG. 10000000B MOV AH,[SI+3 JE KEYO MOV[SI+2,AH CMP HANG. 01000000B MOV AH,SI+4 JE KEYI MOV ISI+3L,AH CMP HANG. 00100000B MOⅤAH[SI+S JE KEY2 MOV [SI+4],AH CMP HANG O00 10000B MOV [SI+SL,AL JE KEY3 POP SI CMP HANG. 00001000B POP AX JE KEY4 RET CMP HANG. O0000100B CHANGE ENDP JE KEY5 CMP HANG. 00000010B JE KEY6 DISPLAY PROC NEAR CMP HANG. 00000001B PUSHAX JE KEY7 PUSH BX MOV AL, OAH PUSH CX PUSH DX KEYO: MOV AL O PUSH SI RET MOV BX OFFSET TABLE KEYI: MOV AL. MOV SIOFFSET BUFFER RET MOV CL. KEY2: MOV AL. 2 XUNHUAN: RET MOⅤAL[SI KEY3: MOV AL, 3 XLAT
3 JE LIE2 MOV AL,0AH RET LIE2:CMP HANG,00010000B JE NEXT MOV AL,0AH RET NEXT:MOV AL,0FFH RET LIE0:CMP HANG,10000000B JE KEY8 CMP HANG,01000000B JE KEY9 MOV AL,0AH RET KEY8:MOV AL,8 RET KEY9:MOV AL,9 RET LIE1:CMP HANG,10000000B JE KEY0 CMP HANG,01000000B JE KEY1 CMP HANG,00100000B JE KEY2 CMP HANG,00010000B JE KEY3 CMP HANG,00001000B JE KEY4 CMP HANG,00000100B JE KEY5 CMP HANG,00000010B JE KEY6 CMP HANG,00000001B JE KEY7 MOV AL,0AH RET KEY0:MOV AL,0 RET KEY1:MOV AL,1 RET KEY2:MOV AL,2 RET KEY3:MOV AL,3 RET KEY4:MOV AL,4 RET KEY5:MOV AL,5 RET KEY6:MOV AL,6 RET KEY7:MOV AL,7 RET GETINPUT ENDP CHANGE PROC NEAR PUSH AX PUSH SI MOV SI,OFFSET BUFFER MOV AH,[SI+1] MOV [SI],AH MOV AH,[SI+2] MOV [SI+1],AH MOV AH,[SI+3] MOV [SI+2],AH MOV AH,[SI+4] MOV [SI+3],AH MOV AH,[SI+5] MOV [SI+4],AH MOV [SI+5],AL POP SI POP AX RET CHANGE ENDP ;************************************ *************** DISPLAY PROC NEAR PUSH AX PUSH BX PUSH CX PUSH DX PUSH SI MOV BX,OFFSET TABLE MOV SI,OFFSET BUFFER MOV CL,1 XUNHUAN: MOV AL,[SI] XLAT

MOV DX.20lH CLOSEALL PROC NEAR OUT DX.AL PUSH AX MOV DX. 200H PUSH CX MOV AL. CL PUSH DX OUT DX.AL MOV CL. MOV DX. 200H XUNHUANI MOV AL,O MOV DX. 200H OUT DXAL MOV AL, CL INC SI OUT DXAL SHL CL, I MOV AL, O CMP CL, 40H OUT DX. AL JNE XUNHUAN SHL CL. POP SI CMP CL, 20H POP DX JNEⅩ UNHUANI POP CX POP DX POP BX POP CX POPAX POPAX RET RET DISPLAY ENDP CLOSEALL ENDP CSEG ENDS END START 五.实验分析: 我决的这次实验比较难,可能是因为前一个实验有以前的例子可以参照,而这次的实验 虽然硬件部分比较简单,但要想写好程序要费一番工夫好好的考虑一下,主程序没有什么 书上已经给了流程图,但关键在于识别程序和缓冲区里数据的处理和更新,以及左移式显示 的程序,是比较难的。 在识别程序中,我用了两个表来做, TABLEl放键值码,通过读入值与之相比较来识别 输入,然后 TABLE2放字型码,用ⅪLAT来查找转换为字型码已供输出:在显示部分,我 用一个6字的 BUFFER缓冲区来存放要输出的字型码,通过移位来做到做移式显示。 调试中一直以为硬件连线没什么大不了的,只是一味找程序的问题,却一直不出显示 后来才发现是连线的问提,程序中的端口地址是210~21F,我却连的是220~22F,当然不 出显示的,这是多么不应该的问题啊! 然后主要是延时的问题和显示的更新问题,我在最前面又加了一句显示才搞定,还有一 个就是判断键是否松开的方法,其实和判断是否有键按是一样的。 总之本实验难在程序方法上,调试并不是太困难。我感到做实验一定要仔细,想好的再 动手,要不然出错了都不知道在哪儿,很费时间的
4 MOV DX,201H OUT DX,AL MOV DX,200H MOV AL,CL OUT DX,AL MOV DX,200H MOV AL,0 OUT DX,AL INC SI SHL CL,1 CMP CL,40H JNE XUNHUAN POP SI POP DX POP CX POP BX POP AX RET DISPLAY ENDP ;********************************* CLOSEALL PROC NEAR PUSH AX PUSH CX PUSH DX MOV CL,1 XUNHUAN1: MOV DX,200H MOV AL,CL OUT DX,AL MOV AL,0 OUT DX,AL SHL CL,1 CMP CL,20H JNE XUNHUAN1 POP DX POP CX POP AX RET CLOSEALL ENDP CSEG ENDS END START 五.实验分析: 我决的这次实验比较难,可能是因为前一个实验有以前的例子可以参照,而这次的实验 虽然硬件部分比较简单,但要想写好程序要费一番工夫好好的考虑一下,主程序没有什么的, 书上已经给了流程图,但关键在于识别程序和缓冲区里数据的处理和更新,以及左移式显示 的程序,是比较难的。 在识别程序中,我用了两个表来做,TABLE1 放键值码,通过读入值与之相比较来识别 输入,然后 TABLE2 放字型码,用 XLAT 来查找转换为字型码已供输出;在显示部分,我 用一个 6 字的 BUFFER 缓冲区来存放要输出的字型码,通过移位来做到做移式显示。 调试中一直以为硬件连线没什么大不了的,只是一味找程序的问题,却一直不出显示, 后来才发现是连线的问提,程序中的端口地址是 210~21F,我却连的是 220~22F,当然不 出显示的,这是多么不应该的问题啊! 然后主要是延时的问题和显示的更新问题,我在最前面又加了一句显示才搞定,还有一 个就是判断键是否松开的方法,其实和判断是否有键按是一样的。 总之本实验难在程序方法上,调试并不是太困难。我感到做实验一定要仔细,想好的再 动手,要不然出错了都不知道在哪儿,很费时间的

5
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
- 清华大学电子工程系:《微机原理》实验三ADDA.doc
- 清华大学电子工程系:《微机原理》实验三 汇编语言程序设计(3).doc
- 清华大学电子工程系:《微机原理》实验一设计数码管电子表.doc
- 清华大学电子工程系:《微机原理》考试大纲.doc
- 清华大学电子工程系:《微机原理》MessageBox.doc
- 清华大学电子工程系:《微机原理》ISA-based data acquisition and control board.doc
- 《网络安全设计》 附录 D CHAP、 MS-CHAP和 MS-CHAP V2中的 身份验证.ppt
- 《网络安全设计》 附录C安全管理的运营框架设计.ppt
- 《网络安全设计》 附录B网络管理策略的设计.ppt
- 《网络安全设计》 附录A可接受使用策略的设计.ppt
- 《网络安全设计》 第十二章 设计安全事件应对措施.ppt
- 《网络安全设计》 第十一章 创建网络周边安全设计.ppt
- 《网络安全设计》 第十章 创建数据传输安全设计.ppt
- 《网络安全设计》 第九章 数据安全设计.ppt
- 《网络安全设计》 第八章 身份验证的安全设计.ppt
- 《网络安全设计》 第七章 创建账户安全设计.ppt
- 《网络安全设计》 第六章 创建计算机安全设计.ppt
- 《网络安全设计》 第五章 创建物理资源安全设计.ppt
- 《网络安全设计》 第四章 分析安全风险.ppt
- 《网络安全设计》 第三章 确定网络安全威胁.ppt
- 清华大学电子工程系:《微机原理》实验四 接口实验.doc
- 清华大学电子工程系:《微机原理》实验四DMA.doc
- 清华大学电子工程系:《微机原理》第一章 微型计算机系统概论.ppt
- 清华大学电子工程系:《微机原理》第二章 Pentium微处理器的体系结构 2.1 计算机体系结构的含义 2.2 Pentium微处理器的内部结构 2.3 实模式软件体系结构.ppt
- 清华大学电子工程系:《微机原理》第三章 Pentium微处理器的指令系统 3.1 概述 3.2 Pentium微处理器的寻址方式 3.3 数据传送指令 3.4 算术运算指令.ppt
- 清华大学电子工程系:《微机原理》第三章 Pentium微处理器的指令系统(3.5-3.10)第四章 汇编语言程序设计(4.1-4.4).ppt
- 清华大学电子工程系:《微机原理》第四章 汇编语言程序设计 4.5 保护模式下的汇编语言程序设计 4.6 Win32汇编语言程序设计 4.7 与高级语言的接口.ppt
- 清华大学电子工程系:《微机原理》第四章 Pentium微处理器的体系结构 2.4 保护模式软件体系结构 2.5 浮点部件软件体系结构.ppt
- 清华大学电子工程系:《微机原理》浮点运算指令及汇编语言程序设计.ppt
- 清华大学电子工程系:《微机原理》第五章 Pentium微处理器的硬件接口.ppt
- 清华大学电子工程系:《微机原理》第六章 存储器系统.ppt
- 清华大学电子工程系:《微机原理》第七章 输入输出接口 7.1概述 7.2CPU与外设数据传送的方式 7.3可编程计数器/定时器8253.ppt
- 清华大学电子工程系:《微机原理》第八章 中断与中断控制 8.1 中断的基本概念 8.2 可编程中断控制器8259 8.3 中断服务程序的编程 8.4 保护模式的中断处理.ppt
- 清华大学电子工程系:《微机原理》第七章 输入/输出接口 7.4串行通讯和串行接口 7.5 并行接口.ppt
- 清华大学电子工程系:《微机原理》第七章 输入/输出接口 7.6 DMA控制器8237 7.7 D/A和A/D转换技术.ppt
- 清华大学电子工程系:《微机原理》第八章 总线 8.1 概述 8.2 ISA总线 8.3 PCI总线.ppt
- 清华大学电子工程系:《微机原理》期中自测试题.doc
- 清华大学电子工程系:《微机原理》自测试题参考答案.doc
- 清华大学电子工程系:《微机原理》汇编程序设计实验报告一.doc
- 清华大学电子工程系:《微机原理》第一周作业参考.doc