logo资料库

基于89c52单片机与ds1302+lcd1602的日历时钟.doc

第1页 / 共14页
第2页 / 共14页
第3页 / 共14页
第4页 / 共14页
第5页 / 共14页
第6页 / 共14页
第7页 / 共14页
第8页 / 共14页
资料共14页,剩余部分请下载后查看
;***************************************************** ;ds1302 引脚定义 ;年月日等内存分配 EQU P3.5 SCLK EQU P3.6 IO EQU P3.7 RST DATA 76H year week DATA 75H month DATA 74H DATA 73H day hour DATA 72H mintue DATA 71H second DATA 70H RMINUTE DATA 77H RHOUR DATA 78H ;1602 控制引脚定义 RS EQU P1.0 RW EQU P1.1 E EQU P1.2 ;***************************************************** SETRING EQU P2.6 RING_KEY EQU P2.7 YEARKEY EQU P2.5 MONTHKEY EQU P2.4 DAYKEY EQU P2.3 WEEKKEY EQU P2.2 HOURKEY EQU P2.1 MINUTEKEY EQU P2.0 ;*************************************************** ORG 0000H LJMP START org 0030h START: MOV RMINUTE,#06H MOV R7,RMINUTE LCALL DIVIDE MOV 6FH,R3 MOV 6EH,R2 MOV RHOUR,#17H MOV R7,RHOUR LCALL DIVIDE MOV 6CH,R3 MOV 6BH,R2 MOV SP,#90H ACALL LCDINT ACALL DS1302INT ;堆栈设置 ;1602 初始化 ;1302 初始化
;1302 充电 MOV 32H,#90H MOV 31H,#0A5H ACALL WR1302 ;固定显示区 MOV 50H,#02H MOV 51H,#00H MOV 54H,#0FDH MOV 57H,#0FDH MOV 5AH,#0F0H MOV 5BH,#27H MOV 5CH,#35H MOV 5DH,#35H MOV 5EH,#3BH MOV 62H,#0AH MOV 65H,#0AH MOV 68H,#0F0H MOV 69H,#0F0H MOV 6AH,#0F0H MOV 6DH,#0AH ;年份"2011"中的"2" ;年份"2011"中的"0" ;FDH+30H=2DH 为字符"-" ; "-" ;F0H+30H=20H 为字符空格" " ;"W" ;"e" ;"e" ;":" ;":" ;"k" ;" " ;" " ;" " XX1: JB RING_KEY,WS LCALL ALARM WS:JNB RING_KEY,WB SETB P1.7 WB:LCALL KEY1 LCALL KEY2 LCALL KEY3 LCALL KEY4 LCALL KEY5 LCALL KEY6 LCALL DS1302 LCALL DISP1602 SJMP XX1 KEY1: JB MINUTEKEY,Y1 NOP NOP NOP JNB MINUTEKEY,$ LCALL JUDGE LCALL MINSETKEYTEST LCALL OUTTOMAIN1 Y1:RET ;关 DS1302,进入时间调整; ;返回主界面
KEY2: JB HOURKEY,Y2 NOP NOP NOP JNB HOURKEY,$ LCALL JUDGE LCALL HRSETKEYTEST LCALL OUTTOMAIN2 ;返回主界面 Y2:RET KEY3: JB WEEKKEY,Y3 NOP NOP NOP JNB WEEKKEY,$ LCALL JUDGE LCALL WEEKSETKEYTEST LCALL OUTTOMAIN3 Y3:RET KEY4: JB DAYKEY,Y4 NOP NOP NOP JNB DAYKEY,$ LCALL JUDGE LCALL DATSETKEYTEST LCALL OUTTOMAIN4 Y4:RET KEY5: JB MONTHKEY,Y5 NOP NOP NOP JNB MONTHKEY,$ LCALL JUDGE LCALL MONSETKEYTEST LCALL OUTTOMAIN5 Y5:RET KEY6: JB YEARKEY,Y6 NOP NOP
NOP JNB YEARKEY,$ LCALL JUDGE LCALL YEARSETKEYTEST LCALL OUTTOMAIN6 Y6:RET ;返回主界面子程序 OUTTOMAIN1: MOV R0,#82H ;更新 DS1302 日期信息寄存器 MOV R1,#71H ;R0=82H,为写分命令字,R1=71H,为分的存储地址 MOV 32H,R0 MOV 31H,@R1 ACALL WR1302 MOV 32H,#80H ;开 ds1302 MOV 31H,#00H ACALL WR1302 RET ;调写 1302 程序,完成更新 OUTTOMAIN2: MOV R0,#84H MOV R1,#72H MOV 32H,R0 MOV 31H,@R1 ACALL WR1302 MOV 32H,#80H MOV 31H,#00H ACALL WR1302 RET OUTTOMAIN3: MOV R0,#8AH MOV R1,#75H MOV 32H,R0 MOV 31H,@R1 ACALL WR1302 MOV 32H,#80H MOV 31H,#00H ACALL WR1302 RET OUTTOMAIN4: MOV R0,#86H MOV R1,#73H MOV 32H,R0 MOV 31H,@R1 ACALL WR1302 MOV 32H,#80H
MOV 31H,#00H ACALL WR1302 RET OUTTOMAIN5: MOV R0,#88H MOV R1,#74H MOV 32H,R0 MOV 31H,@R1 ACALL WR1302 MOV 32H,#80H MOV 31H,#00H ACALL WR1302 RET OUTTOMAIN6: MOV R0,#8CH MOV R1,#76H MOV 32H,R0 MOV 31H,@R1 ACALL WR1302 MOV 32H,#80H MOV 31H,#00H ACALL WR1302 RET JUDGE: MOV 32H,#80H MOV 31H,#80H ACALL WR1302 RET ;关 ds1302 ;分钟调整按键检测程序 MINSETKEYTEST: JNB SETRING,ZM MOV A,#09H CJNE A,64H,MINSET2 ;不为 9,转 MINSET2,分钟直接加一 MOV A,#05H CJNE A,63H,MINSET3 ;不为 5,转 MINSET3 MOV mintue,#00H AJMP MINSET4 ;为 9,再判断十位是否为 5? ;个位先判断是否为 9? ;为 5,将分钟置为 0 ;个位为 9,十位不为 5,则将分钟先加六 ;进入 MINSET2 后再加一,即共加七 MINSET3: MOV A,#06H ADD A,mintue MOV mintue,A MINSET2: INC mintue MINSET4:
;分钟分离,送显示缓存 更新分钟 MOV R7,mintue ACALL DIVIDE MOV 64H,R3 MOV 63H,R2 ZM1: RET ZM: ;个位先判断是否为 9? MOV A,#09H CJNE A,6FH,RMINSET2 ;不为 9,转 RMINSET2,分钟直接加一 MOV A,#05H CJNE A,6EH,RMINSET3 ;不为 5,转 RMINSET3 ;为 5,将分钟置为 0 MOV RMINUTE,#00H AJMP RMINSET4 ;为 9,再判断十位是否为 5? ;个位为 9,十位不为 5,则将分钟先加六 ;进入 RMINSET2 后再加一,即共加七 RMINSET3: MOV A,#06H ADD A,RMINUTE MOV RMINUTE,A RMINSET2: INC RMINUTE RMINSET4: MOV R7,RMINUTE ACALL DIVIDE MOV 6FH,R3 MOV 6EH,R2 AJMP ZM1 ;小时设置按键检测程序 HRSETKEYTEST: JNB SETRING,ZM2 MOV A,#09H CJNE A,61H,HRSET0 MOV A,#06H ADD A,hour MOV hour,A LJMP HRSET2 HRSET0: MOV A,#03H CJNE A,61H,HRSET2 MOV A,#02H CJNE A,60H,HRSET2 MOV hour,#00H AJMP HRSET4 HRSET2: INC hour HRSET4: MOV R7,hour ;分离,送显示缓存 更新
LCALL DIVIDE MOV 61H,R3 MOV 60H,R2 ZM3: RET ZM2: MOV A,#09H CJNE A,6CH,RHRSET0 MOV A,#06H ADD A,Rhour MOV Rhour,A LJMP RHRSET2 RHRSET0: MOV A,#03H CJNE A,6CH,RHRSET2 MOV A,#02H CJNE A,6BH,RHRSET2 MOV Rhour,#00H AJMP RHRSET4 RHRSET2: INC rhour RHRSET4: MOV R7,RHOUR LCALL DIVIDE MOV 6CH,R3 MOV 6BH,R2 AJMP ZM3 ;周设置按键检测程序 WEEKSETKEYTEST: MOV A,#07H CJNE A,5FH,WEEKSET2 MOV week,#01H AJMP WEEKSET3 WEEKSET2: INC week WEEKSET3: MOV 5FH,week RET ;日设置按键检测程序 DATSETKEYTEST: MOV A,#09H CJNE A,59H,DATSET2 MOV A,#06H ADD A,day MOV day,A
AJMP DATSET3 DATSET2: MOV A,#01H CJNE A,59H,DATSET3 MOV A,#03H CJNE A,58H,DATSET3 MOV day,#01H AJMP DATSET4 DATSET3: INC day DATSET4: MOV R7,day LCALL DIVIDE MOV 59H,R3 MOV 58H,R2 RET ;日分离,送显示缓存 ;月设置按键检测程序 MONSETKEYTEST: MOV A,#09H CJNE A,56H,MONSET2 MOV A,#07H ADD A,month MOV month,A LJMP MONSET4 MONSET2: MOV A,#02H CJNE A,56H,MONSET3 MOV A,#01H CJNE A,55H,MONSET3 MOV month,#01H AJMP MONSET4 MONSET3: INC month MONSET4: MOV R7,month LCALL DIVIDE MOV 56H,R3 MOV 55H,R2 RET ;月分离,送显示缓存 ;年设置按键检测程序 YEARSETKEYTEST: MOV A,#09H CJNE A,53H,YEARSET2 MOV A,#09H
分享到:
收藏