北邮微机原理与接口技术硬件实验报告内容摘要:

ACK39。 DB 100 DUP(0) STACK ENDS。 CODE SEGMENT ASSUME DS:DATA,CS:CODE,SS:STACK。 MAIN PROC FAR MOV AX,DATA MOV DS,AX MOV ES,AX MOV AL,80H MOV DX,0E803H。 SET PROT C OUT DX,AL LOP6:MOV BX,OFFSET MESG MOV CX,07H。 Control 6 states LOP5:MOV DX,0E8E0H。 Read in to decide speed of displaying IN AL,DX INC AL AND AL,07H XOR AH,AH MOV DX,AX。 DX is the outside loop times LOPZ:CALL DISP。 Display one state DEC DX JNZ LOPZ。 Display current state until DX is zero INC BX。 BX decide which state to display LOOP LOP5。 Redecide moving speed every state JMP LOP6。 Return to a new start when 6 states done MAIN ENDP。 DISP PROC NEAR 微机原理硬件 实验报告 第 12页 PUSH CX PUSH DX PUSH AX MOV BP,00AAH。 Control speed of display LOPX:XOR SI,SI MOV CX,06H。 Record every scan,6 digits once MOV DX,0E800H MOV AH,00000001B。 Display one digit one time LOP2:MOV AL,MESG[BX+SI] OUT DX,AL MOV AL,AH。 Control which char to display INC DX OUT DX,AL。 Control which LED on DEC DX ROL AH,1。 Next LED on INC SI CALL DELAY。 Every char need to delay CALL KEY。 Testing whether key is pressed LOOP LOP2。 Loop until all 6 digits are displayed DEC BP JNZ LOPX。 Outer loop ,control time of display POP AX POP DX POP CX RET DISP ENDP。 KEY PROC NEAR。 Testing key state PUSH AX MOV AH,0BH INT 21H OR AL,AL JZ GOON。 No key pressed MOV AH,4CH。 Has key pressed, then back to DOS INT 21H GOON:POP AX RET 微机原理硬件 实验报告 第 13页 KEY ENDP。 DELAY PROC。 Delay time PUSH AX PUSH CX MOV AX,000FH。 Outer loop is small LOPD: MOV CX,0H LOOP $。 Inner loop DEC AX JNZ LOPD POP CX POP AX RET DELAY ENDP。 CODE ENDS END MAIN 代码的具体分析如下: 代码直接使用了本实验中六位数码管静态显示部分的代码, 封装成为了DISP 子程序 ,便于调用。 DISP 子程序 即为反复扫描 显示静态字形的程序。 另外有 DELAY 作为延时子程序供 调用。 这样 主程序只要考虑 把每个状态 定义好,并以一定的时间间隔传递给 DISP显示即可。 主程序中 定义六种显示状态,分别对应 于 动态显示的六个 画面, 主程序中加入了拨码开关读取的代码, 这样读入速度信息, 依据速度信息置 循环次数 , 用以控制显示速度。 扩展: 数码管显示键盘输入 学号 在前面数码管显示程序的基础上, 本程序需要着重处理的是按键的检测,只要按键检测无误,将 按键值存储下来 , 调用封装好的显示 子 程序就 实现了按键显示的功能 ,按键值同时可以作为 控制信息 ,增加如删除输入的一个数字 、清除所有数字 、退出程序 等 控制 功能。 为了避免 按键抖动的影响, 程序设计中 使用按键释放检测的方法。 一次完整的按键过程是按键、保持、释放的完整流程。 按键值的检测采用查表的方式完成, 容易根据偏移量找到 按键对应的字符 显示 码 ,用以输出字符。 微机原理硬件 实验报告 第 14页 程序框图如下: 开始 初始化 8253 数码管显示数字 结束 NO YES 检测键盘输入 查找数字显示码 存储显示码 键盘按下。 键盘释放。 数字 OR控制。 NO YES 数字 控制信息处理(清除、退格) 控制 退出。 NO YES 微机原理硬件 实验报告 第 15页 程序源代码如下: DATA SEGMENT ID DB 6 DUP(0) ARRAY DB 11100111B,11101011B,11101101B,11101110B DB 11010111B,11011011B,11011101B,11011110B DB 10110111B,10111011B,10111101B,10111110B DB 01110111B,01111011B,01111101B,01111110B KEY DB 0EDH,21H,0F4H,0F1H,39H。 0~5 DB 0D9H,0DDH,61H,0FDH,0F9H。 6~9 DATA ENDS。 STACK SEGMENT STACK 39。 STACK39。 DB 100 DUP(0) STACK ENDS。 CODE SEGMENT ASSUME DS:DATA,CS:CODE,SS:STACK。 MAIN PROC FAR MOV AX,DATA MOV DS,AX MOV ES,AX MOV DX,0E823H MOV AL,16H OUT DX,AL CLEAR:XOR DX,DX。 Record how many digits has been stored MOV CX,6 MOV AL,0 XOR SI,SI LOPC: MOV ID[SI],AL。 Clear all ID value INC SI LOOP LOPC DELETE: CMP DX,0。 Do nothing if no digit JE NEXT DEC DX。 Digits number decrease one MOV AL,0 微机原理硬件 实验报告 第 16页 MOV SI,DX MOV ID[SI],AL NEXT: CALL DISP。 Display the digits CALL READ。 Read key state CMP AL,0FFH。 No Key pressed ? JE NEXT。 No key pressed。 Key pressed! CLD。 Set: DI + 1 MOV CX,16 MOV DI,OFFSET ARRAY REPNZ SCASB。 Search array to find key code CMP CX,0 JE NFD。 Usually this is not going to。 happen,except sth wrong MOV BX,OFFSET ARRAY SUB DI,BX DEC DI CMP DI,9。 Is the key 0~9? JBE ISNUM。 Key A and B not defined,。 reserve for future use. CMP DI,12 JE CLEAR。 Key C means clear all input digits CMP DI,13。 Key D means delete one digit JE DELETE CMP DI,14 JE EXIT。 Key E means Exit the program. JMP NEXT ISNUM:NOP AGN: CALL READ。 Key pressed! CMP AL,0FFH。 Has the key been released? JNE AGN。 No:wait until it is。 released。 Yes:begin to judge the key. MOV AL,KEY[DI] MOV SI,DX MOV ID[SI],AL。 Store the input number to memery. INC DX 微机原理硬件 实验报告 第 17页 CALL DISP CMP DX,7。 All display unit has been occupied JE CLEAR JMP NEXT NFD: NOP。 Unknown state,just terminate the program. EXIT:MOV AX,4C00H INT 21H MAIN ENDP。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。