📄 guajiechengxu.txt
字号:
ORG 0000H
AJMP START
ORG 000BH
AJMP ERROR
START:
ACALL CLEARALL
MOV SP, #50H
ACALL WATCHDOG
CAQULATER:
ACALL FEEDDOG
ACALL DISPLAY
ACALL KEYREAD
MOV A,22H
ANL A,#0F0H
JZ NUMPROCESS_SLECT
JB 22H.4, ASMDPROCESS_SLECT
JB 22H.5, CLEARALL_SLECT
JB 22H.6, RESULTOUT_SLECT
JB 22H.7, NOKEYDOWN_SLECT
NUMPROCESS_SLECT:
ACALL NUMPROCESS
AJMP CAQULATER
ASMDPROCESS_SLECT:
ACALL ASMDPROCESS
AJMP CAQULATER
CLEARALL_SLECT:
ACALL CLEARALL
AJMP CAQULATER
RESULTOUT_SLECT:
ACALL RESULTOUT
AJMP CAQULATER
NOKEYDOWN_SLECT:
AJMP CAQULATER
;读键子程
NEW_KEY EQU 22H
OLD_KEY EQU 23H
KEYREAD:
CLR PSW.5
KEY_AGAIN:
ACALL KEY_INPUT
JNB PSW.5, KEY_OVER
ACALL KEY_DELAY
ACALL KEY_INPUT
JNB PSW.5, KEY_OVER
MOV A, NEW_KEY
CJNE A, OLD_KEY,KEY_OVER
UPKEY:
ACALL KEY_INPUT
JB PSW.5, UPKEY
ACALL KEY_INPUT
JB PSW.5, UPKEY
MOV R0,NEW_KEY
RET
KEY_INPUT:
MOV A, #00H ;显示0
MOV DPTR, #9000H
MOVX @DPTR, A ;ZIXING
CLR F0
MOV R1, #00H
MOV R2, #04H
MOV R3, #01H
KEY_LOOP:
MOV A, R3
MOV DPTR, #8000H
MOVX @DPTR, A
MOVX A, @DPTR
MOV R4, #04H
KEY_LOOP1:
RRC A
JNC NEXT_KEY
MOV OLD_KEY,NEW_KEY
MOV A, R1
MOV DPTR, #KEY_TABLE_BCD
MOVC A, @A+DPTR
MOV NEW_KEY, A
SETB F0
AJMP KEY_OVER_OK
NEXT_KEY:
INC R1
DJNZ R4,KEY_LOOP1
MOV A, R3
RL A
MOV R3, A
DJNZ R2, KEY_LOOP
AJMP KEY_OVER_OK
KEY_OVER:
MOV 22H, #80H
KEY_OVER_OK:
RET
KEY_DELAY:
MOV R0, #0FFH
DJNZ R0, $
RET
KEY_TABLE_BCD:
DB 07H,08H,09H,11H
DB 04H,05H,06H,12H
DB 01H,02H,03H,14H
DB 00H,20H,40H,18H
;显示子程
DISPLAY:
CALL DISPNUM
MOV R5, 2DH
MOV R2, #01H
MOV R0, #48H
DISP1:MOV DPTR,#8FFFH
MOV A, R2
MOVX @DPTR,A
MOV A, @R0
DISP2:MOV DPTR,#SHOWTABLE
MOVC A, @A+DPTR
MOV DPTR,#9FFFH
MOVX @DPTR,A
ACALL DEL0
ACALL DEL0
ACALL DEL0
ACALL DEL0
ACALL DEL0
MOV A, R2
RL A
MOV R2, A
INC R0
DJNZ R5, DISP1
RET
SHOWTABLE:
DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
DEL0: MOV R6, #00H
TM: MOV R7, #01H
DJNZ R7, $
DJNZ R6, TM
RET
;显示数字位数字程
DISPNUM:
JNB 20H.4, YYY
MOV A,21H
JZ NUM5_SLECT
YYY:MOV A, 4CH
ORL A, 21H
MOV 2EH, A
JB 2EH.3, NUM4_SLECT
JB 2EH.2, NUM3_SLECT
JB 2EH.1, NUM2_SLECT
JB 2EH.0, NUM1_SLECT
NUM1_SLECT:
MOV 2DH, #1
AJMP RETURN2
NUM2_SLECT:
MOV 2DH, #2
AJMP RETURN2
NUM3_SLECT:
MOV 2DH, #3
AJMP RETURN2
NUM4_SLECT:
MOV 2DH, #4
AJMP RETURN2
NUM5_SLECT:
MOV 2DH,4DH
AJMP RETURN2
RETURN2:MOV 4DH,2DH
RET
;数字键处理子程
NUMPROCESS:
MOV 4CH,#0H
MOV A, 20H
JZ BCD1
BCD2:MOV A, 21H
CJNE A, #2, BCD2IN
AJMP RETURN
BCD2IN:MOV 37H, 36H
MOV 36H, 22H
INC 21H
MOV 48H, 36H
MOV 49H, 37H
AJMP RETURN
BCD1:MOV A, 21H
CJNE A, #2, BCD1IN
AJMP RETURN
BCD1IN:MOV 31H, 30H
MOV 30H, 22H
INC 21H
MOV 48H, 30H
MOV 49H, 31H
RETURN:RET
;清RAM子程
CLEARALL:
MOV R5, #2EH
MOV R0, #20H
CLEARRAM:MOV @R0, #00H
INC R0
DJNZ R5, CLEARRAM
RET
;运算键处理子程
ASMDPROCESS:
MOV A, 31H
SWAP A
ORL A, 30H
MOV 34H,A
MOV 20H,22H
MOV 21H,#0H
RET
;等于键处理子程
RESULTOUT:
JNB 20H.4,RETURN3
MOV A, 37H
SWAP A
ORL A, 36H
MOV 3AH,A
JB 20H.0, BCDADD_SLECT
JB 20H.1, BCDSUB_SLECT
JB 20H.2, BCDMUL_SLECT
JB 20H.3, BCDDIV_SLECT
BCDADD_SLECT:
ACALL BCDADD
AJMP RESULTPROCESS
BCDSUB_SLECT:
;ACALL BCDSUB
AJMP RESULTPROCESS
BCDMUL_SLECT:
;ACALL BCDMUL
AJMP RESULTPROCESS
BCDDIV_SLECT:
;ACALL BCDDIV
AJMP RESULTPROCESS
RESULTPROCESS:
MOV 4CH, #0H
MOV A, 3CH
ANL A, #0FH
MOV 48H,A
SETB 2FH.0
MOV A, 3CH
SWAP A
ANL A, #0FH
JZ SETTEN
SETB 2FH.1
SETTEN:MOV 49H,A
MOV A, 3DH
ANL A, #0FH
JZ SETHUN
SETB 2FH.2
SETHUN:MOV 4AH,A
MOV A, 3DH
SWAP A
ANL A, #0FH
JZ SETTHO
SETB 2FH.3
SETTHO:MOV 4BH,A
MOV 4CH,2FH
MOV R5, #20H
MOV R0, #20H
CLEARRAM2:
MOV @R0, #00H
INC R0
DJNZ R5, CLEARRAM2
RETURN3:
RET
;加法运算子程
BCDADD:
CLR C
MOV A, 34H
ADDC A, 3AH
DA A
MOV 3CH, A
MOV A, #00H
RLC A
MOV 3DH,A
RET
;减法运算子程
BCDSUB:
;乘法运算子程
BCDMUL:
;除法运算子程
BCDDIV:
;WATCHINGDOG的软件实现子程
;看门狗设置与启动
WATCHDOG:
MOV TMOD, #01H
MOV TH0, #00H
MOV TL0, #01H
MOV IE, #82H
SETB TR0
RET
;喂狗
FEEDDOG:
MOV TH0, #00H
MOV TL0, #01H
RET
;程序跑飞处理子程
ERROR:
AJMP START
RETI
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -