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

📄 万年历_2.asm

📁 制作一个温度万年历
💻 ASM
字号:
                                      ;*****************************
  ;*        万年历程序         *
 ;*****************************
 ;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
YEAR  DATA 66H
MONTH DATA 65H
WEEK  DATA 64H
DAY   DATA 63H
HOUR  DATA 62H
MINUTE DATA 61H
SECOND  DATA 60H
DS1302_ADDR DATA 32H
DS1302_DATA DATA 31H
                 ORG  0000H
                 AJMP START
                 ORG  0003H
                 RETI
                 ORG  000BH
                 RETI
                 ORG  0013H
                 RETI
                 ORG  001BH
                 LJMP INTT1

                 ORG  0023H
                 RETI
                 ORG  002BH
                 RETI

    ;************************************
     ;*            主程序                *
   ;************************************
   START:   SETB EA
            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

            ;MOV DS1302_ADDR,#80H
            ;MOV DS1302_DATA,#00H       ;允许写1302
            ;LCALL WRITE


            MOV DS1302_ADDR,#90H
            MOV DS1302_DATA,#0A6H       ;1302充电,充电电流1.1mA
            LCALL WRITE
 MAIN1:     MOV DS1302_ADDR,#8DH         ;READ OUT YEAR
            LCALL READ
            MOV 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 MONTH,DS1302_DATA
            MOV DS1302_ADDR,#87H          ;READ OUT DAY
            LCALL READ
            MOV 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 MINUTE,DS1302_DATA
            MOV DS1302_ADDR,#81H       ;READ OUT SECOND
            LCALL READ
            MOV SECOND,DS1302_DATA

            MOV     R0,YEAR
            LCALL   DIVIDE
            MOV     7BH,R1
            MOV     4BH,R1
            MOV    7CH,R2
            MOV    4CH,R2
            MOV     78H,WEEK
            MOV     48H,WEEK

            MOV     R0,MONTH
            LCALL   DIVIDE
            MOV     79H,R1
            MOV     49H,R1
            MOV    7AH,R2
            MOV    4AH,R2

            MOV     R0,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,MINUTE
            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    DISPLAY

            JNB      P1.1,SETG
            JNB      F0,SSS
            CLR      P1.3
            LJMP     MAIN1

SSS:        SETB     P1.3
            LJMP     MAIN1


   ;*********************************
;*         公历           *
  ;*********************************

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

            LCALL  WRITE

            MOV    DS1302_ADDR,#80H
            MOV    DS1302_DATA,#80H
            LCALL  WRITE

GWAIT:      LCALL   DISPLAY
            JNB     P1.1,GWAIT

SETG1:      LCALL   DISPLAY
            JNB     P1.1,SETG2
            JNB     P1.2,GADDYEAR
            AJMP    SETG1

GADDYEAR:   MOV     R7,66H
            LCALL   ADD1
            MOV     66H,A
            CJNE    A,#51H,GADDYEAR1
            MOV     66H,#01H

GADDYEAR1:  MOV     DS1302_ADDR,#8CH
            MOV     DS1302_DATA,66H
            LCALL   WRITE
            MOV     R0,66H
            LCALL   DIVIDE
            MOV     4BH,R1
            MOV     7BH,R1
            MOV     4CH,R2
            MOV     7CH,R2

WAITT1:      LCALL   DISPLAY
            JNB     P1.2,WAITT1
            AJMP    SETG1

SETG2:      SETB    0AH

GWAITT2:     LCALL   DISPLAY
            JNB     P1.1,GWAITT2

SETG3:      LCALL   DISPLAY
            JNB     P1.1,SETG4
            JNB     P1.2,GADDMONTH
            AJMP    SETG3

GADDMONTH:   MOV     R7,65H
            LCALL   ADD1
            MOV     65H,A
            CJNE    A,#13H,GADDMONTH1
            MOV     65H,#01H

GADDMONTH1:  MOV     DS1302_ADDR,#88H
            MOV     DS1302_DATA,65H
            LCALL   WRITE
            MOV     R0,65H
            LCALL   DIVIDE
            MOV     49H,R1
            MOV     79H,R1
            MOV     4AH,R2
            MOV     7AH,R2

WAITT2:      LCALL   DISPLAY
            JNB     P1.2,WAITT2
            AJMP    SETG3

SETG4:      SETB    0BH

GWAIT4:     LCALL   DISPLAY
            JNB     P1.1,GWAIT4

SETG5:      LCALL   DISPLAY
            JNB     P1.1,SETG6
            JNB     P1.2,GADDDAY
            AJMP    SETG5



GADDDAY:   MOV     R7,63H
            LCALL   ADD1
            MOV     63H,A
            CJNE    A,#32H,GADDDAY1
            MOV     63H,#01H

GADDDAY1:  MOV     DS1302_ADDR,#86H
            MOV     DS1302_DATA,63H
            LCALL   WRITE
            MOV     R0,63H
            LCALL   DIVIDE
            MOV     46H,R1
            MOV     76H,R1
            MOV     47H,R2
            MOV     77H,R2

WAITT3:      LCALL   DISPLAY
            JNB     P1.2,WAITT3
            AJMP    SETG5

SETG6:      SETB    0CH

GWAIT6:     LCALL   DISPLAY
            JNB     P1.1,GWAIT6

SETG7:      LCALL   DISPLAY
            JNB     P1.1,SETG8
            JNB     P1.2,GADDWEEK
            AJMP    SETG7




GADDWEEK:   MOV     R7,64H
            LCALL   ADD1
            MOV     64H,A
            CJNE    A,#08H,GADDWEEK1
            MOV     64H,#01H

GADDWEEK1:  MOV     DS1302_ADDR,#8AH
            MOV     DS1302_DATA,64H
            LCALL   WRITE
            MOV     R0,64H
            LCALL   DIVIDE
            MOV     48H,R1
            MOV     78H,R1


WAITT4:      LCALL   DISPLAY
            JNB     P1.2,WAITT4
            AJMP    SETG7

SETG8:      SETB    0DH

GWAIT8:     LCALL   DISPLAY
            JNB     P1.1,GWAIT8

SETG9:      LCALL   DISPLAY
            JNB     P1.1,SETG10
            JNB     P1.2,GADDHOUR
            AJMP    SETG9



GADDHOUR:   MOV     R7,62H
            LCALL   ADD1
            MOV     62H,A
            CJNE    A,#24H,GADDHOUR1
            MOV     62H,#00H

GADDHOUR1:  MOV     DS1302_ADDR,#84H
            MOV     DS1302_DATA,62H
            LCALL   WRITE
            MOV     R0,62H
            LCALL   DIVIDE
            MOV     44H,R1
            MOV     74H,R1
            MOV     45H,R2
            MOV     75H,R2

WAITT5:      LCALL   DISPLAY
            JNB     P1.2,WAITT5
            AJMP    SETG9

SETG10:      SETB    0EH

GWAIT10:     LCALL   DISPLAY
            JNB     P1.1,GWAIT10

SETG11:      LCALL   DISPLAY
            JNB     P1.1,SETGOUT
            JNB     P1.2,GADDMINUTE
            AJMP    SETG11


GADDMINUTE:   MOV     R7,61H
            LCALL   ADD1
            MOV     61H,A
            CJNE    A,#60H,GADDMINUTE1
            MOV     61H,#00H

GADDMINUTE1:  MOV     DS1302_ADDR,#82H
            MOV     DS1302_DATA,61H
            LCALL   WRITE
            MOV     R0,61H
            LCALL   DIVIDE
            MOV     42H,R1
            MOV     72H,R1
            MOV     43H,R2
            MOV     73H,R2

WAITT6:      LCALL   DISPLAY
            JNB     P1.2,WAITT6
            AJMP    SETG11

SETGOUT:    LCALL   DISPLAY
            JNB     P1.1,SETGOUT
             MOV DS1302_ADDR,#80H
            MOV DS1302_DATA,#00H       ;允许写1302
            LCALL WRITE

             MOV DS1302_ADDR,#8EH
            MOV DS1302_DATA,#80H       ;允许写1302
            LCALL WRITE

            CLR   08H
            CLR   09H
            CLR    0AH
            CLR    0BH
            CLR    0CH
            CLR    0DH
            CLR    0EH
            CLR    0FH

            CLR    ET1
            CLR    TR1


            LJMP    MAIN1


    ;*********************************
;*         散动         *
  ;*********************************

INTT1:   PUSH     ACC
         PUSH     PSW

GFLASH:  CPL      0FH
         JB       0FH,GFLASH1
         MOV      7CH,4CH
         MOV      7BH,4BH
         MOV      7AH,4AH
         MOV      79H,49H
         MOV      78H,48H
         MOV      77H,47H
         MOV      76H,46H
         MOV      75H,45H
         MOV      74H,44H
         MOV      73H,43H
         MOV      72H,42H
         MOV      71H,41H
         MOV      70H,40H

GFLASHOUT:     POP   PSW
               POP   ACC
               RETI

GFLASH1:       JB   0AH,GFLASH2
               MOV   7CH,#0AH
               MOV   7BH,#0AH
               AJMP  GFLASHOUT

GFLASH2:       JB   0BH,GFLASH3
               MOV   7AH,#0AH
               MOV   79H,#0AH
               AJMP  GFLASHOUT


GFLASH3:       JB   0CH,GFLASH4
               MOV   77H,#0AH
               MOV   76H,#0AH
               AJMP  GFLASHOUT

GFLASH4:       JB   0DH,GFLASH5
               MOV   78H,#0AH

               AJMP  GFLASHOUT

GFLASH5:       JB   0EH,GFLASH6
               MOV   75H,#0AH
               MOV   74H,#0AH
               AJMP  GFLASHOUT


GFLASH6:
               MOV   73H,#0AH
               MOV   72H,#0AH
               AJMP  GFLASHOUT




    ;*********************************
;*         加1         *
  ;*********************************



ADD1:         MOV     A,R7
              ADD     A,#01H
              DA      A
              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
            NOP
            NOP
            NOP
            SETB SCLK
            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

          SETB IO

          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


PLAY1:         MOV    A,#0FFH
               MOV    P2,A

               MOV    A,@R0
               MOV    DPTR,#TAB1
               MOVC   A,@A+DPTR
               MOV    SBUF,A
               JNB    TI,$
               CLR    TI


               MOV    A,@R1
               MOV    DPTR,#TAB1
               MOVC   A,@A+DPTR
               MOV    SBUF,A
               JNB    TI,$
               CLR    TI

               MOV    A,R2
               MOV    DPTR,#TAB1
               MOVC   A,@A+DPTR
               MOV    SBUF,A
               JNB    TI,$
               CLR    TI

               INC    R0
               INC    R1
               INC    R3

               MOV    A,R3
               SETB   PSW.4
               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  DL1MS
               MOV    A,R5
               JNB    ACC.6,PLAYOUT
               RL     A
               MOV    R5,A
               LJMP   PLAY1

PLAYOUT:       SETB   P2.6
               RET

DL1MS:        MOV         R6,#14H
DL1:          MOV         R7,#19H
DL2:          DJNZ        R7,DL2
              DJNZ        R6,DL1
              RET











TAB1:  ;DB       0C0H,0F9H,0A4H,0B0H
      ; DB       99H,92H,82H,0F8H,80H,90H,0FFH,0BFH
       DB 03H,9FH,25H,0DH,99H
       DB 49H,41H,1FH,01H,09H,0FFH


       END





⌨️ 快捷键说明

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