微机原理课程设计——读取开关值显示在8X8点阵模块上
流程图
代码
1 ;8255A读取开关值,8255B连接8X8点阵 2 ;8X8点阵地址 3 PROTH EQU 0290H 4 PROTLR EQU 0298H 5 PROTLY EQU 02A0H 6 ;8255地址 7 A_8255 EQU 0288H 8 B_8255 EQU 0289H 9 CON_8255 EQU 028BH 10 ;----------------------------------------------------------- 11 ;数据段 12 DATA SEGMENT 13 DATA0 DB 000H,07EH,0A1H,091H,089H,085H,07EH,000H 14 DATA1 DB 000H,000H,001H,0FFH,041H,000H,000H,000H 15 DATA2 DB 000H,061H,091H,089H,085H,083H,061H,000H 16 DATA3 DB 000H,066H,0A9H,091H,081H,081H,042H,000H 17 DATA4 DB 000H,005H,0FFH,045H,024H,014H,00CH,000H 18 DATA5 DB 000H,08EH,091H,091H,091H,091H,0F2H,000H 19 DATA6 DB 000H,04EH,091H,091H,091H,091H,07EH,000H 20 DATA7 DB 000H,0C0H,0A0H,098H,087H,080H,0C0H,000H 21 DATA8 DB 000H,06EH,091H,091H,091H,091H,06EH,000H 22 DATA9 DB 000H,07EH,089H,089H,089H,089H,072H,000H 23 DATAA DB 000H,03FH,048H,088H,088H,048H,03FH,000H 24 DATAB DB 000H,06EH,091H,091H,091H,091H,0FFH,000H 25 DATAC DB 000H,042H,081H,081H,081H,081H,07EH,000H 26 DATAD DB 000H,03CH,042H,081H,081H,081H,0FFH,000H 27 DATAE DB 000H,091H,091H,091H,091H,091H,0FFH,000H 28 DATAF DB 000H,090H,090H,090H,090H,090H,0FFH,000H 29 MESS DB 'STRIKE ANY KEY,RETURN TO DOS!',0AH,0DH,'$' 30 ;扫描过程 31 ORDER DB 00H,01H,02H,03H,04H,05H,06H,07H 32 BUFF DB 8 DUP (0) 33 DATA ENDS 34 ;----------------------------------------------------------- 35 ;定义堆栈段 36 STACK SEGMENT 37 STA DB 100 DUP (?) 38 TOP EQU LENGTH STA 39 STACK ENDS 40 ;----------------------------------------------------------- 41 CODE SEGMENT 42 ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA 43 ;------------------------------------------------------------ 44 START: MOV AX,DATA 45 MOV DS,AX 46 MOV ES,AX 47 MOV AX,STACK 48 MOV SS,AX 49 MOV SP,TOP 50 51 MOV DX,OFFSET MESS 52 MOV AH,09 53 INT 21H ;显示提示信息 54 ;------------------------------------------------------------ 55 ;8255初始化 56 MOV DX,CON_8255 57 MOV AL,90H ;8255写入控制字 58 OUT DX,AL 59 ;------------------------------------------------------------ 60 61 MAIN: MOV DX,A_8255 62 IN AL,DX 63 ;只显示低四位 64 AND AL,0FH 65 ;获取offset 66 MOV BL,08H 67 MUL BL 68 MOV SI,AX 69 ;储存于BUFF中 70 MOV DI,OFFSET BUFF 71 MOV CX,08H 72 CLD 73 REP MOVSB ;获取输入对应的值并存于BUFF中 74 ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 75 ;输出到LED点阵上 76 77 MOV CX,80H 78 ;++++++++++++++++++++++++++++++++++++++++++++++ 79 ;以下代码循环80H次 80 ;重复进行①~⑧即可在LED 上稳定的显示 81 ;AH----->列 AL----->输出值 82 D1: MOV AH,01H 83 PUSH CX 84 ;CX=8----->输出到每一列 85 MOV CX,0008H 86 MOV SI,OFFSET ORDER 87 ;++++++++++++++++++++++++++++++++++++++++++++++ 88 ;以下代码循环8次,输出到每一列 89 ;在步骤①~⑧之间可插入几ms的延时 90 NEXT: MOV AL,[SI] 91 MOV BX,OFFSET BUFF 92 XLAT 93 MOV DX,PROTH ;POSITIVE 94 OUT DX,AL 95 MOV AL,AH 96 MOV DX,PROTLR ;NEGTATIVE 97 OUT DX,AL 98 MOV AL,00H 99 OUT DX,AL ;0 100 SHL AH,01H 101 INC SI 102 PUSH CX 103 ;插入短暂延时 104 MOV CX,0FFH 105 DELAY1: LOOP DELAY1 106 POP CX 107 LOOP NEXT 108 ;++++++++++++++++++++++++++++++++++++++++++++++ 109 POP CX 110 CALL DELAY 111 LOOP D1 112 ;++++++++++++++++++++++++++++++++++++++++++++++ 113 MOV AL,00H 114 MOV DX,PROTLR 115 OUT DX,AL 116 ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 117 MOV AH,01 ;有无键按下 118 INT 16H 119 JZ MAIN 120 MOV AH,4CH ;返回 121 INT 21H 122 ;---------------------------------------------------------------- 123 DELAY PROC NEAR ;延迟子程序 124 PUSH CX 125 MOV CX,0FFFH ;FFH 126 CCC: LOOP CCC 127 POP CX 128 RET 129 DELAY ENDP 130 ;--------------------------------------------------------------------- 131 CODE ENDS 132 END START