微机原理课程设计——读取开关值显示在8X8点阵模块上

微机原理课程设计——读取开关值显示在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
原文地址:https://www.cnblogs.com/YiDongZhao/p/14732644.html