📄 时钟备份.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 + -