分享

电子万年历的设计制作

 共同成长888 2013-07-30

电子万年历的设计制作

bsp;  ;再加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 P2.7,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 P2.7,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 P2.7,C

       MOV R6,A

       MOV A,R5

       JB ACC.0,AAA ;12月为小月,转到AAA

       MOV A,R2

       CLR C

       SUBB A,#30

       MOV P2.7,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 P2.7, 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时

 ; R3有值,否则为0

NEW:

  NOP

M1:

  MOV A,R2   ;R2减一月天数

  CLR C

  SUBB A,#29

  MOV R1,A

  MOV A,R6

  JB ACC.6,SM11

  MOV A,R2

  CLR C

  SUBB A,#30

  MOV R1,A

SM11:

  JC SM12

  MOV A,R1  ;R2减1月天数,够减

  MOV R2,A  ;转二月

  AJMP M2

SM12:

  CJNE R3,#00H,M13 ;R2减1月天数

  LJMP Y1           ;不够减,判R3为0否

M13:

  MOV A,R2          ;不为0,R3加到R2中

  ADD A,R3          ;再让一月减

  MOV R2,A          ;还不够,则转Y1

  MOV R3,#00H

  AJMP M1

M2:

  CLR C    ;R2减一月天数,够减

  MOV A,R2 ;转三月

  SUBB A,#29

  MOV R1,A

  MOV A,R6

  JB ACC.5,M21

  MOV A,R2

  CLR C

  SUBB A,#30

  MOV R1,A

M21:

  JC M22

  MOV A,R1  ;R2减2月天数,够减

  MOV R2,A

  AJMP MM2

M22:

  CJNE R3,#00H,M23  ;R2减2月天数

  LJMP Y2         ;不够减,判,R3为0否

M23:

  MOV A,R2        ;不为0,R3加到R2中

  ADD A,R3        ;再让二月减

  MOV R2,A        ;还不够,则转Y2

  MOV R3,#00H

  AJMP M2

MM2:

  LCALL CHECKRE   ;查2月,如果不为闰月

  CJNE A,#02H,M3  ;转3月

RM2:

  MOV A,R4

  ANL A,#0FH

  JNZ RM21

  MOV A,R2

  CLR C

  SUBB A,#30

  MOV R1,A

  AJMP RM22

RM21:

  MOV A,R2

  CLR C

  SUBB A,#29

  MOV R1,A

RM22:

  JC RM23

  MOV A,R1  ;R2减闰2月天数,够减

  MOV R2,A   ;转3月

  AJMP M3

RM23:

  CJNE R3,#00H,RM24 ;R2减闰2月天数

  LJMP RY2          ;不够减,判,R3为0否

RM24:

  MOV A,R2          ;不为0,R3加到R2中

  ADD A,R3          ;再让闰2月减

  MOV R3,#00H       ;还不够,则转RY2

  AJMP RM2

M3:

  MOV A,R2       ;R2减3月天数

  CLR C

  SUBB A,#29

  MOV R1,A

  MOV A,R6

  JB ACC.4,M31

  CLR C

  MOV A,R2

  SUBB A,#30

  MOV R1,A

M31:

  JC M32

  MOV A,R1          ;R2减3月天数,够减

  MOV R2,A

  AJMP MM3

M32:

  CJNE R3,#00H,M33  ;R2减3月天数

  LJMP Y3           ;不够减,判,R3为0否

M33:

  MOV A,R2           ;不为0,R3加到R2中

  ADD A,R3           ;再让3月减

  MOV R2,A            ;还不够,则转Y3

  MOV R3,#00H

  AJMP M3

MM3:

  LCALL CHECKRE    ;查3月,如果不为闰月

  CJNE A,#03H,M4   ;转4月

RM3:

  MOV A,R4

  ANL A,#0FH     ;R2减闰3月天数

  JNZ RM31

  MOV A,R2

  CLR C

  SUBB A,#30

  MOV R1,A

  AJMP RM32

RM31:

  MOV A,R2

  CLR C

  SUBB A,#29

  MOV R1,A

RM32:

  JC RM33

  MOV A,R1  ;R2减闰3月天数,够减

  MOV R2,A  ;转4月

  AJMP M4

RM33:

  CJNE R3,#00H,RM34 ;R2减闰3月天数

  LJMP RY3          ;不够减,判,R3为0否

RM34:

  MOV A,R2          ;不为0,R3加到R2中

  ADD A,R3          ;再让闰3月减

  MOV R2,A          ;还不够,则转RY3

  MOV R3,#00H

  AJMP RM3

M4:

  MOV A,R2

  CLR C           ;R2减4月天数

  SUBB A,#29

  MOV R1,A

  MOV A,R6

  JB ACC.2,M41

  CLR C

  MOV A,R2

  SUBB A,#30

  MOV R1,A

M41:

  JC M42

  MOV A,R1       ;R2减4月天数,够减

  MOV R2,A

  AJMP MM4

M42:

  CJNE R3,#00H,M43  ;R2减4月天数

  LJMP Y4           ;不够减,判,R3为0否

M43:

  MOV A,R2          ;不为0,R3加到R2中

  ADD A,R3          ;再让4月减

  MOV R2,A          ;还不够,则转Y4

  MOV R3,#00H

  AJMP M4

MM4:

  LCALL CHECKRE  ;查4月,如果不为闰月

  CJNE A,#04H,M5 ;转5月

RM4:

  MOV A,R4

  ANL A,#0FH    ;R2减闰4月天数

  JNZ RM41

  MOV A,R2

  CLR C

  SUBB A,#30

  MOV R1,A

  AJMP RM42

RM41:

  MOV A,R2

  CLR C

  SUBB A,#29

  MOV R1,A

RM42:

  JC RM43

  MOV A,R1   ;R2减闰4月天数,够减

  MOV R2,A   ;转5月

  AJMP M5

RM43:

  CJNE R3,#00H,RM44  ;R2减闰4月天数

  LJMP RY4           ;不够减,判,R3为0否

RM44:

  MOV A,R2           ;不为0,R3加到R2中

  ADD A,R3           ;再让闰4月减

  MOV R2,A

  MOV R3,#00H        ;还不够,则转Y4

  AJMP RM4

M5:

  MOV A,R2            ;R2减5月天数

  CLR C

  SUBB A,#29

  MOV R1,A

  MOV A,R6

  JB ACC.1,M51

  MOV A,R2

  CLR C

  SUBB A,#30

  MOV R1,A

M51:

  JC M52

  MOV A,R1    ;R2减5月天数,够减

  MOV R2,A

  AJMP MM5

M52:

  CJNE R3,#00H,M53  ;R2减5月天数

  LJMP Y5           ;不够减,判,R3为0否

M53:

  MOV A,R2          ;不为0,R3加到R2中

  ADD A,R3          ;再让5月减

  MOV R2,A          ;还不够,则转Y5

  MOV R3,#00H

  LJMP M5

MM5:

  LCALL CHECKRE   ;查5月,如果不为闰月

  CJNE A,#05H,M6  ;转6月

RM5:

  MOV A,R4        ;R2减闰5月天数

  ANL A,#0FH

  JNZ RM51

  MOV A,R2

  CLR C

  SUBB A,#30

  MOV R1,A

  LJMP RM52

RM51:

  MOV A,R2

  CLR C

  SUBB A,#29

  MOV R1,A

RM52:

  JC RM53

  MOV A,R1   ;R2减闰5月天数,够减

  MOV R2,A   ;转6月

  LJMP M6

RM53:

  CJNE R3,#00H,RM54   ;R2减闰5月天数

  LJMP RY5            ;不够减,判,R3为0否

RM54:

  MOV A,R2            ;不为0,R3加到R2中

  ADD A,R3            ;再让5月减

  MOV R2,A            ;还不够,则转RY5

  MOV R3,#00H

  LJMP RM5

M6:

  MOV A,R2        ;R2减6月天数

  CLR C

  SUBB A,#29

  MOV R1,A

  MOV A,R6

  JB ACC.0,M61

  MOV A,R2

  CLR C

  SUBB A,#30

  MOV R1,A

M61:

  JC M62

  MOV A,R1       ;R2减6月天数,够减

  MOV R2,A

  LJMP MM6

M62:

  CJNE R3,#00H,M63   ;R2减6月天数

  LJMP Y6            ;不够减,判,R3为0否

M63:

  MOV A,R2           ;不为0,R3加到R2中

  ADD A,R3           ;再让6月减

  MOV R2,A           ;还不够,则转Y6

  MOV R3,#00H

  LJMP M6

MM6:

  LCALL CHECKRE   ;查6月,如果不为闰月

  CJNE A,#06H,M7  ;转7月

RM6:

  MOV A,R4

  ANL A,#0FH       ;R2减闰6月天数

  JNZ RM61

  MOV A,R2

  CLR C

  SUBB A,#30

  MOV R1,A

  LJMP RM62

RM61:

  MOV A,R2

  CLR C

  SUBB A,#29

  MOV R1,A

RM62:

  JC RM63

  MOV A,R1    ;R2减闰6月天数,够减

  MOV R2,A    ;转7月

  LJMP M7

RM63:

  CJNE R3,#00H,RM64   ;R2减闰6月天数

  LJMP RY6            ;不够减,判,R3为0否

RM64:

  MOV A,R2            ;不为0,R3加到R2中

  ADD A,R3            ;再让闰6月减

  MOV R2,A            ;还不够,则转RY6

  MOV R3,#00H

  LJMP RM6

M7:

  MOV A,R2      ;R2减7月天数

  CLR C

  SUBB A,#29

  MOV R1,A

  MOV A,R5

  JB ACC.6,M71

  MOV A,R2

  CLR C

  SUBB A,#30

  MOV R1,A

M71:

  JC M72

  MOV A,R1     ;R2减7月天数,够减

  MOV R2,A

  LJMP MM7

M72:

  CJNE R3,#00H,M73   ;R2减7月天数

  LJMP Y7            ;不够减,判,R3为0否

M73:

  MOV A,R2           ;不为0,R3加到R2中

  ADD A,R3           ;再让6月减

  MOV R2,A           ;还不够,则转Y7

  MOV R3,#00H

  LJMP M7

MM7:

  LCALL CHECKRE   ;查7月,如果不为闰月

  CJNE A,#07H,M8  ;转8月

RM7:

  MOV A,R4

  ANL A,#0FH      ;R2减闰7月天数

  JNZ RM71

  MOV A,R2

  CLR C

  SUBB A,#30

  MOV R1,A

  LJMP RM72

RM71:

  MOV A,R2

  CLR C

  SUBB A,#29

  MOV R1,A

RM72:

  JC RM73

  MOV A,R1 ;R2减闰7月天数,够减

  MOV R2,A ;转8月

  LJMP M8

RM73:

  CJNE R3,#00H,RM74  ;R2减闰7月天数

  LJMP RY7           ;不够减,判,R3为0否

RM74:

  MOV A,R2           ;不为0,R3加到R2中

  ADD A,R3           ;再让闰7月减

  MOV R2,A           ;还不够,则转RY7

  MOV R3,#00H

  LJMP RM7

M8:

  MOV A,R2           ;R2减8月天数

  CLR C

  SUBB A,#29

  MOV R1,A

  MOV A,R5

  JB ACC.5,M81

  MOV A,R2

  CLR C

  SUBB A,#30

  MOV R1,A

M81:

  JC M82

  MOV A,R1   ;R2减8月天数,够减

  MOV R2,A   ;转9月

  LJMP M9

M82:

  CJNE R3,#00H,M83   ;R2减8月天数

  LJMP Y8            ;不够减,判,R3为0否

M83:

  MOV A,R2           ;不为0,R3加到R2中

  ADD A,R3            ;再让8月减

  MOV R2,A            ;还不够,则转Y8

  MOV R3,#00H

  LJMP M8

M9:

  MOV A,R2      ;R2减9月天数

  CLR C

  SUBB A,#29

  MOV R1,A

  MOV A,R5

  JB ACC.4,M91

  MOV A,R2

  CLR C

  SUBB A,#30

  MOV R1,A

M91:

  JC M92

  MOV A,R1   ;R2减9月天数,够减

  MOV R2,A

  LJMP MM9

M92:

  CJNE R3,#00H,M93   ;R2减9月天数

  LJMP Y9            ;不够减,判,R3为0否

M93:

  MOV A,R2           ;不为0,R3加到R2中

  ADD A,R3           ;再让9月减

  MOV R2,A            ;还不够,则转Y9

  MOV R3,#00H

  LJMP M9

MM9:

  LCALL CHECKRE    ;查9月,如果不为闰月

  CJNE A,#09H,M10  ;转10月

RM9:

  MOV A,R4         ;R2减闰9月天数

  ANL A,#0FH

  JNZ RM91

  MOV A,R2

  CLR C

  SUBB A,#30

  MOV R1,A

  LJMP RM92

RM91:

  MOV A,R2

  CLR C

  SUBB A,#29

  MOV R1,A

RM92:

  JC RM93

  MOV A,R1  ;R2减闰9月天数,够减

  MOV R2,A  ;转10月

  LJMP M10

RM93:

  CJNE R3,#00H,RM94  ;R2减闰9月天数

  LJMP RY9           ;不够减,判,R3为0否

RM94:

  MOV A,R2           ;不为0,R3加到R2中

  ADD A,R3           ;再让闰9月减

  MOV R2,A           ;还不够,则转RY9

  MOV R3,#00H

  LJMP RM9

M10:

  MOV A,R2       ;R2减10月天数

  CLR C

  SUBB A,#29

  MOV R1,A

  MOV A,R5

  JB ACC.2,M101

  MOV A,R2

  CLR C

  SUBB A,#30

  MOV R1,A

M101:

  JC M102

  MOV A,R1  ;R2减10月天数,够减

  MOV R2,A  ;转11月

  LJMP M11

M102:

  CJNE R3,#00H,M103     ;R2减10月天数

  LJMP Y10              ;不够减,判,R3为0否

M103:

  MOV A,R2              ;不为0,R3加到R2中

  ADD A,R3              ;再让10月减

  MOV R2,A              ;还不够,则转Y10

  MOV R3,#00H

  LJMP M10

M11:

  MOV A,R2          ;R2减11月天数

  CLR C

  SUBB A,#29

  MOV R1,A

  MOV A,R5

  JB ACC.1,M111

  MOV A,R2

  CLR C

  SUBB A,#30

  MOV R1,A

M111:

  JC M112

  MOV A,R1  ;R2减11月天数,够减

  MOV R2,A  ;转12月

  LJMP M12

M112:

  CJNE R3,#00H,M113   ;R2减11月天数

  LJMP Y11            ;不够减,判,R3为0否

M113:

  MOV A,R2            ;不为0,R3加到R2中

  ADD A,R3            ;再让11月减

  MOV R2,A            ;还不够,则转Y11

  MOV R3,#00H

  LJMP M11

M12:

  MOV A,R2      ;R2减12月天数

  CLR C

  SUBB A,#29

  MOV R1,A

  MOV A,R5

  JB ACC.0,M121

  CLR C

  MOV A,R2

  SUBB A,#30

  MOV R1,A

M121:

  CJNE R3,#00H,M122  ;R2减12月天数

  LJMP Y12           ;不够减,判,R3为0否

M122:

  MOV A,R2           ;不为0,R3加到R2中

  ADD A,R3           ;再让12月减

  MOV R2,A           ;还不够,则转Y12

  MOV R3,#00H

  LJMP M12

Y1:

  MOV A,R2

  MOV R0,A       ;R2中为日的值

  LCALL D_BCD

  MOV 56H,A

  MOV 57H,#01H

  CLR F0    ;非闰月

  LJMP S_PLAY

Y2:

  CJNE R2,#00H,Y21

  MOV A,R6      ;R2中为0,则为前一个月

  MOV 56H,#29H  ;的的最后一天

  JB ACC.6,Y22

  MOV 56H,#30H

Y22:

  MOV 57H,#01H

  CLR F0

  LJMP S_PLAY

Y21:

  MOV A,R2

  MOV R0,A     ;R2中为日的值

  LCALL D_BCD

  MOV 56H,A

  MOV 57H,#02H

  CLR F0

  LJMP S_PLAY

RY2:

  CJNE R2,#00H,RY21

  MOV 56H,#29H  ;R2中为0,则为前一个月

  MOV A,R6      ;的的最后一天

  JB ACC.5,RY22

  MOV 56H,#30H

RY22:

  MOV 57H,#02H

  CLR F0

  LJMP S_PLAY

RY21:

  MOV A,R2     ;R2中为日的值

  MOV R0,A

  LCALL D_BCD

  MOV 56H,A

  MOV 57H,#02H

  SETB F0      ;闰月

  LJMP S_PLAY

Y3:

  CJNE R2,#00H,Y31

  LCALL CHECKRE     ;查前一个月是否为闰月

  CJNE A,#02H,Y32

  MOV 56H,#29H      ;前一个月是闰月

  MOV A,R4

  ANL A,#0FH  ;R2中为0,则为前一个月

  JNZ Y33 ;的的最后一天

  MOV 56H,#30H

  MOV 57H,#02H

  SETB F0

  LJMP S_PLAY

Y33:

  MOV 57H,#02H

  SETB F0

  LJMP S_PLAY

Y32:

  MOV 56H,#29H  ;前一个月不是闰月

  MOV A,R6

  JB ACC.5,Y34

  MOV 56H,#30H

Y34:

  MOV 57H,#02H

  CLR F0

  LJMP S_PLAY

Y31:

  MOV A,R2

  MOV R0,A      ;R2中为日的值

  LCALL D_BCD

  MOV 56H,A

  MOV 57H,#03H

  CLR F0

  LJMP S_PLAY

RY3:

  CJNE R2,#00H,RY31

  MOV 56H,#29H

  MOV A,R6

  JB ACC.4,RY32   ;R2中为0,则为前一个月

  MOV 56H,#30H    ;的的最后一天

RY32:

  MOV 57H,#03H

  CLR F0

  LJMP S_PLAY

RY31:

  MOV A,R2       ;R2中为日的值

  MOV R0,A

  LCALL D_BCD

  MOV 56H,A

  MOV 57H,#03H

  SETB F0

  LJMP S_PLAY

Y4:

  CJNE R2,#00H,Y41

  LCALL CHECKRE    ;查前一个月是否为闰月

  CJNE A,#03H,Y42

  MOV 56H,#29H     ;前一个月是闰月

  MOV A,R4         ;R2中为0,则为前一个月

  ANL A,#0FH       ;的最后一天

  JNZ Y43

  MOV 56H,#30H

  MOV 57H,#03H

  SETB F0

  LJMP S_PLAY

Y43:

  MOV 57H,#03H

  SETB F0

  LJMP S_PLAY

Y42:

  MOV 56H,#29H  ;前一个月不是闰月

  MOV A,R6

  JB ACC.4,Y44

  MOV 56H,#30H

Y44:

  MOV 57H,#03H

  CLR F0

  LJMP S_PLAY

Y41:

  MOV A,R2       ;R2中为日的值

  MOV R0,A

  LCALL D_BCD

  MOV 56H,A

  MOV 57H,#04H

  CLR F0

  LJMP S_PLAY

RY4:

  CJNE R2,#00H,RY41

  MOV 56H,#29H    ;R2中为0,则为前一个月

  MOV A,R6        ;的的最后一天

  JB ACC.2,RY42

  MOV 56H,#30H

RY42:

  MOV 57H,#04H

  CLR F0

  LJMP S_PLAY

RY41:

  MOV A,R2       ;R2中为日的值

  MOV R0,A

  LCALL D_BCD

  MOV 56H,A

  MOV 57H,#04H

  SETB F0

  LJMP S_PLAY

Y5:

  CJNE R2,#00H,Y51

  LCALL CHECKRE      ;查前一个月是否为闰月

  CJNE A,#04H,Y52

  MOV 56H,#29H       ;前一个月是闰月

  MOV A,R4           ;R2中为0,则为前一个月

  ANL A,#0FH         ;的最后一天

  JNZ Y53

  MOV 56H,#30H

  MOV 57H,#04H

  SETB F0

  LJMP S_PLAY

Y53:

  MOV 57H,#04H

  SETB F0

  LJMP S_PLAY

Y52:

  MOV 56H,#29H   ;前一个月不是闰月

  MOV A,R6

  JB ACC.2,Y54

  MOV 56H,#30H

Y54:

  MOV 57H,#04H

  CLR F0

  LJMP S_PLAY

Y51:

  MOV A,R2       ;R2中为日的值

  MOV R0,A

  LCALL D_BCD

  MOV 56H,A

  MOV 57H,#05H

  CLR F0

  LJMP S_PLAY

RY5:

  CJNE R2,#00H,RY51

  MOV 56H,#29H    ;R2中为0,则为前一个月

  MOV A,R6        ;的最后一天

  JB ACC.1,RY52

  MOV 56H,#30H

RY52:

  MOV 57H,#05H

  CLR F0

  LJMP S_PLAY

RY51:

  MOV A,R2     ;R2中为日的值

  MOV R0,A

  LCALL D_BCD

  MOV 56H,A

  MOV 57H,#05H

  SETB F0

  LJMP S_PLAY

Y6:

  CJNE R2,#00H,Y61

  LCALL CHECKRE   ;查前一个月是否为闰月

  CJNE A,#05H,Y62

  MOV 56H,#29H    ;前一个月是闰月

  MOV A,R4        ;R2中为0,则为前一个月

  ANL A,#0FH      ;的最后一天

  JNZ Y63

  MOV 56H,#30H

  MOV 57H,#05H

  SETB F0

  LJMP S_PLAY

Y63:

  MOV 57H,#05H

  SETB F0

  LJMP S_PLAY

Y62:

  MOV 56H,#29H    ;前一个月不是闰月

  MOV A,R6

  JB ACC.1,Y64

  MOV 56H,#30H

Y64:

  MOV 57H,#05H

  CLR F0

  LJMP S_PLAY

Y61:

 MOV A,R2;R2中为日的值

  MOV R0,A

  LCALL D_BCD

  MOV 56H,A

  MOV 57H,#06H

  CLR F0

  LJMP S_PLAY

RY6:

  CJNE R2,#00H,RY61

  MOV 56H,#29H    ;R2中为0,则为前一个月

  MOV A,R6 ;的最后一天

  JB ACC.0,RY62

  MOV 56H,#30H

RY62:

  MOV 57H,#06H

  CLR F0

  LJMP S_PLAY

RY61:

  MOV A,R2     ;R2中为日的值

  MOV R0,A

  LCALL D_BCD

  MOV 56H,A

  MOV 57H,#06H

  SETB F0

  LJMP S_PLAY

Y7:

  CJNE R2,#00H,Y71

  LCALL CHECKRE    ;查前一个月是否为闰月

  CJNE A,#06H,Y72

  MOV 56H,#29H     ;前一个月是闰月

  MOV A,R4         ;R2中为0,则为前一个月

  ANL A,#0FH       ;的最后一天

  JNZ Y73

  MOV 56H,#30H

  MOV 57H,#06H

  SETB F0

  LJMP S_pLAY

Y73:

  MOV 57H,#06H

  SETB F0

  LJMP S_PLAY

Y72:

  MOV 56H,#29H   ;前一个月不是闰月

  MOV A,R6

  JB ACC.0,Y74

  MOV 56H,#30H

Y74:

  MOV 57H,#06H

  CLR F0

  LJMP S_PLAY

Y71:

  MOV A,R2        ;R2中为日的值

  MOV R0,A

  LCALL D_BCD

  MOV 56H,A

  MOV 57H,#07H

  CLR F0

  LJMP S_PLAY

RY7:

  CJNE R2,#00H,RY71

  MOV 56H,#29H    ;R2中为0,则为前一个月

  MOV A,R5        ;的最后一天

  JB ACC.6,RY72

  MOV 56H,#30H

RY72:

  MOV 57H,#07H

  CLR F0

  LJMP S_PLAY

RY71:

  MOV A,R2       ;R2中为日的值

  MOV R0,A

  LCALL D_BCD

  MOV 56H,A

  MOV 57H,#07H

  SETB F0

  LJMP S_PLAY

Y8:

  CJNE R2,#00H,Y81

  LCALL CHECKRE    ;查前一个月是否为闰月

  CJNE A,#07H,Y82

  MOV 56H,#29H     ;前一个月是闰月

  MOV A,R4         ;R2中为0,则为前一个月

  ANL A,#0FH       ;的最后一天

  JNZ Y83

  MOV 56H,#30H

  MOV 57H,#07H

  SETB F0

  LJMP S_PLAY

Y83:

  MOV 57H,#07H

  SETB F0

  LJMP S_PLAY

Y82:

  MOV 56H,#29H  ;前一个月不是闰月

  MOV A,R5

  JB ACC.6,Y84

  MOV 56H,#30H

Y84:

  MOV 57H,#07H

  CLR F0

  LJMP S_PLAY

Y81:

MOV A,R2 ;R2中为日的值

  MOV R0,A

  LCALL D_BCD

  MOV 56H,A

  MOV 57H,#08H

  CLR F0

  LJMP S_PLAY

Y9:

  CJNE R2,#00H,Y91

  MOV 56H,#29H   ;R2中为0,则为前一个月

  MOV A,R5       ;的最后一天

  JB ACC.5,Y92

  MOV 56H,#30H

Y92:

  MOV 57H,#08H

  CLR F0

  LJMP S_PLAY

Y91:

  MOV A,R2     ;R2中为日的值

  MOV R0,A

  LCALL D_BCD

  MOV 56H,A

  MOV 57H,#09H

  CLR F0

  LJMP S_PLAY

RY9:

  CJNE R2,#00H,RY91

  MOV 56H,#29H    ;R2中为0,则为前一个月

  MOV A,R5;的最后一天

  JB ACC.4,RY92

  MOV 56H,#30H

RY92:

  MOV 57H,#09H

  CLR F0

  LJMP S_PLAY

RY91:

MOV A,R2;R2中为日的值

  MOV R0,A

  LCALL D_BCD

  MOV 56H,A

  MOV 57H,#09H

  SETB F0

  LJMP S_PLAY

Y10:

  CJNE R2,#00H,Y101

  LCALL CHECKRE    ;查前一个月是否为闰月

  CJNE A,#09H,Y102

  MOV 56H,#29H     ;前一个月是闰月

  MOV A,R4         ;R2中为0,则为前一个月

  ANL A,#0FH       ;的最后一天

  JNZ Y103

  MOV 56H,#30H

  MOV 57H,#09H

  SETB F0

  LJMP S_PLAY

Y103:

  MOV 57H,#09H

  SETB F0

  LJMP S_PLAY

Y102:

  MOV 56H,#29H    ;前一个月不是闰月

  MOV A,R5

  JB ACC.4,Y104

  MOV 56H,#30H

Y104:

  MOV 57H,#09H

  CLR F0

  LJMP S_PLAY

Y101:

 MOV A,R2;R2中为日的值

  MOV R0,A

  LCALL D_BCD

  MOV 56H,A

  MOV 57H,#10H

  CLR F0

  LJMP S_PLAY

Y11:

  CJNE R2,#00H,Y111

  MOV 56H,#29H     ;R2中为0,则为前一个月

  MOV A,R5         ;的最后一天

  JB ACC.2,Y112

  MOV 56H,#30H

Y112:

  MOV 57H,#10H

  CLR F0

  LJMP S_PLAY

Y111:

  MOV A,R2    ;R2中为日的值

  MOV R0,A

  LCALL D_BCD

  MOV 56H,A

  MOV 57H,#11H

  CLR F0

  LJMP S_PLAY

Y12:

  CJNE R2,#00H,Y121

  MOV 56H,#29H     ;R2中为0,则为前一个月

  MOV A,R5 ;的最后一天

  JB ACC.1,Y122

  MOV 56H,#30H

Y122:

  MOV 57H,#11H

  CLR F0

  LJMP S_PLAY

Y121:

MOV A,R2;R2中为日的值

  MOV R0,A

  LCALL D_BCD

  MOV 56H,A

  MOV 57H,#12H

  CLR F0

  LJMP S_PLAY

S_PLAY:

  MOV R0,57H

  LCALL DIVIDE  ;月分离送显示缓存

  MOV 52H,R1

  MOV 53H,R2

  MOV R0,56H

  LCALL DIVIDE  ;日分离送显示缓存

  MOV 50H,R1

  MOV 51H,R2

  RET

;查是否闰月程序;;

CHECKRE:

  MOV A,R4

  SWAP A

  ANL A,#0FH

  RET

;10进制转换为BCD码程序;

D_BCD:

  MOV A,R0

  MOV B,#10

  DIV AB

  SWAP A

  ORL A,B

  RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;显示程序;;;

DISPLAY:

  MOV A,10H

  ANL A,#00001111B

  MOV 59H,A

  MOV A,76H;第八列LED

  ANL A,#00001111B

  SWAP A

  ADD A,59H

  MOV P1,A

  MOV A,70H

  ANL A,#00001111B

  ADD A,#01110000B

  MOV P2,A

  LCALL DL1MS

  MOV P1,#0FFH

  MOV A,10H

  ANL A,#11110000B

  SWAP A

  MOV 5AH,A

  MOV A,77H;第七列LED

  ANL A,#00001111B

  SWAP A

  ADD A,5AH

  MOV P1,A

  MOV A,71H

  ANL A,#00001111B

  ADD A,#01100000B

  MOV P2,A

  LCALL DL1MS

  MOV P1,#0FFH

  MOV A,56H ;第六列LED

  SWAP A

  ANL A,#11110000B

  ADD A,79H

  SWAP A

  MOV P1,A

  MOV A,72H

  ANL A,#00001111B

  ADD A,#01010000B

  MOV P2,A

  LCALL DL1MS

  MOV P1,#0FFH

  MOV A,56H;第五列LED

  ANL A,#11110000B

  ADD A,7AH

  SWAP A

  MOV P1,A

  MOV A,73H

  ANL A,#00001111B

  ADD A,#01000000B

  MOV P2,A

  LCALL DL1MS

  MOV P1,#0FFH

  MOV A,57H ;第四列LED

  SWAP A

  ANL A,#11110000B

  ADD A,7BH

  SWAP A

  MOV P1,A

  MOV A,74H

  ANL A,#00001111B

  ADD A,#00110000B

  MOV P2,A

  LCALL DL1MS

  MOV P1,#0FFH

  MOV A,57H;第三列LED

  ANL A,#11110000B

  ADD A,7CH

  SWAP A

  MOV P1,A

  MOV A,75H

  ANL A,#00001111B

  ADD A,#00100000B

  MOV P2,A

  LCALL DL1MS

  MOV P1,#0FFH

  MOV P1,#00001111B

  MOV P2,#00011111B   ;第二列LED

  LCALL DL1MS

  MOV P1,#0FFH

  MOV A,78H;第一列LED

  ANL A,#00001111B

  ADD A,#00100000B

  MOV P1,A

  MOV P2,#00001111B

  LCALL DL1MS

  MOV P1,#0FFH

  RET

ZJ:

  MOV 01H,#150

ZZZ1:

  MOV P2,#00001000B

  MOV P1,#88H

  LCALL DL1MS

  MOV P2,#00011000B

  MOV P1,#88H

  LCALL DL1MS

  MOV P2,#00101000B

  MOV P1,#88H

  LCALL DL1MS

  MOV P2,#00111000B

  MOV P1,#88H

  LCALL DL1MS

  MOV P2,#01001000B

  MOV P1,#88H

  LCALL DL1MS

  MOV P2,#01011000B

  MOV P1,#88H

  LCALL DL1MS

  MOV P2,#01101000B

  MOV P1,#88H

  LCALL DL1MS

  MOV P2,#01111000B

  MOV P1,#88H

  LCALL DL1MS

  DJNZ 01H,ZZZ1

  MOV P1,#0FFH

  RET

DL1MS:

  MOV R6,#14H

DL1:

  MOV R7,#19H

DL2:

  DJNZ R7,DL2

  DJNZ R6,DL1

  RET

;~~~~~数据表~~~~~~~

TAB:

  DB 35,15H,51H,00H,23,11H,52H,41H,42,12H,65H,00H

  DB 31,11H,32H,00H,21,42H,52H,21H,39,52H,25H,00H

  DB 28,25H,05H,71H,48,66H,42H,00H,37,33H,22H,00H

  DB 25,15H,24H,51H,44,05H,52H,00H,33,22H,65H,00H

  DB 22,21H,25H,41H,40,24H,52H,00H,30,52H,42H,91H

  DB 49,55H,05H,00H,38,26H,44H,00H,27,53H,50H,60H

  DB 46,53H,24H,00H,35,25H,54H,00H,24,41H,52H,41H

  DB 42,45H,25H,00H,31,24H,52H,00H,21,51H,12H,21H

  DB 40,55H,11H,00H,28,26H,21H,61H,47,26H,61H,00H

  DB 36,13H,31H,00H,25,05H,31H,51H,43,12H,54H,00H

  DB 33,51H,25H,00H,22,42H,25H,31H,41,32H,22H,00H

  DB 30,55H,02H,71H,49,55H,22H,00H,38,26H,62H,00H

  DB 27,13H,64H,60H,45,13H,32H,00H,34,12H,55H,00H

  DB 23,10H,53H,51H,42,22H,45H,00H,31,52H,22H,00H

  DB 21,52H,44H,21H,40,55H,44H,00H,29,26H,50H,71H

  DB 47,26H,64H,00H,36,25H,32H,00H,25,23H,32H,50H

  DB 44,44H,55H,00H,32,24H,45H,00H,22,55H,11H,30H

  END


敬请留意:

1、文档中的页码设置中出了些不明原因的问题,有任何修改时请一定注意查看页码是否发生变化。

2、已将另一版本的报告上传至百度文库,相信你已经看到了⊙﹏⊙。

3、此文档的主干内容来源于网络,笔者进行了很大修改,但其中汇编程序太过繁杂,需要花很多时间才能理解。

4、学习是自己的事情,任务完成之后一定要确保自己有所收获。

……

愿你学习进步,天天快乐O(∩_∩)O~

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多