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

📄 万年历.asm

📁 单片机设计万年历过户就让他推举投影机荣誉军人他有今天加入条件
💻 ASM
📖 第 1 页 / 共 5 页
字号:
                                    exit:nop
                                         RET

                             ;********************************
                            ;* 阳历调整同时显示农历月日程序  *
                            ;*********************************
                                    YMD:
                                         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
                                         RET
                            ;*********************************
                            ;*           分离程序            *
                            ;*********************************
                                DIVIDE:   MOV A,R0
                                          ANL A,#0FH
                                          MOV R1,A
                                          MOV A,R0
                                          SWAP A
                                          ANL A,#0FH
                                          MOV R2,A
                                          RET
                              ;*********************************
                             ;*         写1302程序            *
                             ;*********************************
                                  WRITE:  CLR SCLK
                                          NOP
                                          SETB RST
                                          NOP
                                          MOV A,DS1302_ADDR
                                          MOV R4,#8
                                  WRITE1: RRC A                       ;送地址给1302
                                          NOP
                                          NOP
                                          CLR SCLK
                                          NOP
                                          NOP
                                          NOP
                                          MOV IO,C
                                          SETB SCLK                   ;时钟上升沿有效
                                          NOP
                                          NOP
                                          NOP
                                          NOP
                                          DJNZ R4,WRITE1
                                          CLR SCLK
                                          NOP
                                          MOV A,DS1302_DATA
                                          MOV R4,#8
                                  WRITE2: RRC A
                                          NOP                        ;送数据给1302
                                          CLR SCLK
                                          NOP
                                          NOP
                                          MOV IO,C
                                          NOP
                                          NOP
                                          NOP
                                          SETB SCLK
                                          NOP
                                          NOP
                                          DJNZ R4,WRITE2
                                          CLR RST
                                          RET
                              ;*******************************
                              ;*         读1302程序          *
                              ;*******************************
                                   READ:  CLR SCLK
                                          NOP
                                          NOP
                                          SETB RST
                                          NOP
                                          MOV A,DS1302_ADDR
                                          MOV R4,#8
                                  READ1:  RRC A
                                          NOP
                                          MOV IO,C
                                          NOP
                                          NOP
                                          NOP
                                          SETB SCLK       ;读数据在时钟上升沿有效
                                          NOP
                                          NOP
                                          NOP
                                          CLR SCLK
                                          NOP
                                          NOP
                                          DJNZ R4,READ1
                                          MOV R4,#8
                                  READ2:  CLR SCLK
                                          NOP
                                          NOP
                                          NOP
                                          MOV C,IO
                                          NOP
                                          NOP
                                          NOP
                                          NOP
                                          NOP
                                          RRC A
                                          NOP
                                          NOP
                                          NOP
                                          NOP
                                          SETB SCLK
                                          NOP
                                          DJNZ R4,READ2
                                          MOV DS1302_DATA,A
                                          CLR RST
                                          RET


                             ;********************************
                             ;*          显示程序            *
                             ;********************************
                                 DISPLAY: MOV 7EH,#02H
                                          MOV 7DH,#00H
                                          MOV R0,#76H
                                          MOV R1,#70H
                                          MOV R2,79H
                                          MOV R3,#79H
                                          MOV R5,#0FEH
                                          MOV A,7AH
                                          CJNE A,#0,PLAY1
                                          MOV  7AH,#0BH


                                   PLAY1: MOV A,#0FFH
                                          MOV P2,A
                                          MOV A,@R0
                                          MOV DPTR,#TAB1
                                          MOVC A,@A+DPTR
                                          MOV SBUF,A             ;送第1字节,送日,农历月、日数据。
                                          JNB TI,$
                                          CLR TI
                                          MOV A,@R1
                                          MOV DPTR,#TAB1
                                          MOVC A,@A+DPTR
                                          MOV SBUF,A             ;送第2字节,送秒、分、时数据。
                                          JNB TI,$
                                          CLR TI
                                          MOV A,R2
                                          MOV DPTR,#TAB1
                                          MOVC A,@A+DPTR
                                          MOV SBUF,A             ;送第3字节,送月、年数据。
                                          JNB TI,$
                                          CLR TI
                                          INC R0
                                          INC R1
                                          INC R3
                                          MOV A,R3


                                          SETB PSW.4               ;选2组寄存器
                                          MOV R0,A
                                          MOV A,@R0
                                          CLR PSW.4
                                          MOV R2,A
                                          MOV A,R0

                                          CJNE A,#78H,PLAY2
                                          MOV R0,#50H
                                   PLAY2: CJNE A,#54H,PLAY3
                                          MOV R0,#78H
                                   PLAY3: MOV A,R5
                                          MOV P2,A
                                          LCALL DL500us
                                          MOV A,R5
                                          JNB ACC.6,PLAYOUT
                                          RL A
                                          MOV R5,A
                                          MOV A,R0
                                         CJNE A,#77H,JNDATE        ;日的高位消隐
                                          MOV A,77H
                                         CJNE A,#00,JNDATE
                                          MOV 77H,#0BH
                                  JNDATE:CJNE A,#51H,JNMONTH        ;农历日的高位消隐
                                          MOV A,51H
                                         CJNE A,#00,JNMONTH
                                          MOV 51H,#0AH
                                JNMONTH: CJNE A,#53H,JHOUR          ;农历月的高位消隐
                                          MOV A,53H
                                         CJNE A,#00,JHOUR
                                          MOV 53H,#0AH

                                  JHOUR:  MOV  A,R1
                                          CJNE A,#75H,JOUT
                                          MOV  A,75H
                                          CJNE A,#00,JOUT
                                          MOV  A,74H
                                          CJNE A,#0,JJHOUR
                                          AJMP JOUT
                                  JJHOUR: MOV 75H,#0AH

                                  JOUT:

                                          LJMP PLAY1
                                PLAYOUT:  SETB P2.6
                                          RET
                                DL500uS: SETB PSW.3       ;选择一号寄存器

                                          MOV R7,#180
                                     DL1: DJNZ R7,DL1

                                          CLR  PSW.3
                                          RET
                                ;*****************************
                                ;*        数据表             *
                                ;*****************************
                                    TAB1: DB 03H,9FH,25H,0DH,99H
                                          DB 49H,41H,1FH,01H,09H,0FFH,0FDH


; ***************************
; * 公历年月日推算星期      *
; ***************************
; 以下子程序用于从当前公历日期 , 推算星期 ,
; 入口 :time_yeAr,time_month ,time_date , 定义公历年月日 ,BCD 码 , 其中月的
;BIT7 表示世纪 ,0 表示 20 世纪 ,1 表示 19 世纪 , 与 PCF8563 一致
; 出口 time_week, 0-6 表示星期日 - 星期六 , 与 PCF8563 一致 , 程序不改变入口数据
; 使用资源 :ACC,B,psw,temp_Byte1,temp_Byte2,temp_Byte3
GetWeek: MOV A,time_year
MOV B,#16
DIV AB
MOV week_Byte1,B
MOV B,#10
MUL AB
ADD A,week_Byte1
MOV week_Byte1,A ;temp_Byte1= 年
MOV A,time_month
JB ACC.7,getw02

MOV A,#100
ADD A,week_Byte1
MOV week_Byte1,A ;20 世纪年 +100
MOV A,time_month
CLR ACC.7
getw02: JNB ACC.4,getw04
ADD A,#10
CLR ACC.4
getw04: MOV week_Byte2,A ;temp_Byte2= 月
MOV A,time_day
MOV B,#16
DIV AB
MOV week_Byte3,B
MOV B,#10
MUL AB
ADD A,week_Byte3
MOV week_Byte3,A ;temp_Byte3= 日
MOV A,week_Byte1;
ANL A,#03h
JNZ getw10 ; 非闰年转移
MOV A,week_Byte2
CJNE A,#3,getw06
getw06: JNC getw10 ; 月大于 2 转移
DEC week_Byte3 ; 份小于等于 2, 又是闰年 , 日减 1
getw10: MOV A,week_Byte2;
LCALL get_CorreCt ; 取月校正表数据
ADD A,week_Byte1
MOV B,#7
DIV AB ;B 放年加校正日数之和后除 7 的余数不先做这一步
; 有可能数据溢出
MOV A,week_Byte1
ANL A,#0fCh

⌨️ 快捷键说明

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