📄 程序清单.txt
字号:
DATA SEGMENT
KEY_V DB ?
P8255_A EQU 0E180H
P8255_B EQU 0E184H
P8255_C EQU 0E182H
P8255_CTRL EQU 0E186H
P8254_0 EQU 0E190H
P8254_1 EQU 0E192H
P8254_2 EQU 0E194H
P8254_CTRL EQU 0E196H
DIS_TABLE DB 0C0H,0F9H,0A4H,0B0H,099H,92H,82H
DB 0F8H,080H,90H,88H,83H,0C6H,0A1H
DB 86H,8EH,0FFH,8CH,89H,8EH,0BFH,0F7H ; LED显示码表
DIS_BIT0 DB ?
DIS_BIT1 DB ?
DIS_BIT2 DB ?
DIS_BIT3 DB ?
NUM DB ?
BAI DB ?
TENS DB ?
SECOND DB ?
FEN DW ?
CHUN DB ?
SHI EQU 000AH
CHUSHU DB ?
SHANG DB ?
YUSHU DB ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS,DATA
START;
MOV AX,DATA
MOV DS,AX
MOV BAI,0
MOV TENS,6
MOV SECOND,0
START1: MOV AL,10001000B
MOV DX,P8255_CTRL ;8255控制字端口
OUT DX,AL
MOV AL,00010001B ;8254初始化
MOV DX,P8254_CTL
OUT DX,AL
NEXT: CALL KEY
MOV AL,BL
CMP AL,07
JA NEXT
ADD BL,1
MOV MUM,BL
CALL DISPLAY1
MOV CX,60
MOV AL,00010001B ;8254初始化
MOV DX, P8254_CTL
OUT DX,AL
MOV AL,32H ;CLK0取32HZ,定时1S
MOV DX, P8254_1
OUT DX,AL
PUSH AX
PUSH BX
PUSH CX
PUSH DX
LEA BX,DIS_TABLE
MOV AX, 60
MOV CX,60
LOP:MOV DX, P8255_B
OUT DX,0FBH;选择位码
CALL DJSXS
XLAT
MOV DX, P8255_A
OUT DX ,AL
MOV AL,AH
XLAT
MOV DX, P8255_B
OUT DX,0F7H
MOV DX, P8255_A
OUT DX,AL
CALL DELAY1S
MOV DX,P8255_C ;判断未到60答题结束
IN AL,DX
TEST AX,0F3H
JZ LL
DEC AX
LOOP LOP
CALL SGBAOJING`
LL:
POP DX
POP CX
POP BX
POP AX
CALL KEY
WARNING:
MOV AX,FENS
DIV AX,100
MOV BAI,AL
MOV AL,AH
MOV AH,0
DIV 10
MOV TENS,AL
MOV SECOND,AH
CALL DISPLAY1
CALL KEY
MOV AL ,BL ;加减分阶段
CMP AL,10
JL WARNING
CMP AL,11
JG WARNING
CMP AL,10
JE JIA
CLC
MOV AX,FENS
SUB AX,10
MOV FENS,AX
DIV AX,100
MOV BAI,AL
MOV AL,AH
MOV AH,0
DIV 10
MOV TENS,AL
MOV SECOND,AH
CALL DISPLAY1
MOV DX,8284_CTRL
MOV AL,10010001B
OUT DX,AL ;二通道控制字
MOV DX,8254_1
MOV AL,96H ;初值
OUT DX, AL ;红灯亮
JIA: MOV AX,FENS(NUM-1)
ADD AX,10
MOV FENS,AX
DIV AX,100
MOV BAI,AL
MOV AL,AH
MOV AH,0
DIV 10
MOV TENS,AL
MOV SECOND,AH
CALL DISPLAY1
MOV DX,8254_CTRL
MOV AL,00010001B
OUT DX,AL ;二通道控制字
MOV DX,8254_2
MOV AL,96H;初值
OUT DX, AL;绿灯亮
CHAXUN: CALL DISPLAY1
MOV DX,P8255_C
IN AL,DX
CMP AL,7BH ;是否为复位键
JNE CHAXUN
MOV AL,00000000B
MOV DX,P8255_B
OUT DX,AL
JMP START1
KEY PROC FAR
MOV DX, P8255_CTRL
MOV AL,10001000B
OUT DX,AL
CALL KEYSCAN
CMP BL,0FFH
JNZ WAIT
RET
WAIT: MOV KEY_V,BL
CALL DELAY
CALL KEYSCAN
CMP BL,KEY_V
JZ RELEASE
RET
RELEASE:MOV AL,0F0H
MOV DX,P8255_C
OUT DX,AL
IN AL,DX
AND AL,0F0H
CMP AL,0F0H
JNZ RELEASE
RET
KEY ENDP
KEYSCAN PORC FAR
KEYSCAN:MOV AL,0F0H
MOV DX, P8255_C
OUT DX,AL
IN AL,DX
AND AL,0F0H
CMP AL,0F0H
JNZ DONE
MOV BL,0FFH
RET
DONE: MOV BL,0
MOV CL,0FEH
MOV CH,3
FROW: MOV AL,CL
MOV DX, P8255_C
OUT DX,AL
RCL AL,1
MOV CL,AL
IN AL,DX
AND AL,0F0H
CMP AL,0F0H
JNZ FCOL
ADD BL,4
DEC CH
JNZ FROW
RET
FCOL: RCL AL,1
JNC FCOL1
INC BL
JMP FCOL
FCOL1: RET
KEYSCAN ENDP
DISPLAY1 PROC NEAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
LEA BX,DIS_TABLE
MOV AL,NUM ;--------组别
XLAT
AND AL,01111111B ;组别小数点亮
MOV DIS_BIT0,AL ; ****************************组别显示码>>地址
MOV AL,BAI ;--------百位
XLAT
MOV DIS_BIT1,AL ;*****************************百位显示码>>地址
MOV AL,TENS ;--------十位
XLAT
MOV DIS_BIT2,AL ;*****************************十位显示码>>地址
MOV AL,SECOND ;-------个位
XLAT
MOV DIS_BIT3,AL ;*****************************个位显示码>>地址
;------------显示BCD码------------------------------------
DIS_LOP1:
MOV DX,P8255_B ======================== ==========
MOV AL,01H
OUT DX,AL ;KL4位选择
MOV DX,P8255_A
MOV AL,DIS_BIT0
OUT DX,AL ;显示字段
MOV CX,000
LOOP $
MOV DX,P8255_B
MOV AL,02H
OUT DX,AL ;KL3位选择
MOV DX,P8255_A
MOV AL,DIS_BIT1
OUT DX,AL ;显示字段
MOV CX,000
LOOP $
MOV DX,P8255_B
MOV AL,03H
OUT DX,AL ;KL3位选择
MOV DX,P8255_A
MOV AL,DIS_BIT2
OUT DX,AL ;显示字段
MOV CX,000
LOOP $
MOV DX,P8255_B
MOV AL,04H
OUT DX,AL ;KL3位选择
MOV DX,P8255_A
MOV AL,DIS_BIT3
OUT DX,AL ;显示字段
MOV CX,000
LOOP $
POP AX
POP BX
POP CX
POP DX
RET
DISPLAY1 ENDP
DJSXS PROC NEAR
MOV CHUSHU,10
DIV CHUSHU
MOV SHANG,AL
MOV YUSHU,AH
DJSXS ENDP
DELAY1S PROC NEAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV BL,100
DELAY:MOV CX,2801
WAIT:LOOP WAIT
DEC BL
JNZ DELAY
POP DX
POP CX
POP BX
POP AX
RET
DELAY1S ENDP
SGBAOJING PROC FAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
CALL DELAY60S
MOV AL,00000000B ;关8254的60秒定时
MOV DX,P8254_CTR
MOV AL,97H ;通道2控制字,BCD码计数 ,方式3
OUT DX,AL
MOV DX,P8254-2
MOV AL,60
OUT,DX,AL ;产生10HZ方波驱动蜂明器,及黄LED
JNZ DELAY2
DEC DX
JNZ DELAY1
MOV AL,00000000B
MOV DX,P8254-2
OUT DX,AL
POP DX
POP CX
POP BX
POP AX
PROC DELAY60S FAR
MOV DX,60
DELAY1: MOV BL,100
DELAY2: MOV CX,2801
WAIT1: LOOP WAIT1
DEC BL
DELAY60S ENDP
SGBAOJING ENDP
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -