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

📄 万年历最终版.asm

📁 用89S52实现的万年历
💻 ASM
📖 第 1 页 / 共 4 页
字号:
                                          MOV A,R0
                                          SWAP A
                                          ANL A,#0FH
                                          MOV B,#10
                                          MUL AB
                                          ADD A,R1
                                          MOV R0,A
                                          RET
                              ;********************************
                              ;*       查一年数据程序         *
                              ;********************************
                              CHECKMONTH: LCALL BCD_10
                                          MOV A,R0
                                          MOV B,#04
                                          MUL AB
                                          MOV R1,A
                                          MOV DPTR,#TAB
                                          MOVC A,@A+DPTR
                                          MOV R7,A                      ;第1字节送R7
                                          INC R1
                                          MOV A,R1
                                          MOVC A,@A+DPTR
                                          MOV R6,A                       ;第2字节送R6
                                          INC R1
                                          MOV A,R1
                                          MOVC A,@A+DPTR
                                          MOV R5,A                        ;第3字节送R5
                                          INC R1
                                          MOV A,R1
                                          MOVC A,@A+DPTR
                                          MOV R4,A                       ;第4字节送R4
                                          RET



;******************************
                               ;*        自动更新农历        *
                               ;******************************
                                
								  GENGXIAN:    MOV R2,#00H
	                   MOV R3,#00H
                           MOV A,month
                           CJNE A,#01H,GM2
                           MOV R0,day   ;当前月为一月
                           LCALL BCD_10 ;当前日转换为10进制,送R2
                           MOV A,R0
                           MOV R2,A
                           AJMP TIAOZHENG1
                   GM2:  CJNE A,#02H,GM3
                           MOV R0,day    ;当前月为二月
                           LCALL BCD_10 ;;当前日转换为10进制,
                           MOV A,R0      ;再加31,送R2
                           ADD A,#31
                           MOV R2,A
                           AJMP TIAOZHENG1
                    GM3: CJNE A,#03H,GM4
                           MOV R0,day    ;当前月为三月
                           LCALL BCD_10  ;当前日转换为10进制,
                           MOV A,R0      ;再加59,送R2
                           ADD A,#59
                           MOV R2,A
                           AJMP TIAOZHENG1
                   GM4:  CJNE A,#04H,GM5
                           MOV R0,day     ;当前月为四月
                           LCALL BCD_10   ;;当前日转换为10进制,
                           MOV A,R0       ;再加90,送R2
                           ADD A,#90
                           MOV R2,A
                           AJMP TIAOZHENG1
                    GM5: CJNE A,#05H,GM6
                           MOV R0,day     ;当前月为五月
                           LCALL BCD_10   ;当前日转换为10进制,
                           MOV A,R0       ;再加120,送R2
                           ADD A,#120
                           MOV R2,A
                           AJMP TIAOZHENG1
                    GM6: CJNE A,#06H,GM7
                           MOV R0,day     ;当前月为六月
                           LCALL BCD_10   ;当前日转换为10进制,
                           MOV A,R0       ;再加151,送R2
                           ADD A,#151
                           MOV R2,A
                           AJMP TIAOZHENG1
                    GM7: CJNE A,#07H,GM8
                           MOV R0,day     ;当前月位七月
                           LCALL BCD_10   ;当前日转换为10进制,
                           MOV A,R0       ;再加181,送R2
                           ADD A,#181
                           MOV R2,A
                           AJMP TIAOZHENG1
                     GM8:CJNE A,#08H,GM9
                           MOV R0,day     ;当前月为八月
                           LCALL BCD_10   ;当前日转换为10进制,
                           MOV A,R0       ;再加212,送R2
                           ADD A,#212
                           MOV R2,A
                           AJMP TIAOZHENG1
                     GM9:CJNE A,#09H,GM10
                           MOV R0,day    ;当前月为九月
                           LCALL BCD_10  ;当前日转换为10进制,
                           MOV A,R0      ;再加243
                           CLR C
                           ADD A,#243
                           JC GGG
                           MOV R2,A       ;A没有溢出,送R2
                           AJMP TIAOZHENG1
                   GGG:  MOV R3,#0FFH   ;A溢出,A加一送R2
                           INC A          ;R3中送#0ffh
                           MOV R2,A
                           AJMP TIAOZHENG1
                   GM10: CJNE A,#10H,GM11
                           MOV R0,day    ;当前月为10月
                           LCALL BCD_10   ;当前日转换为10进制,
                           MOV A,R0       ;再加18,送R2
                           ADD A,#18      ;R3中送#0FFH
                           MOV R2,A
                           MOV R3,#0FFH
                           AJMP TIAOZHENG1
                    GM11:CJNE A,#11H,GM12
                           MOV R0,day    ;当前月为11月
                           LCALL BCD_10  ;当前日转换为10进制,
                           MOV A,R0      ;再加49,送R2
                           ADD A,#49     ;R3中送#0FFH
                           MOV R2,A
                           MOV R3,#0FFH
                           AJMP TIAOZHENG1
                   GM12: MOV R0,day     ;当前月为12月
                           LCALL BCD_10   ;当前日转换为10进制,
                           MOV A,R0       ;再加79,送R2
                           ADD A,#79      ;R3中送#0FFH
                           MOV R2,A
                           MOV R3,#0FFH
                           AJMP TIAOZHENG1
            TIAOZHENG1: MOV A,year
                           MOV B,#04
                           DIV AB
                           MOV A,B
                           JNZ GGG1
                           MOV A,65H   ;当前年为闰年
                           CJNE A,#01H,AAAA
                           AJMP GGG1        ;当前月是1
                AAAA:   CJNE A,#02H,BBBB
                           AJMP GGG1       ;当前月是2
                BBBB:   CJNE  R2,#0FFH,GGG2
                           MOV R3,#0FFH   ;当前月不是1和2,
                           MOV R2,#01H    ;R1和R2总和加一
                           AJMP GGG1
                GGG2:   INC R2
                GGG1:   MOV R0,year    ;查一年数据
                           LCALL CHECKMONTH
                           MOV A,R2
                           CLR C
                           SUBB A,R7
                           MOV 2EH.4,C
                           CJNE A,#01H,GGG3
                           MOV R2,#01H
                           MOV A,R3
                           CJNE A,#00H,NEW1
                           MOV  57H,#01H   ;R2和R3总和减R7
                           MOV  56H,#01H   ;为0,则为春节
                           LJMP S_PLAY
                  GGG3:  CJNE A,#00H,GGG6
                           MOV R2,A
                           AJMP OLD
                  GGG6: JNB 2EH.4,NEW2
                           MOV A,R7
                           CLR C
                           SUBB A,R2
                           MOV R7,A
                           CJNE R3,#0FFH,GGG5
                           MOV A,R3
                           CLR C
                           SUBB A,R7
                           MOV R2,A
                           MOV R3,#00H
                           AJMP NEW
                  GGG5:  MOV A,R7
                           MOV R2,A
                           AJMP OLD
                   NEW1: MOV R2,#0FFH
                           MOV R3,#01H
                           AJMP NEW
                   NEW2: MOV R2,A
                           MOV A,R3
                           CJNE A,#0FFH,GGG4
                           MOV A,R2
                           MOV R3,A
                           MOV R2,#0FFH
                   GGG4: AJMP NEW

  ;OLD 农历为公历的前一年

                 OLD:    MOV A,year
                           DEC A
                           MOV R0,A
                           LCALL CHECKMONTH
                           MOV A,R2
                           CLR C
                           SUBB A,#29
                           MOV 2EH.4,C
                           MOV R6,A
                           MOV A,R5
                           JB ACC.0,AAA ;12月为小月,转到AAA
                           MOV A,R2
                           CLR C
                           SUBB A,#30
                           MOV 2EH.4,C
                           MOV R6,A
                     AAA:MOV A,R6
                           CJNE A,#00H,BBB
                           MOV 56H,#29H ;为0,则为11月最后一天
                           MOV A,R5    ;小月为11月29
                           JB ACC.1,CCC
                           MOV 56H,#30H  ;大月为11月30
                     CCC:MOV 57H,#11H
                           LJMP S_PLAY
                     BBB:JNB 2EH.4, DDD
                           MOV A,#29  ; CY位置位,位12月
                           CLR C
                           SUBB A,R2
                           MOV R4,A
                           MOV A,R5
                           JB ACC.0,EEE
                           MOV A,#30
                           CLR C
                           SUBB A,R2
                           MOV R4,A
                    EEE: MOV A,R4
                           MOV R0,A
                           LCALL D_BCD
                           MOV 56H,A
                           MOV 57H,#12H
                           LJMP S_PLAY
                    DDD: MOV A,#29 ;CY为0,为11月
                           CLR C
                           SUBB A,R4
                           MOV R1,A
                           MOV A,R5
                           JB ACC.1, FFF
                           MOV A,#30
                           CLR C
                           SUBB A,R4
                           MOV R1,A
                   FFF:   MOV A,R1
                           MOV R0,A
                           LCALL D_BCD
                           MOV 56H,A
                           MOV 57H,#11H
                           LJMP S_PLAY
 ;NEW此时R2中的值为FFH时

⌨️ 快捷键说明

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