📄 clock-mine.asm
字号:
CLR E ;E=0 ;执行显示命令
LCALL DELAY_LCD ;判断液晶模块是否忙?
SETB E ;E=1 ;显示完成,程序停车
MOV P0,#01001101B ;写入M
SETB RS ;RS=1
CLR RW ;RW=0 ;准备写入数据
CLR E ;E=0 ;执行显示命令
LCALL DELAY_LCD ;判断液晶模块是否忙?
SETB E ;E=1 ;显示完成,程序停车
MOV P0,#00100000B ;写入空值
SETB RS ;RS=1
CLR RW ;RW=0 ;准备写入数据
CLR E ;E=0 ;执行显示命令
LCALL DELAY_LCD ;判断液晶模块是否忙?
SETB E ;E=1 ;显示完成,程序停车
MOV P0,#01001001B ;写入I
SETB RS ;RS=1
CLR RW ;RW=0 ;准备写入数据
CLR E ;E=0 ;执行显示命令
LCALL DELAY_LCD ;判断液晶模块是否忙?
SETB E ;E=1 ;显示完成,程序停车
MOV P0,#01010011B ;写入S
SETB RS ;RS=1
CLR RW ;RW=0 ;准备写入数据
CLR E ;E=0 ;执行显示命令
LCALL DELAY_LCD ;判断液晶模块是否忙?
SETB E ;E=1 ;显示完成,程序停车
MOV P0,#00100000B ;写入空值
SETB RS ;RS=1
CLR RW ;RW=0 ;准备写入数据
CLR E ;E=0 ;执行显示命令
LCALL DELAY_LCD ;判断液晶模块是否忙?
SETB E ;E=1 ;显示完成,程序停车
MOV P0,#01001111B ;写入O
SETB RS ;RS=1
CLR RW ;RW=0 ;准备写入数据
CLR E ;E=0 ;执行显示命令
LCALL DELAY_LCD ;判断液晶模块是否忙?
SETB E ;E=1 ;显示完成,程序停车
RET
;显示子程序
DISPLAY:
MOV P0,#0C6H ;写入显示起始地址(第2行第7个位置)
LCALL ENABLE_LCD ;调用写入命令子程序
MOV DPTR,#NUM_TAB
MOV A,SEC1
MOVC A,@A+DPTR
MOV P0,A ;写入秒十位
SETB RS ;RS=1
CLR RW ;RW=0 ;准备写入数据
CLR E ;E=0 ;执行显示命令
LCALL DELAY_LCD ;判断液晶模块是否忙?
SETB E ;E=1 ;显示完成,程序停车
MOV DPTR,#NUM_TAB
MOV A,SEC0
MOVC A,@A+DPTR
MOV P0,A ;写入秒个位
SETB RS ;RS=1
CLR RW ;RW=0 ;准备写入数据
CLR E ;E=0 ;执行显示命令
LCALL DELAY_LCD ;判断液晶模块是否忙?
SETB E ;E=1 ;显示完成,程序停车
MOV P0,#0C3H ;写入显示起始地址(第2行第4个位置)
LCALL ENABLE_LCD ;调用写入命令子程序
MOV DPTR,#NUM_TAB
MOV A,MIN1
MOVC A,@A+DPTR
MOV P0,A ;写入分十位
SETB RS ;RS=1
CLR RW ;RW=0 ;准备写入数据
CLR E ;E=0 ;执行显示命令
LCALL DELAY_LCD ;判断液晶模块是否忙?
SETB E ;E=1 ;显示完成,程序停车
MOV DPTR,#NUM_TAB
MOV A,MIN0
MOVC A,@A+DPTR
MOV P0,A ;写入分个位
SETB RS ;RS=1
CLR RW ;RW=0 ;准备写入数据
CLR E ;E=0 ;执行显示命令
LCALL DELAY_LCD ;判断液晶模块是否忙?
SETB E ;E=1 ;显示完成,程序停车
MOV P0,#0C0H ;写入显示起始地址(第2行第1个位置)
LCALL ENABLE_LCD ;调用写入命令子程序
MOV DPTR,#NUM_TAB
MOV A,HOU1
MOVC A,@A+DPTR
MOV P0,A ;写入时十位
SETB RS ;RS=1
CLR RW ;RW=0 ;准备写入数据
CLR E ;E=0 ;执行显示命令
LCALL DELAY_LCD ;判断液晶模块是否忙?
SETB E ;E=1 ;显示完成,程序停车
MOV DPTR,#NUM_TAB
MOV A,HOU0
MOVC A,@A+DPTR
MOV P0,A ;写入时个位
SETB RS ;RS=1
CLR RW ;RW=0 ;准备写入数据
CLR E ;E=0 ;执行显示命令
LCALL DELAY_LCD ;判断液晶模块是否忙?
SETB E ;E=1 ;显示完成,程序停车
MOV P0,#8BH ;写入显示起始地址(第1行第12个位置)
LCALL ENABLE_LCD ;调用写入命令子程序
MOV A,WEK
CJNE A,#0,WEK1
MOV P0,#01010011B ;写入字母S
SETB RS ;RS=1
CLR RW ;RW=0 ;准备写入数据
CLR E ;E=0 ;执行显示命令
LCALL DELAY_LCD ;判断液晶模块是否忙?
SETB E ;E=1 ;显示完成,程序停车
MOV P0,#01010101B ;写入字母U
SETB RS ;RS=1
CLR RW ;RW=0 ;准备写入数据
CLR E ;E=0 ;执行显示命令
LCALL DELAY_LCD ;判断液晶模块是否忙?
SETB E ;E=1 ;显示完成,程序停车
MOV P0,#01001110B ;写入字母N
SETB RS ;RS=1
CLR RW ;RW=0 ;准备写入数据
CLR E ;E=0 ;执行显示命令
LCALL DELAY_LCD ;判断液晶模块是否忙?
SETB E ;E=1 ;显示完成,程序停车
LJMP CONTINUE
WEK1:
CJNE A,#1,WEK2
MOV P0,#01001101B ;写入字母M
SETB RS ;RS=1
CLR RW ;RW=0 ;准备写入数据
CLR E ;E=0 ;执行显示命令
LCALL DELAY_LCD ;判断液晶模块是否忙?
SETB E ;E=1 ;显示完成,程序停车
MOV P0,#01001111B ;写入字母O
SETB RS ;RS=1
CLR RW ;RW=0 ;准备写入数据
CLR E ;E=0 ;执行显示命令
LCALL DELAY_LCD ;判断液晶模块是否忙?
SETB E ;E=1 ;显示完成,程序停车
MOV P0,#01001110B ;写入字母N
SETB RS ;RS=1
CLR RW ;RW=0 ;准备写入数据
CLR E ;E=0 ;执行显示命令
LCALL DELAY_LCD ;判断液晶模块是否忙?
SETB E ;E=1 ;显示完成,程序停车
LJMP CONTINUE
WEK2:
CJNE A,#2,WEK3
MOV P0,#01010100B ;写入字母T
SETB RS ;RS=1
CLR RW ;RW=0 ;准备写入数据
CLR E ;E=0 ;执行显示命令
LCALL DELAY_LCD ;判断液晶模块是否忙?
SETB E ;E=1 ;显示完成,程序停车
MOV P0,#01010101B ;写入字母U
SETB RS ;RS=1
CLR RW ;RW=0 ;准备写入数据
CLR E ;E=0 ;执行显示命令
LCALL DELAY_LCD ;判断液晶模块是否忙?
SETB E ;E=1 ;显示完成,程序停车
MOV P0,#01000101B ;写入字母E
SETB RS ;RS=1
CLR RW ;RW=0 ;准备写入数据
CLR E ;E=0 ;执行显示命令
LCALL DELAY_LCD ;判断液晶模块是否忙?
SETB E ;E=1 ;显示完成,程序停车
LJMP CONTINUE
WEK3:
CJNE A,#3,WEK4
MOV P0,#01010111B ;写入字母W
SETB RS ;RS=1
CLR RW ;RW=0 ;准备写入数据
CLR E ;E=0 ;执行显示命令
LCALL DELAY_LCD ;判断液晶模块是否忙?
SETB E ;E=1 ;显示完成,程序停车
MOV P0,#01000101B ;写入字母E
SETB RS ;RS=1
CLR RW ;RW=0 ;准备写入数据
CLR E ;E=0 ;执行显示命令
LCALL DELAY_LCD ;判断液晶模块是否忙?
SETB E ;E=1 ;显示完成,程序停车
MOV P0,#01000100B ;写入字母D
SETB RS ;RS=1
CLR RW ;RW=0 ;准备写入数据
CLR E ;E=0 ;执行显示命令
LCALL DELAY_LCD ;判断液晶模块是否忙?
SETB E ;E=1 ;显示完成,程序停车
LJMP CONTINUE
WEK4:
CJNE A,#4,WEK5
MOV P0,#01010100B ;写入字母T
SETB RS ;RS=1
CLR RW ;RW=0 ;准备写入数据
CLR E ;E=0 ;执行显示命令
LCALL DELAY_LCD ;判断液晶模块是否忙?
SETB E ;E=1 ;显示完成,程序停车
MOV P0,#01001000B ;写入字母H
SETB RS ;RS=1
CLR RW ;RW=0 ;准备写入数据
CLR E ;E=0 ;执行显示命令
LCALL DELAY_LCD ;判断液晶模块是否忙?
SETB E ;E=1 ;显示完成,程序停车
MOV P0,#01010101B ;写入字母U
SETB RS ;RS=1
CLR RW ;RW=0 ;准备写入数据
CLR E ;E=0 ;执行显示命令
LCALL DELAY_LCD ;判断液晶模块是否忙?
SETB E ;E=1 ;显示完成,程序停车
LJMP CONTINUE
WEK5:
CJNE A,#5,WEK6
MOV P0,#01000110B ;写入字母F
SETB RS ;RS=1
CLR RW ;RW=0 ;准备写入数据
CLR E ;E=0 ;执行显示命令
LCALL DELAY_LCD ;判断液晶模块是否忙?
SETB E ;E=1 ;显示完成,程序停车
MOV P0,#01010010B ;写入字母R
SETB RS ;RS=1
CLR RW ;RW=0 ;准备写入数据
CLR E ;E=0 ;执行显示命令
LCALL DELAY_LCD ;判断液晶模块是否忙?
SETB E ;E=1 ;显示完成,程序停车
MOV P0,#01001001B ;写入字母I
SETB RS ;RS=1
CLR RW ;RW=0 ;准备写入数据
CLR E ;E=0 ;执行显示命令
LCALL DELAY_LCD ;判断液晶模块是否忙?
SETB E ;E=1 ;显示完成,程序停车
LJMP CONTINUE
WEK6:
MOV P0,#01010011B ;写入字母S
SETB RS ;RS=1
CLR RW ;RW=0 ;准备写入数据
CLR E ;E=0 ;执行显示命令
LCALL DELAY_LCD ;判断液晶模块是否忙?
SETB E ;E=1 ;显示完成,程序停车
MOV P0,#01000001B ;写入字母A
SETB RS ;RS=1
CLR RW ;RW=0 ;准备写入数据
CLR E ;E=0 ;执行显示命令
LCALL DELAY_LCD ;判断液晶模块是否忙?
SETB E ;E=1 ;显示完成,程序停车
MOV P0,#01010100B ;写入字母T
SETB RS ;RS=1
CLR RW ;RW=0 ;准备写入数据
CLR E ;E=0 ;执行显示命令
LCALL DELAY_LCD ;判断液晶模块是否忙?
SETB E ;E=1 ;显示完成,程序停车
CONTINUE:
MOV P0,#88H ;写入显示起始地址(第1行第9个位置)
LCALL ENABLE_LCD ;调用写入命令子程序
MOV DPTR,#NUM_TAB
MOV A,DAY1
MOVC A,@A+DPTR
MOV P0,A ;写入日十位
SETB RS ;RS=1
CLR RW ;RW=0 ;准备写入数据
CLR E ;E=0 ;执行显示命令
LCALL DELAY_LCD ;判断液晶模块是否忙?
SETB E ;E=1 ;显示完成,程序停车
MOV DPTR,#NUM_TAB
MOV A,DAY0
MOVC A,@A+DPTR
MOV P0,A ;写入日个位
SETB RS ;RS=1
CLR RW ;RW=0 ;准备写入数据
CLR E ;E=0 ;执行显示命令
LCALL DELAY_LCD ;判断液晶模块是否忙?
SETB E ;E=1 ;显示完成,程序停车
MOV P0,#85H ;写入显示起始地址(第1行第6个位置)
LCALL ENABLE_LCD ;调用写入命令子程序
MOV DPTR,#NUM_TAB
MOV A,MON1
MOVC A,@A+DPTR
MOV P0,A ;写入月十位
SETB RS ;RS=1
CLR RW ;RW=0 ;准备写入数据
CLR E ;E=0 ;执行显示命令
LCALL DELAY_LCD ;判断液晶模块是否忙?
SETB E ;E=1 ;显示完成,程序停车
MOV DPTR,#NUM_TAB
MOV A,MON0
MOVC A,@A+DPTR
MOV P0,A ;写入月个位
SETB RS ;RS=1
CLR RW ;RW=0 ;准备写入数据
CLR E ;E=0 ;执行显示命令
LCALL DELAY_LCD ;判断液晶模块是否忙?
SETB E ;E=1 ;显示完成,程序停车
MOV P0,#82H ;写入显示起始地址(第1行第3个位置)
LCALL ENABLE_LCD ;调用写入命令子程序
MOV DPTR,#NUM_TAB
MOV A,YER1
MOVC A,@A+DPTR
MOV P0,A ;写入年十位
SETB RS ;RS=1
CLR RW ;RW=0 ;准备写入数据
CLR E ;E=0 ;执行显示命令
LCALL DELAY_LCD ;判断液晶模块是否忙?
SETB E ;E=1 ;显示完成,程序停车
MOV DPTR,#NUM_TAB
MOV A,YER0
MOVC A,@A+DPTR
MOV P0,A ;写入年个位
SETB RS ;RS=1
CLR RW ;RW=0 ;准备写入数据
CLR E ;E=0 ;执行显示命令
LCALL DELAY_LCD ;判断液晶模块是否忙?
SETB E ;E=1 ;显示完成,程序停车
RET
C_DISPLAY:
MOV P0,#0C3H ;写入显示起始地址(第2行第4个位置)
LCALL ENABLE_LCD ;调用写入命令子程序
MOV DPTR,#NUM_TAB
MOV A,C_MIN1
MOVC A,@A+DPTR
MOV P0,A ;写入分十位
SETB RS ;RS=1
CLR RW ;RW=0 ;准备写入数据
CLR E ;E=0 ;执行显示命令
LCALL DELAY_LCD ;判断液晶模块是否忙?
SETB E ;E=1 ;显示完成,程序停车
MOV DPTR,#NUM_TAB
MOV A,C_MIN0
MOVC A,@A+DPTR
MOV P0,A ;写入分个位
SETB RS ;RS=1
CLR RW ;RW=0 ;准备写入数据
CLR E ;E=0 ;执行显示命令
LCALL DELAY_LCD ;判断液晶模块是否忙?
SETB E ;E=1 ;显示完成,程序停车
MOV P0,#0C0H ;写入显示起始地址(第2行第1个位置)
LCALL ENABLE_LCD ;调用写入命令子程序
MOV DPTR,#NUM_TAB
MOV A,C_HOU1
MOVC A,@A+DPTR
MOV P0,A ;写入时十位
SETB RS ;RS=1
CLR RW ;RW=0 ;准备写入数据
CLR E ;E=0 ;执行显示命令
LCALL DELAY_LCD ;判断液晶模块是否忙?
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -