DATA SEGMENT
TABLE1 DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH TABLE2 DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,7FH BP DB
SI DB
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV DX,0EEH ;A,B,C 方式0,A,C 輸出,B 輸入
MOV AL,10000011B
OUT DX,AL
MOV BP,00 ;BP初值設置0
CC1: CALL BB1;開始顯示0
MOV DX,0ECH;讀取C 口低位值
IN AL,DX
AND AL,0FH;檢查開始搶答鍵是否按下
CMP AL,0EH
JNE CC1;沒按下,跳到cc1,繼續顯示0
MOV CX,0FFH
MOV BP,1EH
CC2: CALL BB1;按下,開始顯示1秒鐘30
LOOP CC2
DEC BP;變量減一
JS CC4
MOV DX,0EAH;讀取b 口值,看是否有人搶答
IN AL,DX
CMP AL,0FFH
JE CC2;沒人搶,跳到cc2
CC3: MOV SI,07H
NEXT-TRY:IN AL,DX
CMP AL,TABLE2[SI];檢查鍵值
JE DONE
DEC SI
JMP NEXT-TRY
DONE: MOV DX,0ECH;顯示鍵值
MOV AL,0E0H
OUT DX,AL
LEA BX,TABLE1
MOV AX,SI
XLAT
MOV DX,0E8H
OUT DX,AL
CALL DELAY
CALL BB1
MOV DX,0ECH
IN AL,DX
AND AL,0FH
CMP AL,0CH
JNE DONE
CC4:MOV BP,0
CALL BB1
JMP CC4
BB1 PROC NEAR
MOV AX,BP
MOV DL,0AH
DIV DL
MOV BX,OFFSET TABLE1 XLAT
MOV DX,0E8H
OUT DX,AL
MOV AL,0B0H ;第三位顯示
MOV DX,0ECH;C口高位
OUT DX,AL
CALL DELAY
MOV AL,AH
XLAT
MOV DX,0E8H
OUT DX,AL
MOV AL,70H ;第四位顯
MOV DX,0ECH;C口高位
OUT DX,AL CALL DELAY RET BB1 ENDP
DELAY PROC NEAR MOV CX,00FAH T1: LOOP T1 RET
DELAY ENDP CODE ENDS
END START
|