📄 万年历.asm
字号:
LCALL A7
MOV 71H,#186
LCALL A8
MOV 92H,#8
LCALL A40
MOV 91H,#210
LCALL A41
LJMP QQQ
SS8:LCALL HAHA
LJMP QQQ
YOU9:LJMP SS9
ZZ9:CJNE A,#12H,YOU9
MOV A,48H
CJNE A,#25H,VV65
MOV 70H,#45
LCALL A7
MOV 71H,#46
LCALL A8
MOV 92H,#210
LCALL A40
MOV 91H,#210
LCALL A41
LJMP QQQ
VV65:CJNE A,#01H,VV66
MOV 70H,#191
LCALL A7
MOV 71H,#192
LCALL A8
MOV 92H,#86
LCALL A40
MOV 91H,#210
LCALL A41
LJMP QQQ
VV66:CJNE A,#03H,VV67
MOV 70H,#122
LCALL A7
MOV 71H,#193
LCALL A8
MOV 92H,#23
LCALL A40
MOV 91H,#210
LCALL A41
LJMP QQQ
VV67:CJNE A,#08H,VV68
MOV 70H,#131
LCALL A7
MOV 71H,#132
LCALL A8
MOV 92H,#194
LCALL A40
MOV 91H,#157
LCALL A41
LJMP QQQ
VV68:CJNE A,#09H,VV69
MOV 70H,#53
LCALL A7
MOV 71H,#54
LCALL A8
MOV 92H,#196
LCALL A40
MOV 91H,#91
LCALL A41
LJMP QQQ
VV69:CJNE A,#10H,VV70
MOV 70H,#53
LCALL A7
MOV 71H,#54
LCALL A8
MOV 92H,#23
LCALL A40
MOV 91H,#197
LCALL A41
LJMP QQQ
VV70:CJNE A,#12H,VV71
MOV 70H,#198
LCALL A7
MOV 71H,#87
LCALL A8
MOV 92H,#205
LCALL A40
MOV 91H,#199
LCALL A41
LJMP QQQ
VV71:CJNE A,#13H,VV72
MOV 70H,#200
LCALL A7
MOV 71H,#201
LCALL A8
MOV 92H,#202
LCALL A40
MOV 91H,#203
LCALL A41
LJMP QQQ
VV72:CJNE A,#20H,VV73
MOV 70H,#104
LCALL A7
MOV 71H,#105
LCALL A8
MOV 92H,#106
LCALL A40
MOV 91H,#107
LCALL A41
LJMP QQQ
VV73:CJNE A,#21H,VV74
MOV 70H,#41
LCALL A7
MOV 71H,#57
LCALL A8
MOV 92H,#108
LCALL A40
MOV 91H,#91
LCALL A41
LJMP QQQ
VV74:CJNE A,#24H,ss9
MOV 70H,#151
LCALL A7
MOV 71H,#87
LCALL A8
MOV 92H,#152
LCALL A40
MOV 91H,#210
LCALL A41
LJMP QQQ
ri1:ljmp lp1
ss9:LCALL HAHA
;******************************************节日设置结束
QQQ: DJNZ R3,SS100 ;未到1 S继续循环
LCALL GET_TEMPER ;每过1s从DS18B20读取一次温度
mov R3,#4
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;整点闹铃1分钟同时在最左上角显示铃铛符号,合上闹铃开关可以提前关掉闹铃
MOV A,46H
CJNE A,#0,SS100
LCALL NAO
LCALL NAO
LCALL NAO
LCALL NAO
LCALL NAO
mov column3,#0
mov pagef3,#0
mov codes,#206 ;开闹铃符号
lcall writeleft2
SS100:MOV A,45H
CJNE A,#59H,RI1
mov column3,#0
mov pagef3,#0
mov codes,#210 ;关闹铃符号
lcall writeleft2
LJMP lp1
;************************主程序结束,子程序开始
HAHA:MOV 70H,#151
LCALL A7
MOV 71H,#52
LCALL A8
MOV 92H,#210
LCALL A40
MOV 91H,#210
LCALL A41
RET
NIU:
MOV A,51H
SWAP A
ADD A,50H
MOV 45H,A
mov a,53h
swap a
add a,52h
mov 46h,a
mov a,55h
swap a
add a,54h
mov 47h,a
mov a,57h
swap a
add a,56h
mov 48h,a
mov a,59h
swap a
add a,58h
mov 49h,a
mov a,5dh
swap a
add a,5ch
mov 4bh,a
mov 4ah,5ah
RET
;********************************************中断0开始
xx0:PUSH ACC
clr tr0
MOV A,93H
CJNE A,#0,ZD0000 ;秒低位
inc 50h
LCALL A13
mov A,50H
CJNE A,#10,KK0
MOV 50H,#0
kk0:POP ACC
RETI
ZD0000:CJNE A,#1,ZD001 ;秒高位
inc 51h
lcall a14
MOV A,51H
CJNE A,#10,KK1
MOV 51H,#0
kk1:POP ACC
RETI
ZD001:CJNE A,#2,ZD002 ;分低位
INC 52H
lcall a15
MOV A,52H
CJNE A,#10,KK3
MOV 52H,#0
kk3:POP ACC
RETI
ZD002:CJNE A,#3,ZD003 ;分高位
INC 53H
lcall a16
MOV A,53H
CJNE A,#10,KK4
MOV 53H,#0
inc 52h
kk4:POP ACC
RETI
zd003:CJNE A,#4,ZD004 ;时低位
INC 54H
lcall a17
MOV A,54H
CJNE A,#10,KK5
MOV 54H,#0
kk5:POP ACC
RETI
ZD004:CJNE A,#5,ZD005 ;时高位
INC 55H
lcall a18
MOV A,55H
CJNE A,#9,KK6
MOV 55H,#0
kk6:POP ACC
RETI
ZD005:CJNE A,#6,ZD006 ;星期
INC 5aH
lcall a19
MOV A,5aH
CJNE A,#7,KK7
MOV 5aH,#0
kk7:POP ACC
RETI
ZD006:CJNE A,#7,ZD007 ;日低位
INC 56H
lcall a20
MOV A,56H
CJNE A,#10,KK8
MOV 56H,#0
kk8:POP ACC
RETI
ZD007:CJNE A,#8,ZD008 ;日高位
INC 57H
lcall a21
MOV A,57H
CJNE A,#10,KK9
MOV 57H,#0
kk9:POP ACC
RETI
ZD008:CJNE A,#9,ZD009 ;月低位
INC 58H
lcall a22
MOV A,58H
CJNE A,#10,KK10
MOV 58H,#0
kk10:POP ACC
RETI
ZD009:CJNE A,#10,ZD0010 ;月高位
INC 59H
lcall a23
MOV A,59H
CJNE A,#10,KK11
MOV 59H,#0
kk11:POP ACC
RETI
ZD0010:CJNE A,#11,ZD0011 ;年低位
INC 5cH
lcall a24
MOV A,5cH
CJNE A,#10,KK12
MOV 5cH,#0
kk12:POP ACC
RETI
ZD0011:INC 5dH
lcall a25 ;年高位
MOV A,5dH
CJNE A,#10,KK13
MOV 5dH,#0
kk13:POP ACC
RETI
;******************************************************中断1开始
XX1:PUSH ACC
INC 93H
MOV A,02H
CJNE A,#13,ZD10
MOV 93H,#0
ZD10:pop acc
reti
;温度显示子程序-------------------------------------------------------------------------------
INIT_1820: SETB P3.7
CLR P3.7
MOV R1,#3
TSR1: MOV R0,#107
DJNZ R0,$
DJNZ R1,TSR1
SETB P3.7
MOV R0,#25H
TSR2: JNB P3.7,TSR3
DJNZ R0,TSR2
LJMP TSR4
TSR3: SETB FLAG1
LJMP TSR5
TSR4: CLR FLAG1
LJMP TSR7
TSR5: MOV R0,#117
TSR6: DJNZ R0,TSR6
TSR7: SETB P3.7
RET
GET_TEMPER: SETB P3.7
LCALL INIT_1820
JB FLAG1,TSS2
RET
TSS2: MOV A,#0CCH
LCALL WRITE_1820
MOV A,#44H
LCALL WRITE_1820
LCALL DISPLAY1
LCALL INIT_1820
MOV A,#0CCH
LCALL WRITE_1820
MOV A,#0BEH
LCALL WRITE_1820
LCALL READ_18200
RET
WRITE_1820: MOV R2,#8
CLR C
WR1: CLR P3.7
MOV R3,#6
DJNZ R3,$
RRC A
MOV P3.7,C
MOV R3,#23
DJNZ R3,$
SETB P3.7
NOP
DJNZ R2,WR1
SETB P3.7
RET
READ_18200: MOV R5,#2
MOV R1,#41h
RE00: MOV R2,#8
RE01: CLR C
SETB P3.7
CLR P3.7
SETB P3.7
MOV R3,#7
RE10: DJNZ R3,RE10
MOV C,P3.7
MOV R3,#23
RE20: DJNZ R3,RE20
RRC A
DJNZ R2,RE01
MOV @R1,A
DEC R1
DJNZ R5,RE00
RET
DISPLAY1:MOV A,40H
JB ACC.7,ZF1
mov column4,#16
mov pagef4,#4
mov codes,#250
lcall writeright2
ljmp zhijie
ZF1:mov column4,#16
mov pagef4,#4
mov codes,#16 ;;;;;;;;-
lcall writeright2
mov a,40h
cpl a
mov dph,a
mov a,41h
cpl a
mov dpl,a
inc dptr
mov 40h,dph
mov 41h,dpl
zhijie:MOV A,40H
SWAP A
ANL A,#0F0H
MOV 40H,A
MOV A,41H
SWAP A
ANL A,#0FH
ADD A,40H
MOV 41H,A
MOV B,#10
DIV AB
MOV b_bit,A
MOV a_bit,B
mov column2,#32
mov pagef2,#4
mov codes,b_bit ;;;;;;;;;十位
lcall writeright
mov column2,#40
mov pagef2,#4
mov codes,a_bit ;;;;;;;个位
lcall writeright
RET
;---------------------------------------------------------------------------------------------------
;数码显示子程序
DISPLAY:
;*******************************************
;显示秒
MOV A,SECOND
ANL A,#0FH
MOV 50H,A
LCALL A13
MOV A,SECOND
SWAP A
ANL A,#07H
MOV 51H,A
LCALL A14
;*******************************************
;显示分
MOV A,MINUTE
ANL A,#0FH
MOV 52H,A
LCALL A15
MOV A,MINUTE
SWAP A
ANL A,#07H
MOV 53H,A
LCALL A16
;*******************************************
;显示小时
MOV A,HOUR
ANL A,#0FH
MOV 54H,A
LCALL A17
MOV A,HOUR
SWAP A
ANL A,#03H
MOV 55H,A
LCALL A18
;显示星期
MOV A,WEEK
MOV 5AH,A
LCALL A19
;显示日
MOV A,DAY
ANL A,#0FH
MOV 56H,A
LCALL A20
MOV A,DAY
SWAP A
ANL A,#03H
MOV 57H,A
LCALL A21
;显示月
MOV A,MONTH
ANL A,#0FH
MOV 58H,A
LCALL A22
MOV A,MONTH
SWAP A
ANL A,#03H
MOV 59H,A
LCALL A23
;显示年
MOV A,YEARL
ANL A,#0FH
MOV 5CH,A
LCALL A24
MOV A,YEARL
SWAP A
ANL A,#0FH
MOV 5DH,A
LCALL A25
RET
;---------------------------------------------------------------------------------------------------
;设置DS1302初始时间,并启动计时
SETDS1302:
CLR T_RST
nop
CLR T_CLK
nop
SETB T_RST
nop
MOV B,#8EH ;写控制命令字
LCALL INPUTBYTE
MOV B,#00H ;写保护关闭
LCALL INPUTBYTE
SETB T_CLK
nop
CLR T_RST
MOV R0,#SECOND ;内存中的时间首地址
MOV R1,#80H ;DS1302中的时间首地址
MOV R7,#7 ;字节数
SETLOOP:
CLR T_RST
nop
CLR T_CLK
nop
SETB T_RST
nop
MOV B,R1 ;写命令字
LCALL INPUTBYTE
MOV A,@R0 ;设置时间
MOV B,A
LCALL INPUTBYTE
INC R0
INC R1
INC R1
SETB T_CLK
nop
CLR T_RST
nop
DJNZ R7,SETLOOP
CLR T_RST
nop
CLR T_CLK
nop
SETB T_RST
nop
MOV B,#8EH
LCALL INPUTBYTE
MOV B,#80H ;开写保护
LCALL INPUTBYTE
SETB T_CLK
nop
CLR T_RST
nop
RET
;---------------------------------------------------------------------------------------------------
;从DS1302读取时间
GET1302:
MOV R0,#SECOND
MOV R1,#81H ;DS1302中读时间的首地址
MOV R7,#7
GETLOOP:
CLR T_RST
nop
CLR T_CLK
nop
SETB T_RST
nop
MOV B,R1
LCALL INPUTBYTE ;写命令字
LCALL OUTPUTBYTE ;读时间
MOV @R0,A ;将从DS1302中读取的时间从内存中保存
INC R0 ;修改地址指针
INC R1
INC R1
SETB T_CLK
nop
CLR T_RST
nop
DJNZ R7,GETLOOP
RET
;---------------------------------------------------------------------------------------------------
;向DS1302写一个字节
INPUTBYTE:
MOV R4,#8
INPUTLOOP:
MOV A,B
RRC A
MOV B,A
MOV T_IO,C
SETB T_CLK
NOP
;NOP
;NOP
CLR T_CLK
DJNZ R4,INPUTLOOP
RET
;---------------------------------------------------------------------------------------------------
;从DS1302读一个字节
OUTPUTBYTE:
clr a
clr c
MOV R4,#8
OUTPUTLOOP:
NOP
MOV C,T_IO
RRC A
SETB T_CLK
NOP
CLR T_CLK
DJNZ R4,OUTPUTLOOP
RET
writeleft2: ; 左半屏写入16*16汉字子程序
mov dptr,#table2
push column3
mov cpage3,#2
mov ccolumn3,#0
mov a,pagef3
anl a,#07h
orl a,#0b8h
mov com,a
lcall prm0
mov a,column3
anl a,#3fh
orl a,#40h
mov com,a
lcall prm0
mov a,codes
mov b,#32
mul ab
add a,dpl
mov dpl,a
mov a,b
addc a,dph
mov dph,a
lp3:mov a,#00h
movc a,@a+dptr
mov dat,a
lcall prm1
inc ccolumn3
mov a,ccolumn3
inc dptr
cjne a,#16,lp3
dec cpage3
inc pagef3
mov a,cpage3
jz over3
mov a,pagef3
anl a,#07h
orl a,#0b8h
mov com,a
lcall prm0
pop column3
mov a,column3
anl a,#3fh
orl a,#40h
mov com,a
lcall prm0
mov ccolumn3,#0
ljmp lp3
over3:ret
writeright2: ; 右半屏写入16*16汉字子程序
mov dptr,#table2
push column4
mov cpage4,#2
mov ccolumn4,#0
mov a,pagef4
anl a,#07h
orl a,#0b8h
mov com,a
lcall prr0
mov a,column4
anl a,#3fh
orl a,#40h
mov com,a
lcall prr0
mov a,codes
mov b,#32
mul ab
add a,dpl
mov dpl,a
mov a,b
addc a,dph
mov dph,a
lp4:mov a,#00h
movc a,@a+dptr
mov dat,a
lcall prr1
inc ccolumn4
mov a,ccolumn4
inc dptr
cjne a,#16,lp4
dec cpage4
inc pagef4
mov a,cpage4
jz over4
mov a,pagef4
anl a,#07h
orl a,#0b8h
mov com,a
lcall prr0
pop column4
mov a,column4
anl a,#3fh
orl a,#40h
mov com,a
lcall prr0
mov ccolumn4,#0
ljmp lp4
over4:ret
writeleft: ; 左半屏写入8*16数字子程序
mov dptr,#table1
push column
mov cpage,#2
mov ccolumn,#0
mov a,pagef
anl a,#07h
orl a,#0b8h
mov com,a
lcall prm0
mov a,column
anl a,#3fh
orl a,#40h
mov com,a
lcall prm0
mov a,codes
mov b,#16
mul ab
add a,dpl
mov dpl,a
mov a,b
addc a,dph
mov dph,a
lOOp1:mov a,#00h
movc a,@a+dptr
mov dat,a
lcall prm1
inc ccolumn
mov a,ccolumn
inc dptr
cjne a,#8,lOOp1
dec cpage
inc pagef
mov a,cpage
jz over1
mov a,pagef
anl a,#07h
orl a,#0b8h
mov com,a
lcall prm0
pop column
mov a,column
anl a,#3fh
orl a,#40h
mov com,a
lcall prm0
mov ccolumn,#0
ljmp lOOp1
over1:
ret
writeright: ; 右半屏写入8*16数字子程序
mov dptr,#table1
push column2
mov cpage2,#2
mov ccolumn2,#0
mov a,pagef2
anl a,#07h
orl a,#0b8h
mov com,a
lcall prr0
mov a,column2
anl a,#3fh
orl a,#40h
mov com,a
lcall prr0
mov a,codes
mov b,#16
mul ab
add a,dpl
mov dpl,a
mov a,b
addc a,dph
mov dph,a
lOOp2:mov a,#00h
movc a,@a+dptr
mov dat,a
lcall prr1
inc ccolumn2
mov a,ccolumn2
inc dptr
cjne a,#8,lOOp2
dec cpage2
inc pagef2
mov a,cpage2
jz over2
mov a,pagef2
anl a,#07h
orl a,#0b8h
mov com,a
lcall prr0
pop column2
mov a,column2
anl a,#3fh
orl a,#40h
mov com,a
lcall prr0
mov ccolumn2,#0
ljmp lOOp2
over2:
ret
PRM0:CLR CSA ;写指令代码子程序(左)
SETB CSB
CLR rs
SETB rw
PRM01:MOV P0,#0FFH
SETB E
MOV A,P0
CLR E
JB ACC.7,PRM01
CLR rw
MOV P0,COM
SETB E
CLR E
RET
PRM1:CLR CSA ;写显示数据子程序(左)
SETB CSB
CLR rs
SETB rw
PRM11:MOV P0,#0FFH
SETB E
MOV A,P0
CLR E
JB ACC.7,PRM11
SETB rs
CLR rw
MOV P0,DAT
SETB E
CLR E
RET
PRR0:CLR CSB ;写指令代码子程序(右)
SETB CSA
CLR rs
SETB rw
PRR01:MOV P0,#0FFH
SETB E
MOV A,P0
CLR E
JB ACC.7,PRR01
CLR rw
MOV P0,COM
SETB E
CLR E
RET
PRR1:CLR CSB ;写显示数据子程序(右)
SETB CSA
CLR rs
SETB rw
PRR11:MOV P0,#0FFH
SETB E
MOV A,P0
CLR E
JB ACC.7,PRR11
SETB rs
CLR rw
MOV P0,DAT
SETB E
CLR E
RET
INT:MOV COM,#0C0H ;初始化子程序,设置显示起始行为第一行
LCALL PRM0
LCALL PRR0
MOV COM,#3FH ;开显示设置
LCALL PRM0
LCALL PRR0
RET
CLEAR:MOV R4,#00H ;清屏子程序
CLEAR1:MOV A,R4
ORL A,#0B8H
MOV COM,A
LCALL PRM0
LCALL PRR0
MOV COM,#40H
LCALL PRM0
LCALL PRR0
MOV R3,#40H
CLEAR2:MOV DAT,#00H
LCALL PRM1
LCALL PRR1
DJNZ R3,CLEAR2
INC R4
CJNE R4,#08H,CLEAR1
RET
;***********************************************节日子程序
A7:mov column3,#0
mov pagef3,#4
mov codes,70H
lcall writeleft2
RET
A8:mov column3,#16
mov pagef3,#4
mov codes,71H
lcall writeleft2
RET
A40:mov column3,#32
mov pagef3,#4
mov codes,92H
lcall writeleft2
RET
A41:mov column3,#48
mov pagef3,#4
mov codes,91H
lcall writeleft2
RET
A42:mov column,#0
mov pagef,#4
mov codes,#9 ;;;;;;;9
lcall writeleft
RET
A43:mov column3,#8
mov pagef3,#4
mov codes,#207 ;;;;;.
lcall writeleft2
RET
A44:mov column,#16
mov pagef,#4
mov codes,#1 ;;;;;;;1
lcall writeleft
RET
A45:mov column,#24
mov pagef,#4
mov codes,#8 ;;;;;8
lcall writeleft
RET
;**********************************************************
A13:mov column2,#56
mov pagef2,#2
MOV CODES,50H ;秒低位
lcall writeright
RET
A14:mov column2,#48
mov pagef2,#2
MOV CODES,51H ;秒高位
lcall writeright
RET
A15:mov column2,#24
mov pagef2,#2
MOV CODES,52H ;分低位
lcall writeright
RET
A16:mov column2,#16
mov pagef2,#2
MOV CODES,53H ;分高位
lcall writeright
RET
A17:mov column,#56
mov pagef,#2
MOV CODES,54H ;时低位
lcall writeleft
RET
A18:mov column,#48
mov pagef,#2
MOV CODES,55H ;时高位
lcall writeleft
RET
A19:mov column3,#32
mov pagef3,#2 ;星期
mov codes,5AH
lcall writeleft2
RET
A20:mov column2,#40
mov pagef2,#0 ;日低位
mov codes,56H
lcall writeright
RET
A21:mov column2,#32
mov pagef2,#0
mov codes,57H ;日高位
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -