📄 abc.asm
字号:
;**********主程序MAIN**********
ORG 0000H
AJMP MAIN
ORG 000BH
AJMP CLOCK
ORG 0030H
PORT EQU 8000H
PORTA EQU 8001H
PORTB EQU 8002H
PORTC EQU 8003H
DISP0 EQU 30H
DISP1 EQU 31H
DISP2 EQU 32H
DISP3 EQU 33H
DISP4 EQU 34H
DISP5 EQU 35H
HOUR EQU 3CH
MIN EQU 3DH
SEC EQU 3EH
MSEC EQU 3FH
AHOUR EQU 40H
AMIN EQU 41H
ASEC EQU 42H
F1 BIT PSW.1
MAIN: MOV SP,#50H
MOV DPTR,#PORT
MOV A,#03H
MOVX @DPTR,A
CLR F1
CLR F0
MOV AHOUR,#0FFH
MOV AMIN,#0FFH
MOV ASEC,#0FFH
MOV R7,#10H
MOV R0,#DISP0
CLR A
LOOP: MOV @R0,A
INC R0
DJNZ R7,LOOP
MOV TMOD,#01H
MOV TL0,#0B0H
MOV TH0,#3CH
SETB TR0
SETB EA
SETB ET0
BEGIN: ACALL ALARM
ACALL KEYSCAN
CJNE A,#0AH,NEXT1
CLR TR0
MOV R1,#HOUR
AJMP MOD1
NEXT1: CJNE A,#0BH,BEGIN
JB F1,NEXT2
MOV R1,#AHOUR
MOD1: SETB F0
ACALL MODIFY
SETB TR0
CLR F0
AJMP BEGIN
NEXT2: SETB P1.0
CLR F1
AJMP BEGIN
;**********时间设置/闹钟定时模块MODIFY**********
MODIFY:ACALL KEYIN
ACALL COMB
RET
;**********键盘设置子程序KEYIN**********
KEYIN: PUSH PSW
PUSH ACC
SETB RS1
MOV R0,#DISP0
MOV R7,#06H
L1: CLR RS1
ACALL KEYSCAN
SETB RS1
CJNE A,#0AH,L2
L2: JNC L1
MOV @R0,A
INC R0
DJNZ R7,L1
POP ACC
POP PSW
CLR RS1
RET
;**********键盘扫描子程序KEYSCAN**********
KEYSCAN: ACALL TEST
JNZ REMOV
ACALL DISPLAY
ACALL ALARM
AJMP KEYSCAN
REMOV: ACALL DISPLAY
ACALL ALARM
ACALL TEST
JNZ LIST
ACALL DISPLAY
ACALL ALARM
AJMP KEYSCAN
LIST: MOV R2,#0FEH
MOV R3,#00H
LINE0: MOV DPTR,#PORTA
MOV A,R2
MOVX @DPTR,A
MOV DPTR,#PORTC
MOVX A,@DPTR
JB ACC.0,LINE1
MOV A,#00H
AJMP TRYK
LINE1: JB ACC.1,LINE2
MOV A,#04H
AJMP TRYK
LINE2: JB ACC.2,NEXT
MOV A,#08H
AJMP TRYK
NEXT: INC R3
MOV A,R2
JNB ACC.3,EXIT
RL A
MOV R2,A
AJMP LINE0
EXIT: AJMP KEYSCAN
TRYK: ADD A,R3
PUSH ACC
LETK: ACALL TEST
JNZ LETK
POP ACC
RET
TEST: MOV DPTR,#PORTA
MOV A,#00H
MOVX @DPTR,A
MOV DPTR,#PORTC
MOVX A,@DPTR
CPL A
ANL A,#07H
RET
;**********显示子程序DISPLAY**********
DISPLAY: JB F0,DISP
ACALL SEPA
DISP: PUSH PSW
PUSH ACC
SETB RS0
MOV DPTR,#PORTA
MOV A,#0FFH
MOVX @DPTR,A
MOV R0,#DISP0
MOV R7,#00H
MOV R6,#06H
MOV R5,#0FEH
DIS1: MOV DPTR,#TAB
MOV A,@R0
MOVC A,@A+DPTR
MOV DPTR,#PORTB
MOVX @DPTR,A
MOV DPTR,#PORTA
MOV A,R5
MOVX @DPTR,A
HERE: DJNZ R7,HERE
INC R0
MOV A,R5
RL A
MOV R5,A
DJNZ R6,DIS1
CLR RS0
POP ACC
POP PSW
RET
TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H
DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H
;**********合字子程序COMB**********
COMB: MOV R0,#DISP1
ACALL COMB1
CJNE A,#24H,CHK
CHK: JNC EXIT1
MOV @R1,A
INC R1
MOV R0,#DISP3
ACALL COMB1
CJNE A,#60H,CHK1
CHK1: JNC EXIT1
MOV @R1,A
INC R1
MOV R0,#DISP5
ACALL COMB1
CJNE A,#60H,CHK2
CHK2: JNC EXIT1
MOV @R1,A
RET
EXIT1: AJMP MAIN
COMB1: MOV A,@R0
ANL A,#0FH
MOV 43H,A
DEC R0
MOV A,@R0
ANL A,#0FH
SWAP A
ORL A,43H
RET
;**********拆字子程序SEPA**********
SEPA: PUSH PSW
PUSH ACC
SETB RS0
MOV R0,#DISP5
MOV A,SEC
ACALL SEPA1
MOV A,MIN
ACALL SEPA1
POP ACC
POP PSW
RET
SEPA1: MOV 44H,A
ANL A,#0FH
MOV @R0,A
DEC R0
MOV A,44H
ANL A,#0F0H
SWAP A
MOV @R0,A
RET
;************定时比较模块****************
ALARM: MOV A,ASEC
CJNE A,SEC,BACK
MOV A,AMIN
CJNE A,AMIN,BACK
MOV A,AHOUR
CJNE A,HOUR,BACK
CLR P1.0
SETB F1
BACK: RET
;**********定时器0中断服务子程序CLOCK**********
CLOCK: MOV TL0,#0B7H
MOV TH0,#3CH
PUSH PSW
PUSH ACC
INC MSEC
MOV A,MSEC
CJNE A,#0AH,DONE
MOV MSEC,#00H
MOV A,SEC
ADD A,#01H
DA A
MOV SEC,A
CJNE A,#60H,DONE
MOV SEC,#00H
MOV A,MIN
ADD A,#01H
DA A
MOV MIN,A
CJNE A,#60H,DONE
MOV MIN,#00H
MOV A,HOUR
ADD A,#01H
DA A
MOV HOUR,A
CJNE A,#24H,DONE
MOV HOUR,#00H
DONE: POP ACC
POP PSW
RETI
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -