;;;;;;;;;;;;;;;;;;
我把主程序和调整程序给你参考吧,其它的程序因硬件电路不同而不同。
;;;;主程序;;;;
;;;;;;;;;;;;;;;;;;;
START: 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,#90H
MOV DS1302_DATA,#0A6H;1302充电,充电电流1.1MA
LCALL WRITE
MAIN1: MOV DS1302_ADDR,#8DH ;读出年
LCALL READ
MOV year,DS1302_DATA
MOV DS1302_ADDR,#8BH ;读出星期
LCALL READ
MOV week ,DS1302_DATA
MOV DS1302_ADDR,#89H ;读出月
LCALL READ
MOV month,DS1302_DATA
MOV DS1302_ADDR,#87H ;读出日
LCALL READ
MOV day,DS1302_DATA
MOV DS1302_ADDR,#85H ;读出小时
LCALL READ
MOV hour,DS1302_DATA
MOV DS1302_ADDR,#83H ;读出分钟
LCALL READ
MOV mintue,DS1302_DATA
MOV DS1302_ADDR,#81H ;读出秒
LCALL READ
MOV second,DS1302_DATA
;;公历设置程序;;;
;;;;;;;;;;;;;;;;;
SETG : SETB TR1
SETB ET1
MOV DS1302_ADDR,#8EH
MOV DS1302_DATA,#00H ;允许写1302
LCALL WRITE
MOV DS1302_ADDR,#80H
MOV DS1302_DATA,#80H ;1302停止振荡
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 ;年值送人1302
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 ;调月时闪标志
GWAIT2: LCALL DISPLAY
JNB P1.1,GWAIT2
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 ;月值送人1302
MOV DS1302_DATA,65H
LCALL WRITE
MOV R0,65H
LCALL DIVIDE ;月分离,送显示缓存
MOV 79H,R1
MOV 49H,R1
MOV 7AH,R2
MOV 4AH,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 ;日值送人1302
MOV DS1302_DATA,63H
LCALL WRITE
MOV R0,63H
LCALL DIVIDE ;日分离,送显示缓存
MOV 76H,R1
MOV 46H,R1
MOV 77H,R2
MOV 47H,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 ;星期值送人1302
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 ;小时值送人1302
MOV DS1302_DATA,62H
LCALL WRITE
MOV R0,62H
LCALL DIVIDE ;小时值分离送显示缓存
MOV 74H,R1
MOV 44H,R1
MOV 75H,R2
MOV 45H,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,GADDMINTUE
AJMP SETG11
GADDMINTUE: MOV R7,61H ;分钟加一
LCALL ADD1
MOV 61H,A
CJNE A,#60H,GADDMINTUE1
MOV 61H,#00H
GADDMINTUE1: MOV DS1302_ADDR,#82H ;分钟值送人1302
MOV DS1302_DATA,61H
LCALL WRITE
MOV R0,61H
LCALL DIVIDE ;分钟值分离送显示缓存
MOV 72H,R1
MOV 42H,R1
MOV 73H,R2
MOV 43H,R2
WAITT6: LCALL DISPLAY
JNB P1.2,WAITT6
AJMP SETG11
SETGOUT: LCALL DISPLAY
JNB P1.1,SETGOUT
LCALL GENGXIAN
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
发表时间:2003年6月7日22:01:59