⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 时钟备份.txt

📁 protuse作的1602液晶显示器
💻 TXT
字号:
;连线图: *LCM---8031* *LCM---8031* *LCM------------8031*
;        *DB0---P0.0* *DB4---P0.4* *RS-------------P2.4*
;        *DB1---P0.1* *DB5---P0.5* *RW-------------P2.5*
;        *DB2---P0.2* *DB6---P0.6* *E--NAND GATE---P2.2* 
RSADDR  EQU     1000H
RWADDR  EQU     2000H
CSADDR  EQU     0400H
num	equ     31h;定义各变量地址
year1	equ     32h
year0	equ	33h
munth1	equ     34h
munth0	equ	35h
day1	equ	36h
day0	equ	37h
WEEK	EQU	38H
hour1   equ     39h
hour0	equ     3ah
min1	equ	3bh
min0	equ	3ch
sec1	equ     3dh
sec0    equ     3eh
hh	equ	3fh;判别选择键按的次数


	ORG     0000H
	JMP     START
	ORG 	000BH
	LJMP 	TIMER01
	ORG     0030H
START:  MOV     SP,#60H
	MOV     R0,#30H
	mov     R7,#16

LOOP5:	MOV     @R0,#00H;各地址指针给0值
	INC     R0
	DJNZ    R7,LOOP5 

MAIN:	MOV TH0,#0B0H
	MOV TL0,#3CH
	SETB EA
	SETB ET0
	SETB TR0
	mov 42h,#8;星期变量
	mov 43h,#11;秒个位变量
	mov 44h,#11;秒十位变量
	mov 45h,#11;分个位变量
	mov 46h,#11;分十位变量
	mov 47h,#11;时个位变量
	mov 48h,#11;时十位变量
	mov 49h,#11;日个位变量
	mov 4ah,#11;日十位变量
	mov 4bh,#11;月个位
	mov 4ch,#11;月十位
	mov 4dh,#11;年个位
	mov 4eh,#11;年十位
        CALL    LCDRESET

disp:   MOV  A,#10000100B;显示程序
	CALL LCDWC
	MOV  DPTR,#TAB
	MOV A,hour1
	MOVC A,@A+DPTR
	CALL LCDWD
	MOV  DPTR,#TAB
	MOV A,hour0
	MOVC A,@A+DPTR
	CALL LCDWD
	MOV A,#3AH
	CALL LCDWD
	MOV  DPTR,#TAB
	MOV A,min1
	MOVC A,@A+DPTR
	CALL LCDWD
	mov dptr,#tab
	MOV A,min0
	MOVC A,@A+DPTR
	CALL LCDWD
	MOV A,#3AH
	CALL LCDWD
	MOV  DPTR,#TAB
	MOV A,sec1
	MOVC A,@A+DPTR
	CALL LCDWD
	MOV  DPTR,#TAB
	MOV A,sec0
	MOVC A,@A+DPTR
	CALL LCDWD
	MOV A,#11000000B
	CALL LCDWC
	MOV A,#'2'
	CALL LCDWD
	MOV A,#'0'
	CALL LCDWD
	MOV DPTR,#TAB
	MOV A,YEAR1
	MOVC A,@A+DPTR
	CALL LCDWD
	MOV DPTR,#TAB
	MOV A,YEAR0
	MOVC A,@A+DPTR
	CALL LCDWD
	MOV A,#'-'
	CALL LCDWD
	MOV DPTR,#TAB
	MOV A,MUNTH1
	MOVC A,@A+DPTR
	CALL LCDWD
	MOV DPTR,#TAB
	MOV A,MUNTH0
	MOVC A,@A+DPTR
	CALL LCDWD
	MOV A,#'-'
	CALL LCDWD
	MOV  DPTR,#TAB
	MOV A,day1
	MOVC A,@A+DPTR
	CALL LCDWD
	MOV  DPTR,#TAB
	MOV A,day0
	MOVC A,@A+DPTR
	CALL LCDWD
	mov a,#' '
	CALL LCDWD
	mov a,#' '
	CALL LCDWD
	MOV DPTR,#WEEK1
	MOV A,WEEK
	MOVC A,@A+DPTR
	CALL LCDWD
	MOV DPTR,#WEEK2
	MOV A,WEEK
	MOVC A,@A+DPTR
	CALL LCDWD
	MOV DPTR,#WEEK3
	MOV A,WEEK
	MOVC A,@A+DPTR
	CALL LCDWD

KEY:   JB P3.2,key0;调整程序
	CALL DELAY5MS
	call delay5ms
        JB P3.2,key0
	clr tr0
	INC hh
	MOV A,hh
	CJNE A,#8,keyover
	MOV hh,#00H
	mov a,4dh
	cjne a,#11,yearr
	ljmp keyover
yearr:  mov year0,4dh
	mov year1,4eh
	mov 4dh,#11
	mov 4eh,#11
keyover:JB P3.2,key0
	lJMP keyover

;秒钟调整程序
key0:	mov a,hh;秒钟加1
	cjne a,#1,key1ljmp
	mov a,43h
	xch a,sec0
	mov 43h,a
	mov a,44h
	xch a,sec1
	mov 44h,a
	jb p3.3,key00
	call DELAY5MS
        JB P3.3,key00
	clr tr0
	mov a,43h
	cjne a,#11,e3
e4:	INC sec0
	MOV A,sec0
	CJNE A,#10,key0over
	MOV sec0,#00H
	inc sec1
	mov a,sec1
	cjne a,#6,key0over
	MOV sec1,#00H
	ljmp key0over 
key1ljmp:LJMP KEY1
e3:    	mov sec0,43h
	mov 43h,#11
	mov sec1,44h
	mov 44h,#11
	ljmp e4
key0over:JB P3.3,key00
	lJMP key0over


key00:  jb p3.4,key1;秒钟减1
	call DELAY5MS
	call DELAY5MS
	jb p3.4, key1
	clr tr0
	mov a,43h
	cjne a,#11,eeeee
eeee:	mov a,sec0
	cjne a,#0,ccc
	mov sec0,#9
	mov a,sec1
	cjne a,#0,cccc
	mov sec1,#5
	ljmp key00over
eeeee:   mov sec0,43h
	mov sec1,44h
	mov 43h,#11
	mov 44h,#11
	ljmp eeee
cccc:	dec sec1
	ljmp key00over
ccc:	dec sec0
key00over:JB P3.4,key1
	lJMP key00over


;分钟调整程序
key1:	mov a,hh;分钟加1
	cjne a,#2,key2ljmp
	mov a,43h
	cjne a,#11,tt
ttt:	mov a,45h
	xch a,min0
	mov 45h,a
	mov a,46h
	xch a,min1
	mov 46h,a
	jb p3.3,key11
	call DELAY5MS
        JB P3.3,key11
	clr tr0
	mov a,45h
	cjne a,#11,kkk
kk:	INC min0
	MOV A,min0
	CJNE A,#10,key1over
	MOV min0,#00H
	inc min1
	mov a,min1
	cjne a,#6,key1over
	MOV min1,#00H
	ljmp key1over
tt:	mov sec0,43h
	mov sec1,44h
	mov 43h,#11
	mov 44h,#11
	ljmp ttt
key2ljmp:ljmp key2   
kkk:    mov min0,45h
	mov min1,46h
	mov 45h,#11
	mov 46h,#11
	ljmp kk
key1over:JB P3.3,key11
	lJMP key1over


key11:  jb p3.4,key2;分钟减1
	call DELAY5MS
	jb p3.4, KEY2
	clr tr0
	mov a,45h
	cjne a,#11,kkkkk
kkkk:	mov a,min0
	cjne a,#0,aaa
	mov min0,#9
	mov a,min1
	cjne a,#0,aaaa
	mov min1,#5
	ljmp key11over
kkkkk:   mov min0,45h
	mov min1,46h
	mov 45h,#11
	mov 46h,#11
	ljmp kkkk
aaaa:	dec min1
	ljmp key11over
aaa:	dec min0
key11over:JB P3.4,key2
	lJMP key11over

;时调整程序
key2:	mov a,hh;时加1
	cjne a,#3,key3ljmp
	mov a,45h
	cjne a,#11,ss
sss:	mov a,47h
	xch a,hour0
	mov 47h,a
	mov a,48h
	xch a,hour1
	mov 48h,a
	jb p3.3,key22
	CALL DELAY5MS
	call delay5ms
	jb p3.3,key22
	clr tr0
	mov a,47h
	cjne a,#11,qq
qqq:	INC hour0
	mov a,hour1
	cjne a,#2,hour
	MOV A,hour0
	CJNE A,#4,key2over
	mov hour0,#00h
	mov hour1,#00h
	ljmp key2over
ss:	mov min0,45h
	mov min1,46h
	mov 45h,#11
	mov 46h,#11
	ljmp sss
qq:     mov hour0,47h
	mov hour1,48h
	mov 47h,#11
	mov 48h,#11
	ljmp qqq
key3ljmp:ljmp key3
hour:   mov a,hour0
	cjne a,#10,key2over
	MOV hour0,#00H
	INC hour1
key2over:JB P3.3,key22
	lJMP key2over


key22:  jb p3.4,key3;时钟减1
	call DELAY5MS
	jb p3.4, KEY3
	clr tr0
	mov a,47h
	cjne a,#11,h2
h3:	mov a,hour0
	cjne a,#0,h4
	mov a,hour1
	cjne a,#0,h5
	mov hour0,#3
	mov hour1,#2
	ljmp key22over
h2:   	mov hour0,47h
	mov hour1,48h
	mov 47h,#11
	mov 48h,#11
	ljmp h3
h5:	mov hour0,#9
	dec hour1
	ljmp key22over
h4:	dec hour0
key22over:JB P3.4,key3
	lJMP key22over

;星期调整程序
key3:	mov a,hh;星期加1
	cjne a,#4,key4ljmp
	mov a,47h
	cjne a,#11,w1
w2:	mov a,42h
	xch a,week
	mov 42h,a
	jb p3.3,key33
	call DELAY5MS
	call DELAY5MS
        JB P3.3,key33
	clr tr0
	mov a,42h
	cjne a,#8,w3
w4:	INC week
	MOV A,week
	CJNE A,#7,key3over
	MOV week,#00H
	ljmp key1over
w1:	mov hour0,47h
	mov hour1,48h
	mov 47h,#11
	mov 48h,#11
	ljmp w2  
w3:    	mov week,42h
	mov 42h,#8
	ljmp w4
key4ljmp:ljmp key4
key3over:JB P3.3,key33
	lJMP key3over


key33:  jb p3.4,key4;星期减1
	call DELAY5MS
	jb p3.4, key4
	clr tr0
	mov a,42h
	cjne a,#8,ww1
ww2:	mov a,week
	cjne a,#0,a2
	mov week,#6
	ljmp key33over
ww1:   	mov week,42h
	mov 42h,#8
	ljmp ww2
a2:	dec week
key33over:JB P3.4,key4
	lJMP key33over

;日调整
key4:	mov a,hh;日加1
	cjne a,#5,key5ljmp
	mov a,42h
	cjne a,#8,dd
ddd:	mov a,49h
	xch a,day0
	mov 49h,a
	mov a,4ah
	xch a,day1
	mov 4ah,a
	jb p3.3,key44
	CALL DELAY5MS
	call delay5ms
	jb p3.3,key44
	clr tr0
	mov a,49h
	cjne a,#11,dddd
ddddd:	INC day0
	mov a,day1
	cjne a,#3,dayy
	MOV A,day0
	CJNE A,#2,key4over
	mov day0,#1
	mov day1,#00h
	ljmp key4over
key5ljmp:ljmp key5
dd:	mov week,42h
	mov 42h,#8
	ljmp ddd
dddd:   mov day0,49h
	mov day1,4ah
	mov 49h,#11
	mov 4ah,#11
	ljmp ddddd
dayy:    mov a,day0
	cjne a,#10,key4over
	MOV day0,#00H
	INC day1
key4over:JB P3.3,key44
	lJMP key4over


key44:  jb p3.4,key5;日减1
	call DELAY5MS
	jb p3.4,key5
	clr tr0
	mov a,49h
	cjne a,#11,d2
d3:	mov a,day0
	cjne a,#0,d4
	mov a,day1
	cjne a,#0,d0
	mov day0,#1
	mov day1,#3
	ljmp key44over
d2:   	mov day0,49h
	mov day1,4ah
	mov 49h,#11
	mov 4ah,#11
	ljmp d3
d0:	mov day0,#9
	dec day1
	ljmp key44over
d4:	dec day0
key44over:JB P3.4,key5
	lJMP key44over
  

;月调整程序
key5:	mov a,hh;月调整加1
	cjne a,#6,key6ljmp
	mov a,49h
	cjne a,#11,mm
mmm:	mov a,4bh
	xch a,munth0
	mov 4bh,a
	mov a,4ch
	xch a,munth1
	mov 4ch,a
	jb p3.3,key55
	CALL DELAY5MS
	call delay5ms
	jb p3.3,key55
	clr tr0
	mov a,4bh
	cjne a,#11,mmmm
mmmmm:	INC munth0
	mov a,munth1
	cjne a,#1,munthh
	MOV A,munth0
	CJNE A,#3,key5over
	mov munth0,#1
	mov munth1,#00h
	ljmp key5over
mm:	mov day0,49h
	mov day1,4ah
	mov 49h,#11
	mov 4ah,#11
	ljmp mmm
mmmm:   mov munth0,4bh
	mov munth1,4ch
	mov 4bh,#11
	mov 4ch,#11
	ljmp mmmmm
key6ljmp:ljmp key6
munthh:  mov a,munth0
	cjne a,#10,key5over
	MOV munth0,#00H
	INC munth1
key5over:JB P3.3,key55
	lJMP key5over


key55:  jb p3.4,key6;月减1
	call DELAY5MS
	jb p3.4, KEY6
	clr tr0
	mov a,4bh
	cjne a,#11,m0
m1:	mov a,munth0
	cjne a,#0,m2
	mov a,munth1
	cjne a,#0,m3
	mov munth0,#2
	mov munth1,#1
	ljmp key55over
m0:   	mov munth0,4bh
	mov munth1,4ch
	mov 4bh,#11
	mov 4ch,#11
	ljmp m1
m3:	mov munth0,#9
	dec munth1
	ljmp key55over
m2:	dec munth0
key55over:JB P3.4,key6
	lJMP key55over


;年调整程序
key6:	mov a,hh;年加1
	cjne a,#7,loop4ljmp
	mov a,4bh
	cjne a,#11,yy
yyy:	mov a,4dh
	xch a,year0
	mov 4dh,a
	mov a,4eh
	xch a,year1
	mov 4eh,a
	jb p3.3,key66
	call DELAY5MS
        JB P3.3,key66
	clr tr0
	mov a,4dh
	cjne a,#11,yyyy
yyyyy:	INC year0
	MOV A,year0
	CJNE A,#10,key6over
	MOV year0,#00H
	inc year1
	mov a,year1
	cjne a,#10,key66over
	MOV year1,#00H
	ljmp key6over
yy:	mov munth0,4bh
	mov munth1,4ch
	mov 4bh,#11
	mov 4ch,#11
	ljmp yyy
loop4ljmp:ljmp loop4   
yyyy:    mov year0,4dh
	mov year1,4eh
	mov 4dh,#11
	mov 4eh,#11
	ljmp yyyyy
key6over:JB P3.3,key66
	lJMP key6over


key66:  jb p3.4,loop4;年减1
	call DELAY5MS
	jb p3.4, loop4
	clr tr0
	mov a,4dh
	cjne a,#11,y1
y2:	mov a,year0
	cjne a,#0,y3
	mov year0,#9
	mov a,year1
	cjne a,#0,y4
	mov year1,#9
	ljmp key66over
y1:      mov year0,4dh
	mov year1,4eh
	mov 4dh,#11
	mov 4eh,#11
	ljmp y2
y4:	dec year1
	ljmp key66over
y3:	dec year0
key66over:JB P3.4,loop4
	lJMP key66over


loop4:  setb tr0
        ljmp disp


LCDRESET:                       ;初始化程序
	CALL    DELAY5MS        ;延时15MS
        CALL    DELAY5MS
        CALL    DELAY5MS
        MOV     A,#38H          ;显示模式设置(不检测忙信号)
        CALL    LCDWCN          ;共三次
        CALL    DELAY5MS
        MOV     A,#38H
        CALL    LCDWCN
        CALL    DELAY5MS
        MOV     A,#38H               
        CALL    LCDWCN

        MOV     A,#38H          ;显示模式设置(以后均检测忙信号)
        CALL    LCDWC
        MOV     A,#0CH          ;显示关闭
        CALL    LCDWC
        MOV     A,#06H          ;显示清屏
        CALL    LCDWC
	MOV     A,#80H
	CALL    LCDWC
        RET
LCDWC:                          ;送控制字子程序(检测忙信号)
        CALL    WAITIDLE
LCDWCN:                         ;送控制字子程序(不检测忙信号)
        MOV     DPTR,#CSADDR    ;CS=1 RS=0 RW=0
        MOVX    @DPTR,A
        RET
LCDWD:                              ;写字符子程序
        CALL    WAITIDLE
        MOV     DPTR,#CSADDR+RSADDR ;CS=1 RS=1 RW=0
        MOVX    @DPTR,A
        RET
WAITIDLE:
        PUSH    ACC                 ;正常读写操作之前必须检测LCD控制器状态
        MOV     DPTR,#CSADDR+RWADDR ;CS=1 RS=0 RW=1
WTD_PA: MOVX    A,@DPTR             ;DB7:    0  LCD控制器空闲
        JB      ACC.7,WTD_PA        ;        1  LCD控制器忙
        POP     ACC
        RET
DELAY5MS:
        MOV     R1,#25              ;延时子程序(5MS)
DL5_PA: MOV     R2,#100
        DJNZ    R2,$
        DJNZ    R1,DL5_PA
        RET
DELAY400MS:
        MOV     R0,#20              ;延时子程序(400MS)
DL4_PA: MOV     R1,#100
DL4_PB: MOV     R2,#100
        DJNZ    R2,$
        DJNZ    R1,DL4_PB
        DJNZ    R0,DL4_PA
        RET


TIMER01:	PUSH ACC
	PUSH PSW
	MOV TH0,#0B0H
	MOV TL0,#3CH
	inc num
	mov a,num
	cjne a,#20,ljmploop1
        mov num,#00h
	mov a,43h
	cjne a,#11,ljmpsec_1
sec_2:	INC sec0
	MOV A,sec0
	CJNE A,#10,ljmploop1
	MOV sec0,#00H
	INC sec1
	MOV A,sec1
	CJNE A,#6,ljmploop1
	MOV sec1,#00H
	mov a,45h
	cjne a,#11,ljmpmin_1
min_2:	INC min0
	MOV A,min0
	CJNE A,#10,ljmploop1
	MOV min0,#00H
	INC min1
	MOV A,min1
	CJNE A,#06,ljmploop1
	MOV min1,#00H
	inc hour0
	mov a,hour1
	cjne a,#2,hourr
	mov a,hour0
	cjne a,#4,ljmploop1
	mov hour0,#00h
	mov hour1,#00h
	inc week
	mov a,week
	cjne a,#7,day
	mov week,#00h
day:	inc day0
	mov a,munth1
	cjne a,#0,zz1
	mov a,munth0
	cjne a,#1,munth2
dmunth:	MOV A,DAY1
	CJNE A,#3,zz3
	mov a,day0
	cjne a,#2,ljmploop1
	mov day1,#0
  	mov day0,#1
	ljmp munthadd
ljmploop1:ljmp loop1
ljmpsec_1:ljmp sec_1
ljmpmin_1:ljmp min_1
hourr:	mov a,hour0
	cjne a,#10,ljmploop1 
	mov hour0,#00h
	inc hour1

zz3:    mov a,day0
	cjne a,#10,ljmploop1
	mov day0,#0
	inc day1
	ljmp loop1

munth2: cjne a,#2,munth3
	mov a,year1
	mov b,#10
	mul ab
	add a,year0
	mov b,#4
	div ab
	mov a,b
	jz  yunnian
	mov a,day1
	cjne a,#2,zz4
	mov a,day0
        cjne a,#9,ljmploop1
	mov day1,#0
	mov day0,#1
	inc munth0
munth3: cjne a,#3,munth4
	ljmp dmunth
zz1:    mov a,munth0
	cjne a,#0,munth11
	ljmp dmunth
munth4:	cjne a,#4,munth5
smunth:	MOV A,DAY1
	CJNE A,#3,zzz3
	mov a,day0
	cjne a,#1,ljmploop1
	mov day1,#0
  	mov day0,#1
	ljmp munthadd
zzz3:   mov a,day0
	cjne a,#10,loop1
	mov day0,#0
	inc day1
	ljmp loop1
yunnian:mov a,day1
	cjne a,#2,zz4
	mov a,day0
        cjne a,#10,loop1
	mov day1,#0
	mov day0,#1
	ljmp munthadd
zz4:    mov a,day0
	cjne a,#10,loop1
	inc day1
	mov day0,#0
	ljmp loop1
munth5:cjne a,#5,munth6
	ljmp dmunth
munth6:cjne a,#6,munth7
   	ljmp smunth
munth7:cjne a,#7,munth8
      	ljmp dmunth
munth8:cjne a,#8,munth9
     	ljmp dmunth
munth9:cjne a,#9,zz1
        ljmp smunth

munth11:cjne a,#1,munth12
	ljmp smunth
munth12:ljmp dmunth
	
munthadd:inc munth0
	 mov a,munth1
	 cjne a,#0,zz6
	 mov a,munth0
	 cjne a,#10,loop1
	 inc munth1
	 mov munth0,#0
       	ljmp loop1
zz6:     mov a,munth0
	cjne a,#3,loop1
	mov munth0,#1
	mov munth1,#0
	inc year0
	mov a,year0
	cjne a,#10,loop1
	mov year0,#0
	inc year1
	ljmp loop1
	

LOOP1:	POP PSW
	POP ACC
	RETI
sec_1:     mov sec0,43h
	mov sec1,44h
	mov 43h,#11
	mov 44h,#11
	ljmp sec_2
min_1:     mov min0,45h
	mov min1,46h
	mov 45h,#11
	mov 46h,#11
	ljmp min_2
TAB:DB   '0','1','2','3','4','5','6','7','8','9',' ',' ';
WEEK1:DB 'M','T','W','T','F','S','S',' ',' ';
WEEK2:DB 'o','u','e','h','r','a','u',' ',' ';
WEEK3:DB 'n','e','d','u','i','t','n',' ',' ';
        END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -