📄 10000clock.asm
字号:
DIS_STOPW:
MOV P0,#00000001B ;清屏并光标复位
LCALL ENABLE_LCD ;调用写入命令子程序
MOV P0,#0C2H ;写入显示起始地址(第二行第三个位置)
LCALL ENABLE_LCD ;调用写入命令子程序
MOV P0,#00111010B ;写入:
LCALL WR_DATA ;调用LCD数据写入子程序
MOV P0,#0C5H ;写入显示起始地址(第二行第六个位置)
LCALL ENABLE_LCD ;调用写入命令子程序
MOV P0,#00111010B ;写入:
LCALL WR_DATA ;调用LCD数据写入子程序
MOV P0,#0C8H ;写入显示起始地址(第二行第九个位置)
LCALL ENABLE_LCD ;调用写入命令子程序
MOV P0,#00101110B ;写入.
LCALL WR_DATA ;调用LCD数据写入子程序
MOV P0,#83H ;写入显示起始地址(第一行第四个位置)
LCALL ENABLE_LCD ;调用写入命令子程序
MOV P0,#01010011B ;写入S
LCALL WR_DATA ;调用LCD数据写入子程序
MOV P0,#01010100B ;写入T
LCALL WR_DATA ;调用LCD数据写入子程序
MOV P0,#01001111B ;写入O
LCALL WR_DATA ;调用LCD数据写入子程序
MOV P0,#01010000B ;写入P
LCALL WR_DATA ;调用LCD数据写入子程序
MOV P0,#01010111B ;写入W
LCALL WR_DATA ;调用LCD数据写入子程序
MOV P0,#01000001B ;写入A
LCALL WR_DATA ;调用LCD数据写入子程序
MOV P0,#01010100B ;写入T
LCALL WR_DATA ;调用LCD数据写入子程序
MOV P0,#01000011B ;写入C
LCALL WR_DATA ;调用LCD数据写入子程序
MOV P0,#01001000B ;写入H
LCALL WR_DATA ;调用LCD数据写入子程序
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
LCALL WR_DATA ;调用LCD数据写入子程序
MOV P0,#01010101B ;写入字母U
LCALL WR_DATA ;调用LCD数据写入子程序
MOV P0,#01001110B ;写入字母N
LCALL WR_DATA ;调用LCD数据写入子程序
LJMP CONTINUE
WEK1:
CJNE A,#1,WEK2
MOV P0,#01001101B ;写入字母M
LCALL WR_DATA ;调用LCD数据写入子程序
MOV P0,#01001111B ;写入字母O
LCALL WR_DATA ;调用LCD数据写入子程序
MOV P0,#01001110B ;写入字母N
LCALL WR_DATA ;调用LCD数据写入子程序
LJMP CONTINUE
WEK2:
CJNE A,#2,WEK3
MOV P0,#01010100B ;写入字母T
LCALL WR_DATA ;调用LCD数据写入子程序
MOV P0,#01010101B ;写入字母U
LCALL WR_DATA ;调用LCD数据写入子程序
MOV P0,#01000101B ;写入字母E
LCALL WR_DATA ;调用LCD数据写入子程序
LJMP CONTINUE
WEK3:
CJNE A,#3,WEK4
MOV P0,#01010111B ;写入字母W
LCALL WR_DATA ;调用LCD数据写入子程序
MOV P0,#01000101B ;写入字母E
LCALL WR_DATA ;调用LCD数据写入子程序
MOV P0,#01000100B ;写入字母D
LCALL WR_DATA ;调用LCD数据写入子程序
LJMP CONTINUE
WEK4:
CJNE A,#4,WEK5
MOV P0,#01010100B ;写入字母T
LCALL WR_DATA ;调用LCD数据写入子程序
MOV P0,#01001000B ;写入字母H
LCALL WR_DATA ;调用LCD数据写入子程序
MOV P0,#01010101B ;写入字母U
LCALL WR_DATA ;调用LCD数据写入子程序
LJMP CONTINUE
WEK5:
CJNE A,#5,WEK6
MOV P0,#01000110B ;写入字母F
LCALL WR_DATA ;调用LCD数据写入子程序
MOV P0,#01010010B ;写入字母R
LCALL WR_DATA ;调用LCD数据写入子程序
MOV P0,#01001001B ;写入字母I
LCALL WR_DATA ;调用LCD数据写入子程序
LJMP CONTINUE
WEK6:
MOV P0,#01010011B ;写入字母S
LCALL WR_DATA ;调用LCD数据写入子程序
MOV P0,#01000001B ;写入字母A
LCALL WR_DATA ;调用LCD数据写入子程序
MOV P0,#01010100B ;写入字母T
LCALL WR_DATA ;调用LCD数据写入子程序
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 ;判断液晶模块是否忙?
SETB E ;E=1 ;显示完成,程序停车
MOV DPTR,#NUM_TAB
MOV A,C_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,#0C9H ;写入显示起始地址(第2行第10个位置)
LCALL ENABLE_LCD ;调用写入命令子程序
MOV A,C_WEK
CJNE A,#0,C_WEK1
MOV P0,#01010011B ;写入字母S
LCALL WR_DATA ;调用LCD数据写入子程序
MOV P0,#01010101B ;写入字母U
LCALL WR_DATA ;调用LCD数据写入子程序
MOV P0,#01001110B ;写入字母N
LCALL WR_DATA ;调用LCD数据写入子程序
LJMP OUT
C_WEK1:
CJNE A,#1,C_WEK2
MOV P0,#01001101B ;写入字母M
LCALL WR_DATA ;调用LCD数据写入子程序
MOV P0,#01001111B ;写入字母O
LCALL WR_DATA ;调用LCD数据写入子程序
MOV P0,#01001110B ;写入字母N
LCALL WR_DATA ;调用LCD数据写入子程序
LJMP OUT
C_WEK2:
CJNE A,#2,C_WEK3
MOV P0,#01010100B ;写入字母T
LCALL WR_DATA ;调用LCD数据写入子程序
MOV P0,#01010101B ;写入字母U
LCALL WR_DATA ;调用LCD数据写入子程序
MOV P0,#01000101B ;写入字母E
LCALL WR_DATA ;调用LCD数据写入子程序
LJMP OUT
C_WEK3:
CJNE A,#3,C_WEK4
MOV P0,#01010111B ;写入字母W
LCALL WR_DATA ;调用LCD数据写入子程序
LCALL WR_DATA ;调用LCD数据写入子程序
MOV P0,#01000100B ;写入字母D
LCALL WR_DATA ;调用LCD数据写入子程序
C_WEK4:
CJNE A,#4,C_WEK5
MOV P0,#01010100B ;写入字母T
LCALL WR_DATA ;调用LCD数据写入子程序
MOV P0,#01001000B ;写入字母H
LCALL WR_DATA ;调用LCD数据写入子程序
MOV P0,#01010101B ;写入字母U
LCALL WR_DATA ;调用LCD数据写入子程序
LJMP OUT
C_WEK5:
CJNE A,#5,C_WEK6
MOV P0,#01000110B ;写入字母F
LCALL WR_DATA ;调用LCD数据写入子程序
MOV P0,#01010010B ;写入字母R
LCALL WR_DATA ;调用LCD数据写入子程序
MOV P0,#01001001B ;写入字母I
LCALL WR_DATA ;调用LCD数据写入子程序
LJMP OUT
C_WEK6:
CJNE A,#6,C_WEK7
MOV P0,#01010011B ;写入字母S
LCALL WR_DATA ;调用LCD数据写入子程序
MOV P0,#01000001B ;写入字母A
LCALL WR_DATA ;调用LCD数据写入子程序
MOV P0,#01010100B ;写入字母T
LCALL WR_DATA ;调用LCD数据写入子程序
LJMP OUT
C_WEK7:
MOV P0,#01000001B ;写入字母A
LCALL WR_DATA ;调用LCD数据写入子程序
MOV P0,#01001100B ;写入字母L
LCALL WR_DATA ;调用LCD数据写入子程序
MOV P0,#01001100B ;写入字母L
LCALL WR_DATA ;调用LCD数据写入子程序
OUT:
MOV P0,#8CH ;写入显示起始地址(第1行第12个位置)
LCALL ENABLE_LCD ;调用写入命令子程序
JNB ALARM,DIS_OFF ;闹钟标志有效显示ON,否则显示OFF
MOV P0,#01001110B ;写入N
LCALL WR_DATA ;调用LCD数据写入子程序
MOV P0,#00100000B ;写入空值
LCALL WR_DATA ;调用LCD数据写入子程序
LJMP OUT2
DIS_OFF:
MOV P0,#01000110B ;写入F
LCALL WR_DATA ;调用LCD数据写入子程序
MOV P0,#01000110B ;写入F
LCALL WR_DATA ;调用LCD数据写入子程序
OUT2:
RET
S_DISPLAY:
MOV P0,#0C9H ;写入显示起始地址(第2行第10个位置)
LCALL ENABLE_LCD ;调用写入命令子程序
MOV DPTR,#NUM_TAB
MOV A,S_MS1
MOVC A,@A+DPTR
MOV P0,A ;写入毫秒百位
LCALL WR_DATA ;调用LCD数据写入子程序
MOV DPTR,#NUM_TAB
MOV A,S_MS0
MOVC A,@A+DPTR
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -