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

📄 yaokongrili.asm

📁 该遥控日历具有遥控器调整日历
💻 ASM
📖 第 1 页 / 共 5 页
字号:
           MOV    TIME_DAY,A
          CJNE    A,#31H,LGOOUT
           MOV    TIME_DAY,#01H
       LGOOUT:
          SETB    EA
           RET


;*********************************
;*          大小月减调整程序       *
;*********************************
      DMMONTH:
           CLR    EA
           MOV    R7,TIME_DAY            ;大月日减1
         LCALL    DEC1
           MOV    TIME_DAY,A
          CJNE    A,#00H,DMGOOUT
           MOV    TIME_DAY,#31H
      DMGOOUT:
          SETB    EA
           RET
      DLMONTH:
           CLR    EA
           MOV    R7,TIME_DAY            ;小月日减1
         LCALL    DEC1
           MOV    TIME_DAY,A
          CJNE    A,#00H,DLGOOUT
           MOV    TIME_DAY,#30H
      DLGOOUT:
          SETB    EA
           RET

;***************************************
;*  BCD码转换成16进制数并且判断是否闰年
;*****************************************

           ZH:
           CLR    EA
           MOV    A,R3
           ANL    A,#0F0H
          SWAP    A
           MOV    B,#10
           MUL    AB
          PUSH    A
           MOV    A,R3
           ANL    A,#0FH
           MOV    R3,A
           POP    A
           ADD    A,R3
           MOV    B,#4
           DIV    AB
           MOV    R3,B
          SETB    EA
           RET


;********************************
;* 阳历调整同时显示农历月日程序  *
;*********************************
          YMD:
          CLR     EA
         LCALL    GENGXIN            ;更新农历程序
           MOV    R0,CONVERT_MONTH    ;农历月分离,送显示缓存
         LCALL    DIVIDE
           MOV    74H,R1
           MOV    54H,R1
           MOV    75H,R2
           MOV    55H,R2
           MOV    A,75H               ;消除农历月高位的零
          CJNE    A,#0,YMD1
           MOV    75H,#0AH
           MOV    55H,#0AH
          YMD1:
           MOV    R0,CONVERT_DATE
         LCALL    DIVIDE
           MOV    72H,R1
           MOV    52H,R1
           MOV    73H,R2
           MOV    53H,R2
           MOV    A,73H
          CJNE    A,#0,YMD_OUT        ;消除农历日高位的零
           MOV    73H,#0AH
           MOV    53H,#0AH
      YMD_OUT:
          SETB    EA
           RET

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

        DIVIDE:
           CLR    EA
           MOV    A,R0
           ANL    A,#0FH
           MOV    R1,A
           MOV    A,R0
          SWAP    A
           ANL    A,#0FH
           MOV    R2,A
          SETB    EA
           RET
;---------------------------------------------
;      大小月判断程序
;---------------------------------------------
     DX_MONTH:
           CLR    EA
           MOV    A,TIME_MONTH
           JNB    ACC.4,DX_CON_02
           CLR    ACC.4 ;ACC.4 为 1 表示大于 10 月
           ADD    A,#10
    DX_CON_02:

          CJNE    A,#02H,DX_MONTH_1
          SETB    DYLED               ;2月份关闭大月小月指示灯
          SETB    XYLED
          AJMP    DX_MONTH_OUT
  DX_MONTH_1:
          CJNE    A,#08H,DX_MONTH_2
  DX_MONTH_2:
            JC    DX_MONTH_3          ;小于8月,转小于8月的处理程序
          CJNE    A,#08H,DX_MONTH_4
           CLR    DYLED               ;8月份,开启大月指示灯,关闭小月指示灯
          SETB    XYLED
          AJMP    DX_MONTH_OUT
  DX_MONTH_4:
           MOV    B,#2                ;判断9,10,11,12月的大小
           DIV    AB
           MOV    A,B
            JZ    DX_MONTH_ONM
           CLR    XYLED               ;9月,11月,开启小月指示灯,关闭大月指示灯
          SETB    DYLED
          AJMP    DX_MONTH_OUT
 DX_MONTH_ONM:
           CLR    DYLED               ;10月,12月,开启大月指示灯,关闭小月指示灯
          SETB    XYLED
          AJMP    DX_MONTH_OUT
   DX_MONTH_3:
           MOV    B,#02
           DIV    AB
           MOV    A,B
            JZ    DX_MONTH_ONO
           CLR    DYLED               ;1 3 5 7月份,开启大月指示灯,关闭小月指示灯
          SETB    XYLED
          AJMP    DX_MONTH_OUT
 DX_MONTH_ONO:
           CLR    XYLED               ;4 6月份,开启小月指示灯,关闭大月指示灯
          SETB    DYLED
 DX_MONTH_OUT:
          SETB    EA
           RET

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


      DISPLAY:
           CLR    EA          ;显示程序当中,关闭总中断
           MOV    7CH,#02H
           MOV    7BH,#00H
           MOV    R0,#70H     ;日
           MOV    R1,#60H     ;秒
           MOV    R2,77H      ;月
           MOV    R3,#77H
           MOV    R4,67H      ;总天数
           MOV    R5,#67H
           MOV    R6,#0FEH    ;位选通端
            JB    TURNOFF,PLAYOUT
           JNB    IRIN,DIS_OPEA
          AJMP    DISPLAY1

     DIS_OPEA:
          SETB    EA


     DISPLAY1:
           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,R3
          CJNE    A,#7DH,SEND_DATA3_1
           MOV    DPTR,#TAB2
          LJMP    SEND_DATA3_2
  SEND_DATA3_1:
           MOV    DPTR,#TAB1
  SEND_DATA3_2:
           MOV    A,R2
          MOVC    A,@A+DPTR
           MOV    SBUF,A             ;送第3字节,送月、年、0、2、温度个位数据。
           JNB    TI,$
           CLR    TI

           MOV    A,R4
           MOV    DPTR,#TAB1
          MOVC    A,@A+DPTR
           MOV    SBUF,A             ;送第4字节,送总天数、周次、温度符号位和小数位数据。
           JNB    TI,$
           CLR    TI


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

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

        PLAY3:
           MOV    A,R6
           MOV    P2,A
         LCALL    DL500us

           MOV    A,R6
           JNB    ACC.6,PLAYOUT
            RL    A
           MOV    R6,A

          LJMP    DISPLAY1
      PLAYOUT:
          SETB    P2.6

          SETB    EA                 ;开启总中断
           RET

;---------------------------------------------
;      开机显示程序
;---------------------------------------------


       ON_DISPLAY:
           CLR    EA          ;显示程序当中,关闭总中断
           MOV    7CH,#02H
           MOV    7BH,#00H
           MOV    R0,#70H     ;日
           MOV    R1,#60H     ;秒
           MOV    R2,77H      ;月
           MOV    R3,#77H
           MOV    R4,67H      ;总天数
           MOV    R5,#67H
           MOV    R6,#0FEH    ;位选通端


  ON_DISPLAY1:
           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,R3
          CJNE    A,#7DH,ON_SEND_DATA3_1
           MOV    DPTR,#TAB2
          LJMP    ON_SEND_DATA3_2
ON_SEND_DATA3_1:
           MOV    DPTR,#TAB1
ON_SEND_DATA3_2:
           MOV    A,R2
          MOVC    A,@A+DPTR
           MOV    SBUF,A             ;送第3字节,送月、年、0、2、温度个位数据。
           JNB    TI,$
           CLR    TI

           MOV    A,R4
           MOV    DPTR,#TAB1
          MOVC    A,@A+DPTR
           MOV    SBUF,A             ;送第4字节,送总天数、周次、温度符号位和小数位数据。
           JNB    TI,$
           CLR    TI


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

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

     ON_PLAY3:
           MOV    A,R6
           MOV    P2,A
         LCALL    DL05s

           MOV    A,R6
           JNB    ACC.6,ON_PLAYOUT
            RL    A
           MOV    R6,A

          LJMP    ON_DISPLAY1
   ON_PLAYOUT:
          SETB    P2.6
          SETB    EA                 ;开启总中断
           RET

;---------------------------------------------
;             延时程序
;---------------------------------------------

      DL500uS:
           MOV    7FH,#200
          DL1:
           JNB    IRIN,OPEN_EA1
          AJMP    DL2
     OPEN_EA1:
          AJMP    DL2
          DL2:
          DJNZ    7FH,DL1
           RET
 ;---------------------------------------------
;            开机延时程序
;---------------------------------------------

        DL05S:
           MOV    2DH,#4
       DL05S1:
           MOV    2EH,#100
       DL05S2:
         LCALL    DL500US
          DJNZ    2EH,DL05S2
          DJNZ    2DH,DL05S1
           RET

;---------------------------------------------
;            显示程序使用的数据表
;---------------------------------------------
         TAB1:
            DB    03H,9FH,25H,0DH,99H
               ;  0   1    2   3  4
            DB    49H,41H,1BH,01H,09H,0FFH,0FDH,0EH
                ;  5   6   7   8   9   熄灭  -  'C(摄氏温度的符号单位)
         TAB2:
            DB    02H,9EH,24H,0CH,98H
               ;  0.  1.  2.  3.  4.
            DB    48H,40H,1AH,00H,08H,
               ;  5.   6.  7.  8.  9.
;---------------------------------------------
;           DS18B20温度转换程序
;---------------------------------------------
    get_temper:
           clr    ea             ;DS18B20使用期间,禁止任何中断产生
         lcall    rest           ;复位DS18B20
            jb    F1,dss2        ;判断DS18B20是否存在
           ret
         dss2:
           mov    a,#0cch        ;跳过ROM匹配
         lcall    DSWR
           mov    a,#44h         ;向DS18B20发出温度转换命令
         lcall    DSWR
         lcall    rest           ;读温度前先复位
           mov    a,#0cch        ;跳过ROM匹配
         lcall    DSWR
           mov    a,#0beh        ;向DS18B20发出度温度命令
         lcall    DSWR
         lcall    DSRE           ;读取温度数据
          SETB    EA
           ret
             ;DS18B20 RESET
         rest:
          setb    date_line
           nop
           clr    date_line
           mov    r0,#6bh         ;主机发出延时复位低脉冲
           mov    r1,#04h
         tsr1:
          djnz    r0,$
           mov    r0,#6bh
          djnz    r1,tsr1
          setb    date_line        ;然后拉高数据线
           nop
           nop
           nop

⌨️ 快捷键说明

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