📄 液晶timeend555555xin.txt
字号:
RS EQU p0.2
RW EQU P0.1
E EQU P0.0
DAT EQU P3.7
N0_jzh EQU 1EH ;键值存放单元
N0_shb EQU 1FH ;遥控器识别码
X1_n1 EQU 2AH ;连续六个单元,(可位操作)作
X1_n2 EQU 2BH ;遥控输入数据缓冲区
X1_n3 EQU 2CH
X1_n4 EQU 2DH
X1_n5 EQU 2EH
X1_n6 EQU 2FH
Ch_num EQU 26H ;缓冲区一个字节有几位
Da_num EQU 25H ;数据缓冲区字节数
Mo_num EQU 27H ;最多移位次数
U0_x1 EQU 40H ;数据临时存放字节,存满8位后送2AH~2FH
N0_JZH1 EQU 41H;存放键值时使用,做临时存放单元
JHM EQU 42H
TIMER1 EQU 43H
JZHMA EQU 44H
JHM_CLC EQU 45H
OPEN_CLC EQU 46H
START_SR EQU 47H
YEAR EQU 50H
MON1 EQU 51H
MON2 EQU 52H
DAY1 EQU 53H
DAY2 EQU 54H
HOUR1 EQU 55H
HOUR2 EQU 56H
MIN1 EQU 57H
MIN2 EQU 58H
SEC1 EQU 59H
SEC2 EQU 5AH
TIMER0 EQU 5BH
DAY EQU 5CH
MON EQU 5DH
HOUR11 EQU 5EH
HOUR22 EQU 5FH
HOUR1_CLC EQU 30H
HOUR2_CLC EQU 31H
MIN1_CLC EQU 32H
MIN2_CLC EQU 33H
MIN1_SR EQU 34H
MIN2_SR EQU 35H
SEC1_SR EQU 36H
SEC2_SR EQU 37H
MSEC1_SR EQU 38H
MSEC2_SR EQU 39H
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP INTT0
ORG 0013H
LJMP INT_X1
ORG 0100H
MAIN: MOV SP,#60H
LCALL INIT
LCALL JUDGE
MOV P1,#01H
LCALL ENABLE
MOV P1,#38H
LCALL ENABLE
MOV P1,#0CH
LCALL ENABLE
MOV P1,#06H
LCALL ENABLE
LCALL DISP_INIT
LCALL DISPTIME
LCALL DSWD
LCALL DSWD
LCALL DISPTEMP
START: MOV A,TIMER0
CJNE A,#80,START_1
LCALL DISPTIME
LCALL DSWD
LCALL DISPTEMP
START_1: LCALL CHANGETIME
LCALL TWE_JINZHI
LCALL CLC
LCALL SECRUN
AJMP START
;---------------------------------------------------------------------------------------
DISP: MOV R1,#16
LOOP: MOV A,#00H
MOVC A,@A+DPTR
LCALL DISP1
INC DPTR
DJNZ R1,LOOP
RET
DISP1: MOV P1,A
SETB RS
CLR RW
CLR E
LCALL ENABLE
SETB E
RET
DISP3: SETB RS
CLR RW
CLR E
LCALL ENABLE
SETB E
RET
DISPTIME: LCALL TWE_TF
MOV R1,#11
MOV R0,#50H
MOV DPTR ,#TABLE4
LOOP1: MOV A,#00H
MOVC A,@A+DPTR
MOV P1,A
LCALL ENABLE
INC DPTR
MOV A,@R0
ADD A,#30H
LCALL DISP1
INC R0
DJNZ R1,LOOP1
LCALL DISP_HOUR
MOV P1,#0CH
LCALL ENABLE
RET
DISPTEMP: LCALL JUDGE
MOV P1,#0CAH
LCALL ENABLE
MOV A,#30H
ADD A,R7
LCALL DISP1
MOV P1,#0CBH
LCALL ENABLE
MOV A,#30H
ADD A,R6
LCALL DISP1
MOV P1,#0CDH
LCALL ENABLE
MOV A,#30H
ADD A,R5
LCALL DISP1
MOV P1,#0CEH
LCALL ENABLE
MOV A,#0DFH
LCALL DISP1
RET
TWE_TF: MOV A,JZHMA
CJNE A,#0FFH,TWE_TF_3
MOV A,HOUR1
SWAP A
ORL A,HOUR2
CJNE A,#12H,TWE_TF_1
TWE_TF_1: JC TWE_TF_2
CJNE A,#12H,TWE_TF_4
AJMP TWE_TF_2
TWE_TF_4: ADD A,#88H
DA A
MOV R0,A
ANL A,#0FH
MOV HOUR22,A
MOV A,R0
SWAP A
ANL A,#0FH
MOV HOUR11,A
LCALL DISP_PM
AJMP TWE_TF_OUT
TWE_TF_2: MOV HOUR11,HOUR1
MOV HOUR22,HOUR2
LCALL DISP_AM
AJMP TWE_TF_OUT
TWE_TF_3: LCALL DISP_APCLR
TWE_TF_OUT: RET
DISP_HOUR: MOV A,JZHMA
CJNE A,#0FFH,DISP_HOUR_OUT
MOV P1,#0C0H
LCALL ENABLE
MOV A,#30H
ADD A,HOUR11
LCALL DISP1
MOV P1,#0C1H
LCALL ENABLE
MOV A,#30H
ADD A,HOUR22
LCALL DISP1
DISP_HOUR_OUT: RET
DISP_AM: MOV P1,#0C8H
LCALL ENABLE
MOV A,#61H
LCALL DISP1
MOV P1,#0C9H
LCALL ENABLE
MOV A,#6DH
LCALL DISP1
RET
DISP_PM: MOV P1,#0C8H
LCALL ENABLE
MOV A,#70H
LCALL DISP1
MOV P1,#0C9H
LCALL ENABLE
MOV A,#6DH
LCALL DISP1
RET
DISP_APCLR: MOV P1,#0C8H
LCALL ENABLE
MOV A,#20H
LCALL DISP1
MOV P1,#0C9H
LCALL ENABLE
MOV A,#20H
LCALL DISP1
RET
DISP_INIT: MOV P1,#80H
LCALL ENABLE
MOV DPTR,#TABLE2
LCALL DISP
MOV P1,#0C0H
LCALL ENABLE
MOV DPTR ,#TABLE3
LCALL DISP
RET
ENABLE: CLR RW
CLR RS
CLR E
ACALL JUDGE
SETB E
RET
JUDGE: MOV P1,#0FFH
CLR RS
SETB RW
CLR E
NOP
SETB E
JB P1.7,JUDGE
RET
;--------------------------------------------------------------------------------------------
INIT: MOV YEAR,#7
MOV MON,#2
MOV MON1,#0
MOV MON2,#2
MOV DAY,#28
MOV DAY1,#2
MOV DAY2,#8
MOV HOUR1,#2
MOV HOUR2,#3
MOV HOUR11,#1
MOV HOUR22,#1
MOV MIN1,#5
MOV MIN2,#9
MOV SEC1,#5
MOV SEC2,#0
MOV HOUR1_CLC,#0
MOV HOUR2_CLC,#0
MOV MIN1_CLC,#0
MOV MIN2_CLC,#0
MOV MIN1_SR ,#0
MOV MIN2_SR ,#0
MOV SEC1_SR ,#0
MOV SEC2_SR ,#0
MOV MSEC1_SR ,#0
MOV MSEC2_SR ,#0
MOV START_SR, #0
MOV TIMER0,#100
MOV TIMER1,#0FFH
MOV OPEN_CLC,#1
MOV JHM_CLC,#0
MOV JZHMA,#00H
MOV PSW,#00
MOV TMOD,#11H
MOV TL0,#0F0H
MOV TH0,#0D8H
MOV IP,#04H ;中断优先级
CLR TR1 ;关T1
MOV TL1,#00H ;T1时间常数送初值
MOV TH1,#00H
MOV 18H,#2AH ;在INT1中断服务程序中使用工#3寄存器,R0=2AH=======================
MOV Da_num,#06H ;输入数据取6个字节
MOV Ch_num,#08H ;每个字节8位
MOV N0_jzh,#0FFH ;键值码先送FFH,以免在未送数时错当有数
LCALL WriteCGRAM
SETB EA
SETB ET0
SETB TR0
SETB EX1 ;开中断1,INT1
SETB IT1 ;INT1下降沿触发
RET
CheckBusy:PUSH ACC
LOOP12: CLR RS ;选择指令寄存器
SETB RW ;选择读模式
MOV P1,#0FFH ;P0口写1,准备写入
SETB E ;使能LCD
MOV A,P1 ;将LCD的D0-D7由P0口送A,以便查第7位BF是否为0
CLR E ;禁止LCD
JB ACC.7,LOOP12 ;判断由LCD读入第7位BF是否为1,若为1表示LCD忙
ACALL DELAY2MS ;调延时子程序
POP ACC
RET
; 写入IR寄存器子程序
WriteIR:PUSH ACC
ACALL CheckBusy ;调检查忙子程序
CLR E ;禁止LCD
CLR RS ;选择指令寄存器
CLR RW ;选择写模式
SETB E ;使能LCD
MOV P1,A ;将控制指令写入LCD
SETB E ;使能LCD
CLR E ;禁止LCD
POP ACC
RET
; 写入DR寄存器子程序
WriteDDR:PUSH ACC
ACALL CheckBusy ;调检查忙子程序
CLR E ;禁止LCD
SETB RS ;选择数据寄存器
CLR RW ;选择写模式
SETB E ;使能LCD
MOV P1,A ;将数据写入LCD
SETB E ;使能LCD
CLR E ;禁止LCD
POP ACC
RET
;以下是自定义字体程序
WriteCGRAM : PUSH ACC
MOV A,#01000000B ;设置CGRAM的地址
ACALL WriteIR
MOV R0,#24
MOV DPTR,#CGRAMTAB ;指向FONTTAB表首
LOOP13: CLR A
MOVC A,@A+DPTR
ACALL WriteDDR ;将自定义字符存入CGRAM中
INC DPTR
DJNZ R0,LOOP13
POP ACC
RET
;以下是2.5ms延时子程序
DELAY2MS:MOV R5,#5
D2: MOV R4,#248
D1: DJNZ R4,D1
DJNZ R5,D2
RET
CGRAMTAB:
DB 08H,0FH,12H,0FH,0AH,1FH,02H,02H ;年的字模
DB 0FH,09H,0FH,09H,0FH,09H,13H,00H ;月的字模
DB 1FH,11H,11H,1FH,11H,11H,1FH,00H ;日的字模
;-------------------------------------------------------------------------------------------------------
INTT0: PUSH PSW
PUSH ACC
ORL PSW,#08H
MOV TL0,#0F0H
MOV TH0,#0D8H
DJNZ TIMER0,INTT00
MOV TIMER0,#100
LCALL ADSEC2
LCALL CLC_RUNNING
INTT00:MOV A,START_SR
CJNE A,#1,INTOUT
LCALL SR_ADMSEC2
INTOUT:POP ACC
POP PSW
RETI
ADSEC2: MOV A,SEC2
CJNE A,#9,AD1
MOV SEC2,#0
ACALL ADSEC1
AJMP OUT1
AD1: INC SEC2
OUT1: RET
ADSEC1: MOV A,SEC1
CJNE A,#5,AD2
MOV SEC1,#0
ACALL ADMIN2
AJMP OUT2
AD2: INC SEC1
OUT2: RET
ADMIN2: MOV A,MIN2
CJNE A,#9,AD3
MOV MIN2,#0
ACALL ADMIN1
AJMP OUT3
AD3: INC MIN2
OUT3: RET
ADMIN1: MOV A,MIN1
CJNE A,#5,AD4
MOV MIN1,#0
ACALL ADHOUR2
AJMP OUT4
AD4: INC MIN1
OUT4: RET
ADHOUR2: MOV A,HOUR1
CJNE A,#2,ADHOUR20
MOV A,HOUR2
CJNE A,#3,AD5
MOV HOUR1,#0
MOV HOUR2,#0
ACALL ADDAY
AJMP OUT5
ADHOUR20: MOV A,HOUR2
CJNE A,#9,AD5
MOV HOUR2,#0
INC HOUR1
AJMP OUT5
AD5: INC HOUR2
OUT5: RET
ADDAY: MOV A,MON
CJNE A,#2,AD6
ACALL RUNNIAN
AJMP OUT6
AD6: MOV A,MON
DEC A
MOV DPTR,#TABLE1
MOVC A,@A+DPTR
CJNE A,DAY,AD7
MOV DAY,#0
ACALL ADMON
AJMP OUT6
AD7: INC DAY
OUT6: MOV A,DAY
MOV B,#10
DIV AB
MOV DAY1,A
MOV DAY2,B
RET
ADMON: MOV A,MON
CJNE A ,#12,AD8
MOV MON,#0
ACALL ADYEAR
AJMP OUT7
AD8: INC MON
OUT7: MOV A,MON
MOV B,#10
DIV AB
MOV MON1,A
MOV MON2,B
RET
ADYEAR: MOV A,YEAR
CJNE A,#9,AD9
MOV YEAR ,#7
AJMP OUT8
AD9: INC YEAR
OUT8: RET
RUNNIAN: MOV A,YEAR
CJNE A,#8,RUN
MOV A,DAY
CJNE A,#29,AD10
MOV DAY,#0
ACALL ADMON
AJMP OUT9
RUN: MOV A,DAY
CJNE A,#28,AD10
MOV DAY,#0
ACALL ADMON
AJMP OUT9
AD10: INC DAY
OUT9: RET
TABLE1:DB 31,28,31,30,31,30,31,31,30,31,30,31
TABLE2:DB 32H,30H,30H,37H,00H," ",32H,01H,32H,38H,02H," "
TABLE3:DB " : : . C"
TABLE4:DB 83H,85H,86H,88H,89H,0C0H,0C1H,0C3H,0C4H,0C6H,0C7H
TABLE5:DB 83H,86H,89H,0C1H,0C4H
;--------------------------------------------------------------------------------------------------------------
INT_X1: PUSH ACC
PUSH PSW
ORL PSW,#18H ;取3#区寄存器
CLR TR1 ;T1停止计数
MOV R2,TH1 ;取T1计数次数
MOV R3,TL1
MOV R4,#03H ;0320H~0400H为数据窗口0
MOV R5,#80H ;窗口0的下限
LCALL SUB0 ;计数值小于320H吗?
JC X0_OUT ;<320H,作废
MOV R4,#04H ;窗口0的上限
MOV R5,#0B0H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -