📄 22.txt
字号:
IO8255_A EQU 0DC60H ;符号定义伪指令
IO8255_B EQU 0DC61H
IO8255_C EQU 0DC62H
IO8255_M EQU 0DC63H
CODE SEGMENT
ASSUME CS:CODE
START:
MOV DX,IO8255_M
MOV AL,10001010B ;设8255为A口方式0输出,B口方式0输入,C口高位输入,低位输出
OUT DX,AL
MOV AL,0FH ;PC7置1,复位信号,低脉冲有效
OUT DX,AL
MOV AL,00H
OUT DX,AL ;PC0置0,喇叭初始不叫
MOV DX,IO8255_A
MOV AL,00H
OUT DX,AL ;数码显示管不亮
TT1:MOV DX,IO8255_B
IN AL,DX ;自出B口读入开关状态
CMP AL,00H
JZ TT1 ;检测是否有开关数据读入,当没有时继续读B口的输入
MOV DX,IO8255_A
;当有开关数据输入时检测组号
CMP AL,01H
JZ A0 ;拨动0号开关时跳转
CMP AL,02H
JZ A1 ;拨动1号开关时跳转
CMP AL,04H
JZ A2 ;拨动2号开关时跳转
CMP AL,08H
JZ A3 ;拨动3号开关时跳转
CMP AL,10H
JZ A4 ;拨动4号开关时跳转
CMP AL,20H
JZ A5 ;拨动5号开关时跳转
CMP AL,40H
JZ A6 ;拨动6号开关时跳转
CMP AL,80H
JZ A7 ;拨动7号开关时跳转
;将段码自8255A口输出,显示在数码管上
A0:
MOV AL,3FH
OUT DX,AL ;数码管上显示0
JMP FIN
A1:
MOV AL,06H
OUT DX,AL ;数码管上显示1
JMP FIN
A2:
MOV AL,5BH
OUT DX,AL ;数码管上显示2
JMP FIN
A3:
MOV AL,4FH
OUT DX,AL ;数码管上显示3
JMP FIN
A4:
MOV AL,66H
OUT DX,AL ;数码管上显示4
JMP FIN
A5:
MOV AL,6DH
OUT DX,AL ;数码管上显示5
JMP FIN
A6:
MOV AL,7DH
OUT DX,AL ;数码管上显示6
JMP FIN
A7:
MOV AL,07H
OUT DX,AL ;数码管上显示7
JMP FIN
FIN:
MOV DX,IO8255_M
MOV AL,01H
OUT DX,AL ;喇叭叫
CALL DELAY
MOV AL,00H
OUT DX,AL ;喇叭不叫
TT2:
MOV AH,0BH ;DOS系统功能调用,检测当前键盘是否有键被按下
INT 21
CMP AL,00H
JE EN ;当有键盘输入时返回到DOS
MOV DX,IO8255_C
IN AL,DX
TEST AL,80H ;复位测试
JNE TT2 ;没有脉冲发出,继续循环
MOV DX,IO8255_A ;熄灭数码显示管
MOV AL,0
OUT DX,AL
JMP TT1 ;继续下一轮
EN:
MOV AH,4CH ;返回DOS
INT 21H
DELAY PROC ;延迟单元
PUSH AX
PUSH BX
PUSH CX
MOV BX,1FFH
MOV AX,0AFFFH
T1: DEC BX
MOV CX,0AFFFH
T2: DEC AX
LOOP T2
CMP BX,0
JNE T1
POP CX
POP BX
POP AX
RET
DELAY ENDP
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -