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

📄 yaokongrili.asm

📁 该遥控日历具有遥控器调整日历
💻 ASM
📖 第 1 页 / 共 5 页
字号:
;名称:多功能遥控器日历

;----------------------------
;多功能遥控器日历功能描述
;----------------------------
;1.能够显示阳历年月日,星期几,
;2.具有时间显示:小时,分钟,秒钟,秒钟闪烁功能,采用24小时制,12小时制
;3.当前温度实时显示,显示范围-9'C---99'C
;4.能够显示当日距离新年的总天数,以及一年当中的第几周
;5.断电数据保留
;6.采用按键和遥控器双重调节功能,尤其遥控器调节大大提高了人机互动
;7.16个重要节日指示灯提醒,大小月指示灯,闰年,闰月指示灯
;-----------------------------
;多功能遥控器日历显示面板
;-----------------------------
;2007年06月23日 星期6
;第174天  23:56:57
;第25周  农历05月09日
;当前温度:30.6'C



;-----------------------------
;     定义各种变量地址
;-----------------------------

          SCLK    BIT    P3.5        ;定义DS1302时钟
            IO    BIT    P3.6        ;定义DS1302输入输出
           RST    BIT    P3.7        ;定义DS1302复位端

          IRIN    BIT    P3.2        ;定义红外接收头的输入输出

         DYLED    BIT    P3.3        ;定义大月指示灯
         XYLED    BIT    P3.4        ;定义小月指示灯

         RYLED    BIT    P1.0        ;定义闰月指示灯
         RNLED    BIT    P1.1        ;定义闰年指示灯
         AMLED    BIT    P1.2        ;上午指示灯
         PMLED    BIT    P1.3        ;下午指示灯
        DECNUM    BIT    P1.4        ;减1按钮
        ADDNUM    BIT    P1.5        ;加1按钮
         DMODE    BIT    P1.6        ;逆序调整按钮
          MODE    BIT    P1.7        ;顺序调整按钮

          LED1    BIT    P0.0        ;时间1号指示灯
          LED2    BIT    P0.1        ;时间2号指示灯

       LS154_A    BIT    P0.2        ;定义154,4输入口
       LS154_B    BIT    P0.3
       LS154_C    BIT    P0.4
       LS154_D    BIT    P0.5
       LS154_G    BIT    P0.6
            BP    BIT    P0.7

     date_line    BIT    P2.7        ;定义温度传感器输入输出

     YEARFLASH    BIT    00H         ;定义年闪烁
    MONTHFLASH    BIT    01H         ;定义月闪烁
      DAYFLASH    BIT    02H         ;定义日闪烁
     HOURFLASH    BIT    03H         ;定义小时闪烁
   MINUTEFLASH    BIT    04H         ;定义分钟闪烁
   SECONDFLASH    BIT    05H         ;定义秒钟闪烁
     KEEPFLASH    BIT    06H         ;定义保持闪烁

       CON_ADJ    BIT    07H         ;定义遥控器调整进入位

       YEARBIT    BIT    08H         ;年调整位
      MONTHBIT    BIT    09H         ;月调整位
        DAYBIT    BIT    0AH         ;日调整位
       HOURBIT    BIT    0BH         ;时调整位
     MINUTEBIT    BIT    0CH         ;分调整位

    CHOICE_ADJ    BIT    0EH         ;遥控器和按键选择调整位

    CLOSE_DIS     BIT    0FH         ;关闭显示选择位

       ALARM      BIT    11H         ;整点闹铃标志位

    TURNOFF       BIT    12H         ;关机标志位

;    23H,24H,25H,  遥控解码程序使用
;    27H,2CH       整点鸣叫程序使用
;    2DH,2EH       开机延时程序适用
        IRCOM     DATA   28H         ;遥控编码地址位28H,29H,2AH,2BH

       SEC_FLA    DATA   26H         ;秒钟闪烁计数器

      ALARM_NO    DATA   2FH         ;整点鸣叫次数
;-----------------------------
     TIME_YEAR    DATA   30H         ;定义年、月、日、小时、分钟、秒
    TIME_MONTH    DATA   31H
      TIME_DAY    DATA   32H
          WEEK    DATA   33H
          HOUR    DATA   34H
        MINUTE    DATA   35H
        SECOND    DATA   36H
;-----------------------------
   DS1302_ADDR    DATA   37H         ;定义DS1302地址单元和数据单元
   DS1302_DATA    DATA   38H
;-----------------------------
        ZHOUCI    DATA   39H         ;定义周次和余数
         YUSHU    DATA   3AH
;-----------------------------
         TEMPL    DATA   3BH         ;定义温度的低位
         TEMPH    DATA   3CH         ;定义温度的高位
      TEMP_BUF    DATA   3DH         ;定义温度的中间地址单元
;-----------------------------



;-----------------------------
    week_byte1    DATA   46H         ;定义计算某年某月某日对应星期几的中间单元
    WEEK_BYTE2    DATA   4CH
    WEEK_BYTE3    DATA   4DH
    WEEK_BYTE4    DATA   4EH
    WEEK_BYTE5    DATA   4FH
;-----------------------------
  CONvert_year    DATA   6Eh         ;定义农历年、月、日
 CONvert_month    DATA   6Fh         ;BIT7 为 1 表示闰月
  CONvert_date    DATA   7Eh
    temp_Byte1    DATA   5Bh         ;定义农历中间单元
    temp_Byte2    DATA   5Ch
    temp_Byte3    DATA   5Dh
    temp_Byte4    DATA   5Eh
    temp_Byte5    DATA   5Fh

;---------------------------------------------
;      定义数据显示单元和缓冲单元
;---------------------------------------------
  SECOND_DIS_L    DATA   60H         ;定义秒钟显示和缓冲地址单元
  SECOND_BUF_L    DATA   40H
  SECOND_DIS_H    DATA   61H
  SECOND_BUF_H    DATA   41H
;-----------------------------
  MINUTE_DIS_L    DATA   62H         ;定义分钟显示和缓冲地址单元
  MINUTE_BUF_L    DATA   42H
  MINUTE_DIS_H    DATA   63H
  MINUTE_BUF_H    DATA   43H
;-----------------------------
    HOUR_DIS_L    DATA   64H         ;定义小时显示和缓冲地址单元
    HOUR_BUF_L    DATA   44H
    HOUR_DIS_H    DATA   65H
    HOUR_BUF_H    DATA   45H
;-----------------------------
      TEMP_TEN    DATA   66H         ;定义温度十位、个位、小数位、符号位显示单元
     TEMP_SIGN    DATA   6CH
      TEMP_DEC    DATA   6DH
     TEMP_UNIT    DATA   7DH
;-----------------------------
       SUMDAYL    DATA   67H         ;定义总天数显示和缓冲地址单元
   SUMDAYL_BUF    DATA   47H
       SUMDAYM    DATA   68H
   SUMDAYM_BUF    DATA   48H
       SUMDAYH    DATA   69H
   SUMDAYH_BUF    DATA   49H
;-----------------------------
       WEEKNOL    DATA   6AH         ;定义周次显示和缓冲地址单元
   WEEKNOL_BUF    DATA   4AH
       WEEKNOH    DATA   6BH
   WEEKNOH_BUF    DATA   4BH
;-----------------------------
    DATE_DIS_L    DATA   70H         ;定义日期显示和缓冲地址单元
    DATA_BUF_L    DATA   50H
    DATE_DIS_H    DATA   71H
    DATA_BUF_H    DATA   51H
;-----------------------------
   NDATE_DIS_L    DATA   72H         ;定义农历日期显示和缓冲地址单元
   NDATA_BUF_L    DATA   52H
   NDATE_DIS_H    DATA   73H
   NDATA_BUF_H    DATA   53H
;-----------------------------
  NMONTH_DIS_L    DATA   74H         ;定义农历月显示和缓冲地址单元
  NMONTH_BUF_L    DATA   54H
  NMONTH_DIS_H    DATA   75H
  NMONTH_BUF_H    DATA   55H
;-----------------------------
      WEEK_DIS    DATA   76H         ;定义星期显示和缓冲地址单元
      WEEK_BUF    DATA   56H
;-----------------------------
   MONTH_DIS_L    DATA   77H         ;定义月显示和缓冲地址单元
   MONTH_BUF_L    DATA   57H
   MONTH_DIS_H    DATA   78H
   MONTH_BUF_H    DATA   58H
;-----------------------------
    YEAR_DIS_L    DATA   79H         ;定义年显示和缓冲地址单元
    YEAR_BUF_L    DATA   59H
    YEAR_DIS_H    DATA   7AH
    YEAR_BUF_H    DATA   5AH
;-----------------------------
    YEAR_0_DIS    DATA   7BH         ;定义2 0显示单元
    YEAR_2_DIS    DATA   7CH
;-----------------------------
;*****************************************
;             初始化程序
;*****************************************
           ORG    00H

          LJMP    START
           ORG    03H
           JMP    INT          ;外部中断0入口地址
           ORG    0BH
           JMP    T0_INT       ;定时器0入口地址
           ORG    1BH
           JMP    T1_INT       ;定时器1入口地址
           ORG    0030H


;---------------------------------------------
;                 主程序
;---------------------------------------------
        START:

           MOV    R1,#126      ;清RAM 128单元
           MOV    R0,#2
           MOV    A,#0
        CLEAR:
           MOV    @R0,A
           INC    R0
          DJNZ    R1,CLEAR
           MOV    R0,A
           MOV    R1,A
           MOV    R7,#10                 ;计数器0 初始计数值
         LCALL    ON_DISPLAY

           MOV    6CH,#0CH               ;摄氏温度的符号'C
          SETB    EA                     ;打开总中断
           MOV    SCON,#00H              ;串行输出,方式0
           MOV    TMOD,#11H              ;计数器1,方式1;计数器0,方式1
           MOV    TL1,#00H               ;计数器1 初值 65.5MS中断一次,用于按钮闪烁调节
           MOV    TH1,#00H
           MOV    TH0,#3CH               ;计数器0 50MS中断一次
           MOV    TL0,#0B0H
           MOV    DS1302_ADDR,#8EH
           MOV    DS1302_DATA,#00H       ;允许写1302
         LCALL    WRITE
           MOV    DS1302_ADDR,#90H
           MOV    DS1302_DATA,#0A6H       ;1302充电,充电电流1.1mA
         lcall    write
           MOV    DS1302_ADDR,#8EH
           MOV    DS1302_DATA,#80H       ;禁止写1302
         LCALL    WRITE
           MOV    SEC_FLA,#10            ;秒灯闪烁赋初始值

           CLR    ET1                    ;关闭定时器1中断
          SETB    EX0                    ;打开外部中断0
          SETB    IT0                    ;采用脉冲下降沿触发
          SETB    PX0                    ;外部中断零为最高级别中断
           CLR    LED1


         MAIN:
           MOV    DS1302_ADDR,#8DH       ;READ OUT YEAR
         LCALL    READ
           MOV    TIME_YEAR,DS1302_DATA
           MOV    DS1302_ADDR,#89H       ;READ OUT MONTH
         LCALL    READ
           MOV    TIME_MONTH,DS1302_DATA
           MOV    DS1302_ADDR,#87H       ;READ OUT DAY
         LCALL    READ
           MOV    TIME_DAY,DS1302_DATA
           MOV    DS1302_ADDR,#85H       ;READ OUT HOUR
         LCALL    READ
           MOV    HOUR,DS1302_DATA
           MOV    DS1302_ADDR,#83H       ;READ OUT MINUTE
         LCALL    READ
           MOV    MINUTE,DS1302_DATA
           MOV    DS1302_ADDR,#81H       ;READ OUT SECOND
         LCALL    READ
           MOV    SECOND,DS1302_DATA




   OPEN_AM_PM:
           MOV    A,HOUR
          CJNE    A,#12H,AM_PM
        AM_PM:
           JNC    OPEN_PMLED
           CLR    AMLED
          SETB    PMLED
          AJMP    CEL_DIVIDE
   OPEN_PMLED:
           CLR    PMLED
          SETB    AMLED
   CEL_DIVIDE:
           MOV    R0,TIME_YEAR           ;年分离,送显示缓存
         LCALL    DIVIDE
           MOV    79H,R1
           MOV    59H,R1
           MOV    7AH,R2
           MOV    5AH,R2
           MOV    R0,TIME_MONTH          ;月分离,送显示缓存
         LCALL    DIVIDE
           MOV    77H,R1
           MOV    57H,R1
           MOV    78H,R2
           MOV    58H,R2
           MOV    A,78H                  ;主程序中消除阳历月高位0
          CJNE    A,#0,MAIN_XIAO_DAY
           MOV    78H,#0AH
           MOV    58H,#0AH
MAIN_XIAO_DAY:
           MOV    R0,TIME_DAY            ;日分离,送显示缓存
         LCALL    DIVIDE
           MOV    70H,R1
           MOV    50H,R1
           MOV    71H,R2
           MOV    51H,R2
           MOV    A,71H                  ;主程序中消除阳历日高位0
          CJNE    A,#0,MAIN_XIAO_HOUR
           MOV    71H,#0AH
           MOV    51H,#0AH
MAIN_XIAO_HOUR:
           MOV    R0,HOUR                ;小时分离,送显示缓存
         LCALL    DIVIDE
           MOV    64H,R1
           MOV    44H,R1
           MOV    65H,R2
           MOV    45H,R2
           MOV    A,65H                  ;主程序中消除小时高位0
          CJNE    A,#0,MAIN_MINUTE
           MOV    65H,#0AH
           MOV    45H,#0AH
  MAIN_MINUTE:
           MOV    R0,MINUTE               ;分分离,送显示缓存
         LCALL    DIVIDE
           MOV    62H,R1
           MOV    42H,R1
           MOV    63H,R2
           MOV    43H,R2
           MOV    A,63H
          CJNE    A,#0,MAIN_SECOND
           MOV    63H,#0AH
           MOV    43H,#0AH
  MAIN_SECOND:
           MOV    R0,SECOND               ;秒分离,送显示缓存
         LCALL    DIVIDE
           MOV    60H,R1
           MOV    40H,R1
           MOV    61H,R2
           MOV    41H,R2
           MOV    A,61H
          CJNE    A,#0,MAIN_GENGXIN      ;主程序中消除秒钟高位0
           MOV    61H,#0AH
           MOV    41H,#0AH
  MAIN_GENGXIN:
         LCALL    GENGXIN                 ;更新农历程序
           MOV    R0,CONVERT_MONTH        ;农历月分离,送显示缓存
         LCALL    DIVIDE
           MOV    74H,R1
           MOV    54H,R1
           MOV    75H,R2
           MOV    55H,R2
           MOV    A,75H                   ;主程序中消除农历月高位0
          CJNE    A,#0,MAIN_XIAO_NDAY
           MOV    75H,#0AH
           MOV    55H,#0AH
MAIN_XIAO_NDAY:
           MOV    R0,CONVERT_DATE
         LCALL    DIVIDE
           MOV    72H,R1
           MOV    52H,R1
           MOV    73H,R2
           MOV    53H,R2
           MOV    A,73H                  ;主程序中消除农历日高位0
          CJNE    A,#0,MAIN_WEEK
           MOV    73H,#0AH
           MOV    53H,#0AH
    MAIN_WEEK:
         LCALL    GETWEEK                ;更新星期程序
           MOV    76H,WEEK
           MOV    56H,WEEK
         LCALL    ADJ_TOTAL              ;调用总天数,星期程序
         LCALL    GET_TEMPER             ;调用温度程序
         LCALL    DX_MONTH               ;调用判断大小月程序
         LCALL    DISPLAY


     ADJ_NEXT:
           JNB    MODE,SETG              ;调整日历
           MOV    R3,TIME_YEAR
         LCALL    ZH                      ;判断当前年是否为闰年
           MOV    A,B
           JNZ    OFF_RNLED
           CLR    RNLED
          AJMP    ADJ_RYLED
    OFF_RNLED:
          SETB    RNLED
    ADJ_RYLED:
           JNB    F0,OFF_RYLED
           CLR    RYLED                  ;闰月,则p1.0清0,指示灯亮
          LJMP    MAIN
     OFF_RYLED:
          SETB    RYLED                  ;非闰月,则p1.0置位,指示灯灭
          LJMP    MAIN




;*******************************
;*       公历设置程序          *
;*******************************

         SETG:


          SETB    TR1
          SETB    ET1
          SETB    CHOICE_ADJ

           MOV    DS1302_ADDR,#8EH
           MOV    DS1302_DATA,#00H      ;允许写1302
         LCALL    WRITE
           MOV    DS1302_ADDR,#80H
           MOV    DS1302_DATA,#80H      ;1302停止振荡
         LCALL    WRITE

⌨️ 快捷键说明

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