📄 lcdtimer.asm
字号:
AJMP EXIT3
EXIT2: CLR C
MOV 05H,C ;否则报警标志位为0
EXIT3: RETI
;*************************
INSERT1: JB P0.0,DINGSHI ;外部中断1服务程序,用于选择调节时间还是调节定时时间
CLR C ;p0.0为0时调节时间,p0.1为0时调节定时时间,两者都不为0无效
MOV 03H,C ;调节时间时置调节标志位为0
MOV P1,#01H ;输出调节时间提示信息
LCALL ENABLE
LCALL DELAY
MOV P1,#80H
LCALL ENABLE
LCALL DELAY
MOV DPTR,#STRING1
LCALL DISPLAY2 ;调用显示字符串子程序
JB 00H,NEXT2 ;把当前时间值转换到24#下显示在提示中
JNB 01H,NEXT2
MOV A,#12
ADD A,R2
MOV R2,A
CJNE R2,#24,NEXT2
MOV R2,#0
NEXT2: MOV P1,#0C6H
LCALL ENABLE
LCALL DELAY
MOV A,R2
MOV B,#10
DIV AB
JZ NEXT3
MOV 55H,R2
LCALL DISPLAY
AJMP NEXT4
NEXT3: LCALL DISPLAY1
NEXT4: MOV P1,#3AH
LCALL EABLE1
LCALL DELAY
MOV 55H,R3
LCALL DISPLAY
MOV P1,#0FH ;将光标格式改为闪烁格式
LCALL ENABLE
LCALL DELAY
JNB P0.0,$ ;等待进行时间调节
LCALL RESET ;调用恢复时间显示子程序
AJMP QUIT
DINGSHI: JB P0.1,QUIT ;调节定时时间
SETB C
MOV 03H,C ;置调节标志位为1
MOV P1,#01H ;输出调节定时时间提示信息
LCALL ENABLE
LCALL DELAY
MOV P1,#80H
LCALL ENABLE
LCALL DELAY
MOV DPTR,#STRING2
LCALL DISPLAY2
MOV P1,#0C6H ;把当前的定时时间显示在提示信息中
LCALL ENABLE
LCALL DELAY
MOV A,R5
MOV B,#10
DIV AB
JZ NEXT5
MOV 55H,R5
LCALL DISPLAY
LCALL DELAY
AJMP NEXT6
NEXT5: LCALL DISPLAY1
NEXT6: MOV P1,#3AH
LCALL EABLE1
LCALL DELAY
MOV 55H,R6
LCALL DISPLAY
MOV P1,#0FH
LCALL ENABLE
LCALL DELAY
JNB P0.1,$ ;等待进行定时时间调节
LCALL RESET ;调用恢复时间显示子程序
QUIT: MOV P1,#0CH ;恢复调节前的光标格式
LCALL ENABLE
LCALL DELAY
RETI
;*************************
RESET: MOV P1,#01H ;恢复时间显示子程序,复原到调节前的计数进制和相应的标志位
LCALL ENABLE
LCALL DELAY
JB 00H,LPP11 ;调节前为12#,则进行24#到12#的转换
CLR C
MOV A,#11
SUBB A,R2
JNC LPP2
CLR C
MOV A,#12
SUBB A,R2
JNC LPP3
MOV A,R2
CLR C
SUBB A,#12
MOV R2,A
SETB C
MOV 01H,C
MOV 02H,C
AJMP LPP4
LPP11: AJMP LPP1
LPP3: SETB C
MOV 02H,C
CLR C
MOV 01H,C
AJMP LPP4
LPP2: CLR C
MOV 02H,C
MOV 01H,C
LPP4: MOV P1,#0C4H
LCALL ENABLE
LCALL DELAY
MOV A,R2
MOV B,#10
DIV AB
JZ LPP5
MOV 55H,R2
LCALL DISPLAY
AJMP LPP6
LPP5: LCALL DISPLAY1
LPP6: MOV P1,#3AH
LCALL EABLE1
LCALL DELAY
MOV 55H,R3
LCALL DISPLAY
MOV P1,#3AH
LCALL EABLE1
LCALL DELAY
MOV 55H,R4
LCALL DISPLAY
MOV P1,#0CEH
LCALL ENABLE
LCALL DELAY
JB 02H,LPP7
MOV P1,#41H
LCALL EABLE1
LCALL DELAY
MOV P1,#4DH
LCALL EABLE1
LCALL DELAY
AJMP EXITR
LPP7: MOV P1,#50H
LCALL EABLE1
LCALL DELAY
MOV P1,#4DH
LCALL EABLE1
LCALL DELAY
AJMP EXITR
LPP1: MOV P1,#0C4H ;调节前为24#则直接将调节后的时间进行输出显示
LCALL ENABLE
LCALL DELAY
MOV A,R2
MOV B,#10
DIV AB
JZ LPP8
MOV 55H,R2
LCALL DISPLAY
AJMP LPP9
LPP8: LCALL DISPLAY1
LPP9: MOV P1,#3AH
LCALL EABLE1
LCALL DELAY
MOV 55H,R3
LCALL DISPLAY
MOV P1,#3AH
LCALL EABLE1
LCALL DELAY
MOV 55H,R4
LCALL DISPLAY
EXITR: RET
;*************************
INSERT0: JB P0.2,MINUTE ;外部中断0服务程序,用于调节时间
MOV P1,#0C6H ;p0.2为0调节小时值,p0.3为0调节分钟值,否则无效
LCALL ENABLE
LCALL DELAY
JB 03H,HOURD ;调节小时值时根据调节标志位选择调节时间小时值还是定时时间小时值
INC R2
CJNE R2,#24,GOON1
MOV R2,#0
GOON1: MOV A,R2
MOV B,#10
DIV AB
JZ GOON2
MOV 55H,R2
LCALL DISPLAY
AJMP EXITINT0
GOON2: LCALL DISPLAY1
AJMP EXITINT0
HOURD: INC R5
CJNE R5,#24,GOON3
MOV R5,#0
GOON3: MOV A,R5
MOV B,#10
DIV AB
JZ GOON4
MOV 55H,R5
LCALL DISPLAY
AJMP EXITINT0
GOON4: LCALL DISPLAY1
AJMP EXITINT0
MINUTE: JB P0.3,EXITINT0 ;调节分钟值时根据调节标志位选择调节时间分钟值还是调节定时时间分钟值
MOV P1,#0C9H
LCALL ENABLE
LCALL DELAY
JB 03H,MINUTED
INC R3
CJNE R3,#60,GOON5
MOV R3,#0
GOON5: MOV 55H,R3
LCALL DISPLAY
AJMP EXITINT0
MINUTED: INC R6
CJNE R6,#60,GOON6
MOV R6,#0
GOON6: MOV 55H,R6
LCALL DISPLAY
EXITINT0: RETI
;*************************
ENABLE: CLR RS ;控制命令写入生效子程序
CLR RW
CLR E
NOP
NOP
SETB E
RET
;************************
EABLE1: SETB RS ;数据写入生效子程序
CLR RW
CLR E
NOP
NOP
SETB E
RET
;************************
DELAY: MOV 58H,#10 ;保证可靠写入延时子程序
DEL1: MOV 59H,#255
DJNZ 59H,$
DJNZ 58H,DEL1
RET
;*************************
DELAY1: MOV 58H,#50 ;产生蜂鸣器驱动脉冲延时子程序
DELA: MOV 59H,#255
DELA1: DJNZ 59H,DELA1
DJNZ 58H,DELA
RET
;*************************
DISPLAY: MOV A,55H ;显示2位十进制数子程序
MOV B,#10 ;将2位十进制数转换为非压缩BCD码再转换为LCD显示码
DIV AB
ADD A,#30H
MOV 60H,A
MOV A,B
ADD A,#30H
MOV 61H,A
MOV P1,60H
LCALL EABLE1
LCALL DELAY
MOV P1,61H
LCALL EABLE1
LCALL DELAY
RET
;*****************************
DISPLAY1: MOV P1,#20H ;第1位为空,第2位为数值的显示子程序
LCALL EABLE1
LCALL DELAY
MOV A,B
ADD A,#30H
MOV P1,A
LCALL EABLE1
LCALL DELAY
RET
;****************************
DISPLAY2: MOV A,R0 ;显示字符串子程序
PUSH ACC
MOV R0,#0
AGAIN1: MOV A,R0
MOVC A,@A+DPTR
JZ NET
MOV P1,A
LCALL EABLE1
LCALL DELAY
INC R0
AJMP AGAIN1
NET: POP ACC
MOV R0,A
RET
TABLE: DB 20H,30H,3AH,30H,30H,3AH,30H,30H
STRING1: DB 53H,65H,74H,20H,74H,69H,6DH,65H,28H,32H,34H,48H,29H,00H
STRING2: DB 53H,65H,74H,20H,44H,69H,6EH,67H,73H,68H,69H,28H,32H,34H,48H,29H,00H
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -