📄 时钟电压双显示.asm
字号:
LEDBUF EQU 60H
HOUR EQU 41H
MINUTE EQU 40H
SECOND EQU 42H
C2MS EQU 43H
INKEY EQU 07DFFH ;PB键盘口
OUTSEG EQU 07CFFH ;PA段空控制口
OUTBIT EQU 07EFFH ;PC
AD0809 EQU 0BFFFH ;ADC0809地址
TICK EQU 125
CHANGE EQU 45H ;双功能转换
ORG 0000H
LJMP START
ORG 000BH
LJMP TOT0
ORG 0013H
LJMP TOINT1
ORG 0020H
LEDMAP: DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H
DB 7FH, 6FH, 77H, 7CH, 39H, 5EH, 79H, 71H
ORG 30H
DELAY: MOV R7, #0 ;延时
DELAY1: DJNZ R7, DELAY1
DJNZ R6, DELAY1
RET
DISPLAY:MOV R0, #LEDBUF ;显示子程序
MOV R1, #6
MOV R2, #0
LOOP: MOV DPTR, #OUTBIT
MOV A, R2
MOVX @DPTR, A
MOV A, @R0
MOV DPTR, #OUTSEG
MOVX @DPTR, A ;显示第一位
MOV R6, #01H
ACALL DELAY
INC R2
INC R0
DJNZ R1 , LOOP
RET
DISPLAY2:MOV DPTR, #OUTBIT
MOV A, #7
MOVX @DPTR, A ;关八段管
MOV R0, #LEDBUF ;显示子程序
MOV R1, #6
MOV R2, #0
LOOP3:MOV DPTR, #OUTBIT
MOV A, R2
MOVX @DPTR, A
MOV A, @R0
MOV DPTR, #OUTSEG
MOVX @DPTR, A ;显示第一位
MOV R6, #0F0H
ACALL DELAY
INC R2
INC R0
DJNZ R1 , LOOP3
RET
RKEY: MOV R6,#01H
MOV DPTR,#INKEY
MOVX A, @DPTR
CPL A
ANL A,#3CH
DJNZ R6,RKEY
JNZ GKEY
RET
GKEY:
JB ACC.2, KEY0
JB ACC.3, KEY1
JB ACC.4, KEY2
JB ACC.5, KEY3
RET
KEY3: PUSH LEDBUF+0
PUSH LEDBUF+1
PUSH LEDBUF+2
PUSH LEDBUF+3
PUSH LEDBUF+4
PUSH LEDBUF+5
MOV LEDBUF+0, #7FH ;循环显8赋值
MOV LEDBUF+1, #0FFH
MOV LEDBUF+2, #7FH
MOV LEDBUF+3, #0FFH
MOV LEDBUF+4, #7FH
MOV LEDBUF+5, #7FH
MOV R5, #5
MLOOP:
ACALL DISPLAY2
DJNZ R5, MLOOP
POP LEDBUF+5
POP LEDBUF+4
POP LEDBUF+3
POP LEDBUF+2
POP LEDBUF+1
POP LEDBUF+0
RET
KEY0: INC HOUR ;键1处理,调时
MOV A, HOUR
CJNE A, #24, HOUR1
MOV HOUR, #0
HOUR1: CALL SHOW
LCALL DISPLAY
MOV R6, #0FFH
CALL DELAY
RET
KEY1: INC MINUTE ;键2处理 调分
MOV A, MINUTE
CJNE A, #60, MINUTE1
MOV MINUTE, #0
MINUTE1:CALL SHOW
LCALL DISPLAY
MOV R6, #0FFH
CALL DELAY
RET
KEY2: PUSH LEDBUF+0
PUSH LEDBUF+1
PUSH LEDBUF+2
PUSH LEDBUF+3
PUSH LEDBUF+4
PUSH LEDBUF+5 ;保护数据
;CLR ET0
SETB EX1 ;显示电压程序
MOV DPTR, #AD0809
MOVX @DPTR,A
MOV LEDBUF, #0
MOV LEDBUF+1,#0
MOV LEDBUF+2,#0
ADLOOP: CLR EX1
LCALL DISPLAY
MOV DPTR,#INKEY
MOVX A, @DPTR
CPL A
ANL A,#3CH
JB ACC.4,K2END
SETB EX1
JMP ADLOOP
K2END: CLR EX1
SETB ET0
POP LEDBUF+5
POP LEDBUF+4
POP LEDBUF+3
POP LEDBUF+2
POP LEDBUF+1
POP LEDBUF+0
RET
GLED: MOV DPTR, #LEDMAP ;查表取码
MOVC A, @A+DPTR
RET
SHOW: MOV A, HOUR ;时间初始化
MOV B, #10
DIV AB
ACALL GLED
MOV LEDBUF, A
MOV A, B
ACALL GLED
ORL A, #80H ;#80H表示时间间隔点
MOV LEDBUF+1, A
MOV A, MINUTE
MOV B, #10
DIV AB
ACALL GLED
MOV LEDBUF+2, A
MOV A, B
ACALL GLED
ORL A, #80H
MOV LEDBUF+3, A
MOV A, SECOND
MOV B, #10
DIV AB
ACALL GLED
MOV LEDBUF+4,A
MOV A, B
ACALL GLED
MOV LEDBUF+5,A
RET
TOT0: PUSH PSW ;定时T0中断
PUSH ACC
MOV A, C2MS
DEC C2MS
JNZ EXIT ;不够一秒,不处理中断
MOV C2MS, #TICK
INC SECOND
MOV A, SECOND
CJNE A, #60, EXIT ;不够一分钟,继续循环
MOV SECOND, #0
INC MINUTE
MOV A, MINUTE
CJNE A, #60, EXIT
MOV MINUTE, #0
INC HOUR
MOV A, HOUR
CJNE A, #24, EXIT
MOV HOUR, #0
EXIT: POP ACC
POP PSW ;保护中断
RETI
TOINT1: CLR ET0 ;关T0,外部1中断
MOV A, #10H
DJNZ ACC, $ ;延时128μS
MOV DPTR, #AD0809
MOVX A, @DPTR ;读A/D结果
MOV B, #10
DIV AB
MOV R4, A
MOV A, B
CALL GLED
MOV LEDBUF+5, A
MOV A, R4
MOV B, #10
DIV AB
CALL GLED
MOV LEDBUF+3,A
MOV A,B
CALL GLED
MOV LEDBUF+4,A
MOVX @DPTR, A
RETI
START: MOV DPTR, #4300H
MOV A, #82H
MOVX @DPTR,A
MOV TMOD, #00H
MOV TH0, #06H
MOV TL0, #00H ;T0方式 2MS定时初值
SETB ET0
SETB EA ;开中断
MOV C2MS, #TICK
MOV HOUR, #12
MOV MINUTE, #35
MOV SECOND, #0
SETB TR0
MOV CHANGE, #0 ;设置转换标志
LOOP1: ACALL SHOW
LCALL DISPLAY
LCALL RKEY
AJMP LOOP1
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -