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

📄 温度万年历.asm

📁 制作一个温度万年历
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;*****************************
;*        温度万年历程序         *
;*****************************
;2DH(高两位年)2CH(低两位年)
;7DH~7AH(73H~70H)年位
;2BH(月)
;79H~78H(61H~60H)月
;2AH(日)
;77H~76H(51H~50H)日
;29H(星期)
;6DH(5DH)星期
;28H(小时)
;6BH~6AH(5BH~5AH)时
;27H(分)
;69H~68H(59H~58H)分
;26H(秒)
;67H~66H(57H~56H)秒
;25H~24H(温度)
;4DH~4AH(3DH~3AH)温度
;23H(农历月)
;49H~48H(39H~38H)(农历月)
;22H(农历日)
;47HH~46H(37H~36H)农历日
;显示缓冲单元,,

;闰年标志为F0,定时器T1为调整时候闪烁用
;
;



SCLK  EQU  P3.2
IO    EQU  P3.3
RST   EQU  P3.4
DS1302_ADDR DATA 32H
DS1302_DATA DATA 31H

YEARH  DATA 2DH
YEARL  DATA 2CH
MONTH  DATA 2BH
DAY    DATA 2AH
WEEK   DATA 29H
HOUR   DATA 28H
MINUTE DATA 27H
SECOND DATA 26H
TEMPH  DATA 25H
TEMPL  DATA 24H
NMONTH DATA 23H
NDAY   DATA 22H

TEMPDIN     BIT      P3.6    ;DS18B20通信端
SPEAKERDIN  BIT      P3.7    ;蜂铃器端口
SET_TIME    BIT      P1.0    ;时间设置
SET_RING    BIT      P1.1    ;闹钟设置
SET_ADD     BIT      P1.2    ;加键设置

    ;************************************
     ;*           中断入口              *
   ;************************************


                 ORG  0000H
                 AJMP START
                 ORG  0003H
                 RETI
                 ORG  000BH
                 RETI
                 ORG  0013H
                 RETI
                 ORG  001BH
                 LJMP INTT1
                 ORG  0023H
                 RETI
                 ORG  002BH
                 RETI



    ;************************************
     ;*            初始化               *
   ;************************************
                 ORG  100H



    ;************************************
     ;*            存储区初始化               *
   ;************************************
   START:   MOV  SP,#60H

   CLEAR:   MOV  R0,#00H
            MOV  R1,#99H

   CLEAR1:  MOV  @R0,#00H
            INC  R0
            DJNZ R1,CLEAR1

   ;************************************
     ;*            延时1S               *
   ;************************************
DELAY1S:      MOV    R0,10
DELAY1S1:     LCALL  YS100
              DJNZ   R0,DELAY1S1


   ;************************************
     ;*            1302初始化              *
   ;************************************


            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

   ;************************************
   ;*            主程序                *
   ;************************************

   ;************************************
   ;*            1302主程序                *
   ;************************************
 MAIN1:     MOV DS1302_ADDR,#8DH         ;READ OUT YEAR
            LCALL READ
            MOV YEARL,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

   ;************************************
   ;*            18B20主程序                *
   ;************************************
MAIN2:      LCALL     READTEMP
            LCALL     READTEMP1
            LCALL     CONVTEMP


   ;************************************
   ;*            分离程序               *
   ;************************************

            MOV     R0,YEARL
            LCALL   DIVIDE
            MOV     8AH,R1
            MOV     7AH,R1
            MOV     8BH,R2
            MOV     7BH,R2



            MOV     R0,MONTH
            LCALL   DIVIDE
            MOV     88H,R1
            MOV     78H,R1
            MOV     89H,R2
            MOV     79H,R2

            MOV     R0,DAY
            LCALL   DIVIDE
            MOV     86H,R1
            MOV     76H,R1
            MOV     87H,R2
            MOV     77H,R2

            MOV     6DH,WEEK
            MOV     5DH,WEEK

            MOV     R0,HOUR
            LCALL   DIVIDE
            MOV     6AH,R1
            MOV     5AH,R1
            MOV     6BH,R2
            MOV     5BH,R2

            MOV     R0,MINUTE
            LCALL   DIVIDE
            MOV     68H,R1
            MOV     58H,R1
            MOV     69H,R2
            MOV     59H,R2

            MOV     R0,SECOND
            LCALL   DIVIDE
            MOV     66H,R1
            MOV     56H,R1
            MOV     67H,R2
            MOV     57H,R2

            MOV     R0,TEMPH
            LCALL   DIVIDE
            MOV     4CH,R1
            MOV     3CH,R1
            MOV     4DH,R2
            MOV     3DH,R2

            MOV     R0,TEMPL
            LCALL   DIVIDE
            MOV     4AH,R1
            MOV     3AH,R1
            MOV     4BH,R2
            MOV     3BH,R2

            MOV     R0,NMONTH
            LCALL   DIVIDE
            MOV     48H,R1
            MOV     38H,R1
            MOV     49H,R2
            MOV     39H,R2

            MOV     R0,NDAY
            LCALL   DIVIDE
            MOV     46H,R1
            MOV     36H,R1
            MOV     47H,R2
            MOV     37H,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

⌨️ 快捷键说明

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