⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 万年历.asm

📁 单片机设计万年历过户就让他推举投影机荣誉军人他有今天加入条件
💻 ASM
📖 第 1 页 / 共 5 页
字号:
                                      ;*****************************
                                      ;*        万年历程序         *
                                      ;*****************************
                          ;67H(高两位年)66H(低两位年)65H(月)64H(星期)
                          ;63H(日)62H(小时)61H(分)60H(秒)57H(农历月)56H(农历日)
                          ;显示缓冲单元7CH~7BH(4CH~4BH)年低位,7AH~79H(4AH~49H)月,
                          ;78H(48H)星期,77H~76H(47H~46H)日,75H~74H(45H~44H)时,
                          ;73H72H(43H~42H)分,71H~70H(41H~40H)秒,5EH~5DH(55H~54H)农历年
                          ;5CH~5BH(53H~52H)农历月,5AH~59H(51H~50H)农历日
                          ;闰年标志为F0,定时器T1为调整时候闪烁用
                          ;
                          ;
                                         SCLK  EQU  P3.2
                                         IO    EQU  P3.3
                                         RST   EQU  P3.4
                                    TIME_YEAR  DATA 66H
                                    TIME_MONTH DATA 65H
                                         WEEK  DATA 64H
                                    TIME_DAY   DATA 63H
                                         HOUR  DATA 62H
                                        MINTUE DATA 61H
                                       SECOND  DATA 60H
                                   DS1302_ADDR DATA 32H
                                   DS1302_DATA DATA 31H
                                   start_year  EQU   01; 定义查询表起始年份 ,01--199 表示 1901-2099 年
                                   week_byte1  DATA 3AH
                                   WEEK_BYTE2  DATA 3BH
                                   WEEK_BYTE3  DATA 3CH
                                   WEEK_BYTE4  DATA 3DH
                                   WEEK_BYTE5  DATA 3EH

                                  CONvert_year DATA 6dh
                                 CONvert_month DATA 6eh ;BIT7 为 1 表示闰月
                                  CONvert_date DATA 6fh
                                    temp_Byte1 DATA 68h
                                    temp_Byte2 DATA 69h
                                    temp_Byte3 DATA 6Ah
                                    temp_Byte4 DATA 6Bh
                                    temp_Byte5 DATA 6Ch


                                          ORG  0000H
                                          AJMP START
                                          ORG  0003H
                                          RETI
                                          ORG  000BH
                                          RETI
                                          ORG  0013H
                                          RETI
                                          ORG  001BH
                                          LJMP INTT1
                                          ORG  0023H
                                          RETI
                                          ORG  002BH
                                          RETI
                             ;************************************
                             ;*            主程序                *
                             ;************************************
                               start:     mov  r1,#7Eh
                                          mov  r0,#2
                                          mov  a,#0
                               clear:     mov  @r0,a
                                          inc  r0
                                          djnz r1,clear
                                          mov  r0,A


                                          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



                               main1:

                                          SETB EA

                                          MOV DS1302_ADDR,#8DH         ;READ OUT YEAR
                                          LCALL READ
                                          MOV TIME_YEAR,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 TIME_MONTH,DS1302_DATA
                                          MOV DS1302_ADDR,#87H          ;READ OUT DAY
                                          LCALL READ
                                          MOV TIME_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 MINTUE,DS1302_DATA
                                          MOV DS1302_ADDR,#81H       ;READ OUT SECOND
                                          LCALL READ
                                          MOV SECOND,DS1302_DATA



                                          MOV R0,TIME_YEAR                ;年分离,送显示缓存
                                          LCALL DIVIDE
                                          MOV 7BH,R1
                                          MOV 4BH,R1
                                          MOV 7CH,R2
                                          MOV 4CH,R2

                                          MOV 78H,WEEK
                                          MOV 48H,WEEK
                                          MOV R0,TIME_MONTH                ;月分离,送显示缓存
                                          LCALL DIVIDE
                                          MOV 79H,R1
                                          MOV 49H,R1
                                          MOV 7AH,R2
                                          MOV 4AH,R2
                                          MOV R0,TIME_DAY                ;日分离,送显示缓存
                                          LCALL DIVIDE
                                          MOV 76H,R1
                                          MOV 46H,R1
                                          MOV 77H,R2
                                          MOV 47H,R2
                                          MOV R0,HOUR                ;小时分离,送显示缓存
                                          LCALL DIVIDE
                                          MOV 74H,R1
                                          MOV 44H,R1
                                          MOV 75H,R2
                                          MOV 45H,R2
                                          MOV R0,MINTUE                ;分分离,送显示缓存
                                          LCALL DIVIDE
                                          MOV 72H,R1
                                          MOV 42H,R1
                                          MOV 73H,R2
                                          MOV 43H,R2
                                          MOV R0,SECOND                ;秒分离,送显示缓存
                                          LCALL DIVIDE
                                          MOV 70H,R1
                                          MOV 40H,R1
                                          MOV 71H,R2
                                          MOV 41H,R2
                                          LCALL GENGXIN            ;更新农历程序
                                          MOV R0,CONVERT_MONTH    ;农历月分离,送显示缓存
                                          LCALL DIVIDE
                                          MOV 5BH,R1
                                          MOV 52H,R1
                                          MOV 5CH,R2
                                          MOV 53H,R2
                                          MOV R0,CONVERT_DATE
                                          LCALL DIVIDE
                                          MOV 59H,R1
                                          MOV 50H,R1
                                          MOV 5AH,R2
                                          MOV 51H,R2
                                          LCALL GETWEEK
                                          MOV 78H,WEEK




                                          LCALL DISPLAY




                                          JNB P1.1,SETGG


                                          JNB F0,SSS
                                          CLR P1.0                ;闰月,则p1.0清0,指示灯亮
                                          LJMP MAIN1
                                SSS:      SETB P1.0                 ;非闰月,则p1.0置位,指示灯灭
                                          LJMP MAIN1

                                SETGG:    LJMP SETG













                                ;*******************************
                                ;*       公历设置程序          *
                                ;*******************************
                                   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            ;允许写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,SETGMON

                                          JNB P1.3,GADDYEAR
                                          JNB P1.4,GDECYEAR
                                          JNB F0,SSSYEAR
                                          CLR P1.0                ;闰月,则p1.1清0,指示灯亮
                                          LJMP SETG1
                                SSSYEAR:   SETB P1.0
                                          AJMP SETG1
                                 SETGMON: AJMP SETG2

                             GADDYEAR:    MOV R7,66H                ;年加1
                                          LCALL ADD1
                                          MOV 66H,A
                                          CJNE A,#99H,GADDYEAR1
                                          MOV 66H,#00H
                             GADDYEAR1:   LCALL  GETWEEK            ;年加1同时换算出星期
                                          LCALL  YMD                ;转换农历月日
                                          MOV DS1302_ADDR,#8CH        ;年值送1302
                                          MOV DS1302_DATA,66H
                                          LCALL WRITE
                                          MOV DS1302_ADDR,#8AH        ;星期值送1302
                                          MOV DS1302_DATA,64H
                                          LCALL WRITE
                                          MOV R0,66H
                                          LCALL DIVIDE             ;年分离送显示缓冲
                                          MOV 4BH,R1
                                          MOV 7BH,R1
                                          MOV 4CH,R2
                                          MOV 7CH,R2
                                          MOV R0,64H
                                          LCALL DIVIDE             ;星期分离送显示缓冲
                                          MOV 48H,week
                                          MOV 78H,week
                                WAIT1:   LCALL DISPLAY
                                          JNB P1.3,WAIT1
                                          AJMP SETG1

                               GDECYEAR:  MOV  R7,66H               ;年减1
                                          LCALL DEC1
                                          MOV  66H,A
                                          CJNE A,#99H,GDECYEAR1
                                          MOV  66H,#99H
                               GDECYEAR1: LCALL  GETWEEK            ;年减1同时换算出星期
                                          LCALL  YMD                ;转换农历月日
                                          MOV DS1302_ADDR,#8CH        ;年值送1302
                                          MOV DS1302_DATA,66H
                                          LCALL WRITE
                                          MOV DS1302_ADDR,#8AH        ;星期值送1302
                                          MOV DS1302_DATA,64H
                                          LCALL WRITE
                                          MOV R0,66H
                                          LCALL DIVIDE               ;年分离送显示缓冲
                                          MOV 4BH,R1
                                          MOV 7BH,R1
                                          MOV 4CH,R2
                                          MOV 7CH,R2
                                          MOV R0,64H
                                          LCALL DIVIDE             ;星期分离送显示缓冲

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -