📄 yingjian.asm
字号:
DATA SEGMENT
TABLE DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;定义0到9的显示码表
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV AL,8AH ;初始化8255
MOV DX,0DC63H ;设置A口输出,B口输入,C口高4位输入,低4位输出
OUT DX,AL
LAB1: MOV DX,0DC61H ;自B口输入数据
IN AL,DX
CMP AL,0 ;判断输入数据是否为0
JE LAB1
MOV CL,0FFH
CLC
LAB2: SHR AL,1 ;进行右移判断,直到进位标志为1为止
INC CL
JNC LAB2
MOV AL,CL ;如果进位标志为1则将循环移动的次数送到AL
LEA BX,TABLE ;取数字码表首地址
XLAT ;查表求出数字码
MOV DX,0DC60H ;把查找到的数字玛由A口送到LED数码管显示最先抢答的组号
OUT DX,AL
MOV DX,0DC62H ;将PC0和PC1口均置为高电频,令喇叭发声
MOV AL,03H
OUT DX,AL
;延时,本时间段内喇叭一直发声
MOV DX,6000
L1: MOV CX,6000
L2: DEC CX
JNZ L2
DEC DX
JNZ L1
MOV DX,0DC62H ;停止发声
MOV AL,00H
OUT DX,AL
CHECK: MOV DX,0DC62H ;检查PC7是否为1,若为1则复位,跳到START进行下一轮抢答
IN AL,DX
TEST AL,80H
JNZ START
TEST AL,40H
JMP EXIT
JMP CHECK
EXIT: MOV AH,4CH
INT 21H
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -