📄 温度万年历.asm
字号:
;*****************************
;* 温度万年历程序 *
;*****************************
;2DH(高两位年)2CH(低两位年)
;7DH~7AH(73H~70H)年位
;2BH(月)
;79H~78H(61H~60H)月
;2AH(日)
;77H~76H(51H~50H)日
;29H(星期)
;6DH(5DH)星期
;28H(小时)
;6BH~6AH(5BH~5AH)时
;27H(分)
;69H~68H(59H~58H)分
;26H(秒)
;67H~66H(57H~56H)秒
;25H~24H(温度)
;4DH~4AH(3DH~3AH)温度
;23H(农历月)
;49H~48H(39H~38H)(农历月)
;22H(农历日)
;47HH~46H(37H~36H)农历日
;显示缓冲单元,,
;闰年标志为F0,定时器T1为调整时候闪烁用
;
;
SCLK EQU P3.2
IO EQU P3.3
RST EQU P3.4
DS1302_ADDR DATA 32H
DS1302_DATA DATA 31H
YEARH DATA 2DH
YEARL DATA 2CH
MONTH DATA 2BH
DAY DATA 2AH
WEEK DATA 29H
HOUR DATA 28H
MINUTE DATA 27H
SECOND DATA 26H
TEMPH DATA 25H
TEMPL DATA 24H
NMONTH DATA 23H
NDAY DATA 22H
TEMPDIN BIT P3.6 ;DS18B20通信端
SPEAKERDIN BIT P3.7 ;蜂铃器端口
SET_TIME BIT P1.0 ;时间设置
SET_RING BIT P1.1 ;闹钟设置
SET_ADD BIT P1.2 ;加键设置
;************************************
;* 中断入口 *
;************************************
ORG 0000H
AJMP START
ORG 0003H
RETI
ORG 000BH
RETI
ORG 0013H
RETI
ORG 001BH
LJMP INTT1
ORG 0023H
RETI
ORG 002BH
RETI
;************************************
;* 初始化 *
;************************************
ORG 100H
;************************************
;* 存储区初始化 *
;************************************
START: MOV SP,#60H
CLEAR: MOV R0,#00H
MOV R1,#99H
CLEAR1: MOV @R0,#00H
INC R0
DJNZ R1,CLEAR1
;************************************
;* 延时1S *
;************************************
DELAY1S: MOV R0,10
DELAY1S1: LCALL YS100
DJNZ R0,DELAY1S1
;************************************
;* 1302初始化 *
;************************************
SETB EA
MOV SCON,#00H ;串行输出,方式0
MOV TMOD,#10H ;计数器1,方式1
MOV TL1,#00H
MOV TH1,#00H
MOV DS1302_ADDR,#8EH
MOV DS1302_DATA,#00H ;允许写1302
LCALL WRITE
;MOV DS1302_ADDR,#80H
;MOV DS1302_DATA,#00H ;允许写1302
;LCALL WRITE
MOV DS1302_ADDR,#90H
MOV DS1302_DATA,#0A6H ;1302充电,充电电流1.1mA
LCALL WRITE
;************************************
;* 主程序 *
;************************************
;************************************
;* 1302主程序 *
;************************************
MAIN1: MOV DS1302_ADDR,#8DH ;READ OUT YEAR
LCALL READ
MOV YEARL,DS1302_DATA
MOV DS1302_ADDR,#8BH ;READ OUT WEEK
LCALL READ
MOV WEEK,DS1302_DATA
MOV DS1302_ADDR,#89H ;READ OUT MONTH
LCALL READ
MOV MONTH,DS1302_DATA
MOV DS1302_ADDR,#87H ;READ OUT DAY
LCALL READ
MOV DAY,DS1302_DATA
MOV DS1302_ADDR,#85H ;READ OUT HOUR
LCALL READ
MOV HOUR,DS1302_DATA
MOV DS1302_ADDR,#83H ;READ OUT MINTUE
LCALL READ
MOV MINUTE,DS1302_DATA
MOV DS1302_ADDR,#81H ;READ OUT SECOND
LCALL READ
MOV SECOND,DS1302_DATA
;************************************
;* 18B20主程序 *
;************************************
MAIN2: LCALL READTEMP
LCALL READTEMP1
LCALL CONVTEMP
;************************************
;* 分离程序 *
;************************************
MOV R0,YEARL
LCALL DIVIDE
MOV 8AH,R1
MOV 7AH,R1
MOV 8BH,R2
MOV 7BH,R2
MOV R0,MONTH
LCALL DIVIDE
MOV 88H,R1
MOV 78H,R1
MOV 89H,R2
MOV 79H,R2
MOV R0,DAY
LCALL DIVIDE
MOV 86H,R1
MOV 76H,R1
MOV 87H,R2
MOV 77H,R2
MOV 6DH,WEEK
MOV 5DH,WEEK
MOV R0,HOUR
LCALL DIVIDE
MOV 6AH,R1
MOV 5AH,R1
MOV 6BH,R2
MOV 5BH,R2
MOV R0,MINUTE
LCALL DIVIDE
MOV 68H,R1
MOV 58H,R1
MOV 69H,R2
MOV 59H,R2
MOV R0,SECOND
LCALL DIVIDE
MOV 66H,R1
MOV 56H,R1
MOV 67H,R2
MOV 57H,R2
MOV R0,TEMPH
LCALL DIVIDE
MOV 4CH,R1
MOV 3CH,R1
MOV 4DH,R2
MOV 3DH,R2
MOV R0,TEMPL
LCALL DIVIDE
MOV 4AH,R1
MOV 3AH,R1
MOV 4BH,R2
MOV 3BH,R2
MOV R0,NMONTH
LCALL DIVIDE
MOV 48H,R1
MOV 38H,R1
MOV 49H,R2
MOV 39H,R2
MOV R0,NDAY
LCALL DIVIDE
MOV 46H,R1
MOV 36H,R1
MOV 47H,R2
MOV 37H,R2
LCALL DISPLAY
JNB P1.1,SETG
JNB F0,SSS
CLR P1.3
LJMP MAIN1
SSS: SETB P1.3
LJMP MAIN1
;*********************************
;* 公历设置 *
;*********************************
SETG: SETB TR1
SETB ET1
CLR 08H
CLR 09H
CLR 0AH
CLR 0BH
CLR 0CH
CLR 0DH
CLR 0EH
CLR 0FH
MOV DS1302_ADDR,#8EH
MOV DS1302_DATA,#00H
LCALL WRITE
MOV DS1302_ADDR,#80H
MOV DS1302_DATA,#80H
LCALL WRITE
GWAIT: LCALL DISPLAY
JNB P1.1,GWAIT
SETG1: LCALL DISPLAY
JNB P1.1,SETG2
JNB P1.2,GADDYEAR
AJMP SETG1
GADDYEAR: MOV R7,66H
LCALL ADD1
MOV 66H,A
CJNE A,#51H,GADDYEAR1
MOV 66H,#01H
GADDYEAR1: MOV DS1302_ADDR,#8CH
MOV DS1302_DATA,66H
LCALL WRITE
MOV R0,66H
LCALL DIVIDE
MOV 4BH,R1
MOV 7BH,R1
MOV 4CH,R2
MOV 7CH,R2
WAITT1: LCALL DISPLAY
JNB P1.2,WAITT1
AJMP SETG1
SETG2: SETB 0AH
GWAITT2: LCALL DISPLAY
JNB P1.1,GWAITT2
SETG3: LCALL DISPLAY
JNB P1.1,SETG4
JNB P1.2,GADDMONTH
AJMP SETG3
GADDMONTH: MOV R7,65H
LCALL ADD1
MOV 65H,A
CJNE A,#13H,GADDMONTH1
MOV 65H,#01H
GADDMONTH1: MOV DS1302_ADDR,#88H
MOV DS1302_DATA,65H
LCALL WRITE
MOV R0,65H
LCALL DIVIDE
MOV 49H,R1
MOV 79H,R1
MOV 4AH,R2
MOV 7AH,R2
WAITT2: LCALL DISPLAY
JNB P1.2,WAITT2
AJMP SETG3
SETG4: SETB 0BH
GWAIT4: LCALL DISPLAY
JNB P1.1,GWAIT4
SETG5: LCALL DISPLAY
JNB P1.1,SETG6
JNB P1.2,GADDDAY
AJMP SETG5
GADDDAY: MOV R7,63H
LCALL ADD1
MOV 63H,A
CJNE A,#32H,GADDDAY1
MOV 63H,#01H
GADDDAY1: MOV DS1302_ADDR,#86H
MOV DS1302_DATA,63H
LCALL WRITE
MOV R0,63H
LCALL DIVIDE
MOV 46H,R1
MOV 76H,R1
MOV 47H,R2
MOV 77H,R2
WAITT3: LCALL DISPLAY
JNB P1.2,WAITT3
AJMP SETG5
SETG6: SETB 0CH
GWAIT6: LCALL DISPLAY
JNB P1.1,GWAIT6
SETG7: LCALL DISPLAY
JNB P1.1,SETG8
JNB P1.2,GADDWEEK
AJMP SETG7
GADDWEEK: MOV R7,64H
LCALL ADD1
MOV 64H,A
CJNE A,#08H,GADDWEEK1
MOV 64H,#01H
GADDWEEK1: MOV DS1302_ADDR,#8AH
MOV DS1302_DATA,64H
LCALL WRITE
MOV R0,64H
LCALL DIVIDE
MOV 48H,R1
MOV 78H,R1
WAITT4: LCALL DISPLAY
JNB P1.2,WAITT4
AJMP SETG7
SETG8: SETB 0DH
GWAIT8: LCALL DISPLAY
JNB P1.1,GWAIT8
SETG9: LCALL DISPLAY
JNB P1.1,SETG10
JNB P1.2,GADDHOUR
AJMP SETG9
GADDHOUR: MOV R7,62H
LCALL ADD1
MOV 62H,A
CJNE A,#24H,GADDHOUR1
MOV 62H,#00H
GADDHOUR1: MOV DS1302_ADDR,#84H
MOV DS1302_DATA,62H
LCALL WRITE
MOV R0,62H
LCALL DIVIDE
MOV 44H,R1
MOV 74H,R1
MOV 45H,R2
MOV 75H,R2
WAITT5: LCALL DISPLAY
JNB P1.2,WAITT5
AJMP SETG9
SETG10: SETB 0EH
GWAIT10: LCALL DISPLAY
JNB P1.1,GWAIT10
SETG11: LCALL DISPLAY
JNB P1.1,SETGOUT
JNB P1.2,GADDMINUTE
AJMP SETG11
GADDMINUTE: MOV R7,61H
LCALL ADD1
MOV 61H,A
CJNE A,#60H,GADDMINUTE1
MOV 61H,#00H
GADDMINUTE1: MOV DS1302_ADDR,#82H
MOV DS1302_DATA,61H
LCALL WRITE
MOV R0,61H
LCALL DIVIDE
MOV 42H,R1
MOV 72H,R1
MOV 43H,R2
MOV 73H,R2
WAITT6: LCALL DISPLAY
JNB P1.2,WAITT6
AJMP SETG11
SETGOUT: LCALL DISPLAY
JNB P1.1,SETGOUT
MOV DS1302_ADDR,#80H
MOV DS1302_DATA,#00H ;允许写1302
LCALL WRITE
MOV DS1302_ADDR,#8EH
MOV DS1302_DATA,#80H ;允许写1302
LCALL WRITE
CLR 08H
CLR 09H
CLR 0AH
CLR 0BH
CLR 0CH
CLR 0DH
CLR 0EH
CLR 0FH
CLR ET1
CLR TR1
LJMP MAIN1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -