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

📄 万年历.asm

📁 万年历程序 本系统采用了以广泛使用的单片机技术为核心,软硬件结合,使硬件部分大为简化,提高了系统稳定性,并采用LED显示电路、键盘电路,使人机交互简便易行,此外结合音乐闹铃电路、看门狗和供电电路
💻 ASM
📖 第 1 页 / 共 2 页
字号:
        MOV     A,31H       ;分钟 -1
        CJNE    A,#00H,DECMH4
        MOV     31H,#59H
        SJMP    DECM12
 DECMH4:LCALL   DECA
        MOV     31H,A
        SJMP    DECM12

 DECMH3:MOV     A,30H       ;小时 -1
        CJNE    A,#00H,DECMH5
        MOV     30H,#23H
        SJMP    DECM12
 DECMH5:LCALL   DECA
        MOV     30H,A

 DECM12:SETB    P2.6
        RET
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;十进制减法子程序;;;;;;;;;;;;;;;;;;;;;;;;;;;
   DECA:CJNE    A,#10H,DECA1     ;运算范围为1~50
        MOV     A,#09H
        RET
  DECA1:CJNE    A,#20H,DECA2
        MOV     A,#19H
        RET
  DECA2:CJNE    A,#30H,DECA3
        MOV     A,#29H
        RET
  DECA3:CJNE    A,#40H,DECA4
        MOV     A,#39H
        RET
  DECA4:CJNE    A,#50H,DECA5
        MOV     A,#49H
        RET
  DECA5:DEC     A
        RET
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;闹钟按键子程序;;;;;;;;;;;;;;;;;;;;;;;;
   T1M1:MOV     P0,#0FFH      ;闹钟1加一分钟
        MOV     P2,#10111111B
        JNB     P2.2,T1M11
        CLR     03H      ;按键2是否有效
  T1M11:JB      03H,T1M12
        JB      P2.2,T1M12
        LCALL   MXIAN          ;这四个为去抖动
        MOV     P0,#0FFH
        MOV     P2,#10111111B
        JB      P2.2,T1M12
        SETB    03H      ;按键2是否有效
        SETB    0AH      ;时钟加减标致位
        MOV     A,36H       ;分钟 +1
        CJNE    A,#59H,T1M13
        MOV     36H,#00H
        SJMP    T1M12
  T1M13:ADD     A,#01
        DA      A
        MOV     36H,A
  T1M12:SETB    P2.6
        RET
      ;---------------------------------------------------------
   T1H1:MOV     P0,#0FFH      ;闹钟1加一小时
        MOV     P2,#10111111B
        JNB     P2.3,T1H11
        CLR     04H      ;按键3是否有效
  T1H11:JB      04H,T1H12
        JB      P2.3,T1H12
        LCALL   MXIAN          ;这四个为去抖动
        MOV     P0,#0FFH
        MOV     P2,#10111111B
        JB      P2.3,T1H12
        SETB    04H      ;按键3是否有效
        CLR     0AH      ;时钟加减标致位
        MOV     A,35H       ;小时 +1
        CJNE    A,#23H,T1H13
        MOV     35H,#00H
        SJMP    T1H12
  T1H13:ADD     A,#01
        DA      A
        MOV     35H,A
  T1H12:SETB    P2.6
        RET
     ;---------------------------------------------------------
   T2M1:MOV     P0,#0FFH      ;闹钟2加一分钟
        MOV     P2,#10111111B
        JNB     P2.2,T2M11
        CLR     03H      ;按键2是否有效
  T2M11:JB      03H,T2M12
        JB      P2.2,T2M12
        LCALL   MXIAN          ;这四个为去抖动
        MOV     P0,#0FFH
        MOV     P2,#10111111B
        JB      P2.2,T2M12
        SETB    03H      ;按键2是否有效
        SETB    0BH      ;时钟加减标致位
        MOV     A,38H       ;分钟 +1
        CJNE    A,#59H,T2M13
        MOV     38H,#00H
        SJMP    T2M12
  T2M13:ADD     A,#01
        DA      A
        MOV     38H,A
  T2M12:SETB    P2.6
        RET
      ;---------------------------------------------------------
   T2H1:MOV     P0,#0FFH      ;闹钟2加一小时
        MOV     P2,#10111111B
        JNB     P2.3,T2H11
        CLR     04H      ;按键3是否有效
  T2H11:JB      04H,T2H12
        JB      P2.3,T2H12
        LCALL   MXIAN          ;这四个为去抖动
        MOV     P0,#0FFH
        MOV     P2,#10111111B
        JB      P2.3,T2H12
        SETB    04H      ;按键3是否有效
        CLR     0BH      ;时钟加减标致位
        MOV     A,37H       ;小时 +1
        CJNE    A,#23H,T2H13
        MOV     37H,#00H
        SJMP    T2H12
  T2H13:ADD     A,#01
        DA      A
        MOV     37H,A
  T2H12:SETB    P2.6
        RET
        
  ;------------------------------闹钟1------------------------------
  DECT1:MOV     P0,#0FFH      ;减一分钟/一小时
        MOV     P2,#10111111B
        JNB     P2.1,DECT11
        CLR     05H      ;按键1是否有效
 DECT11:JB      05H,DECT12
        JB      P2.1,DECT12
        LCALL   MXIAN          ;这四个为去抖动
        MOV     P0,#0FFH
        MOV     P2,#10111111B
        JB      P2.1,DECT12
        SETB    05H      ;按键1是否有效
        JNB     0AH,DECT13
        MOV     A,36H       ;分钟 -1
        CJNE    A,#00H,DECT14
        MOV     36H,#59H
        SJMP    DECT12
 DECT14:LCALL   DECA
        MOV     36H,A
        SJMP    DECT12

 DECT13:MOV     A,35H       ;小时 -1
        CJNE    A,#00H,DECT15
        MOV     35H,#23H
        SJMP    DECT12
 DECT15:LCALL   DECA
        MOV     35H,A

 DECT12:SETB    P2.6
        RET
  ;------------------------------闹钟2---------------------------------
  DECT2:MOV     P0,#0FFH      ;减一分钟/一小时
        MOV     P2,#10111111B
        JNB     P2.1,DECT21
        CLR     05H      ;按键1是否有效
 DECT21:JB      05H,DECT22
        JB      P2.1,DECT22
        LCALL   MXIAN          ;这四个为去抖动
        MOV     P0,#0FFH
        MOV     P2,#10111111B
        JB      P2.1,DECT22
        SETB    05H      ;按键1是否有效
        JNB     0BH,DECT23
        MOV     A,38H       ;分钟 -1
        CJNE    A,#00H,DECT24
        MOV     38H,#59H
        SJMP    DECT22
 DECT24:LCALL   DECA
        MOV     38H,A
        SJMP    DECT22

 DECT23:MOV     A,37H       ;小时 -1
        CJNE    A,#00H,DECT25
        MOV     37H,#23H
        SJMP    DECT22
 DECT25:LCALL   DECA
        MOV     37H,A

 DECT22:SETB    P2.6
        RET      

         ;------------------------闹钟开关-------------------------
   T1T2:MOV     P0,#0FFH      ;闹钟开关
        MOV     P2,#10111111B
        JNB     P2.2,T1T21
        CLR     05H      ;按键2是否有效
  T1T21:JB      05H,T1T22
        JB      P2.2,T1T22
        SETB    05H      ;按键2是否有效
        CPL     06H      ;闹钟开关
        JB      06H,T1T23
        MOV     R1,#2
        MOV     3CH,#0CH     ;将暂存的数转成字形 显示"0N"
        MOV     3DH,#0AAH    ;将暂存的数转成字形 显示"  "
        MOV     3EH,#0AAH    ;将暂存的数转成字形 显示"  "
        SETB    07H          ;不显示小数点1
        SETB    08H          ;不显示小数点2
 T1DAT3:MOV     R7,#100
 T1DAT2:LCALL   MXIAN
        DJNZ    R7,T1DAT2
        DJNZ    R1,T1DAT3
        SJMP    T1T22
  T1T23:MOV     R1,#2
        MOV     3CH,#0FH      ;将暂存的数转成字形 显示"OF"
        MOV     3DH,#0FAH     ;将暂存的数转成字形 显示"F "
        MOV     3EH,#0AAH     ;将暂存的数转成字形 显示"  "
        SETB    07H          ;不显示小数点1
        SETB    08H          ;不显示小数点2
 T2DAT3:MOV     R7,#100
 T2DAT2:LCALL   MXIAN
        DJNZ    R7,T2DAT2
        DJNZ    R1,T2DAT3
  T1T22:SETB    P2.6
        RET
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;显示年月日按键子程序;;;;;;;;;;;;;;;;;;;
    DAT:MOV     P0,#0FFH
        MOV     P2,#10111111B
        JB      P2.3,DAT1
        MOV     R1,#5
        MOV     3CH,39H      ;将暂存的数转成字形 显示39H
        MOV     3DH,3AH      ;将暂存的数转成字形 显示3AH
        MOV     3EH,3BH      ;将暂存的数转成字形 显示3BH
        CLR     07H          ;显示小数点1
        CLR     08H          ;显示小数点2
   DAT3:MOV     R7,#100
   DAT2:LCALL   MXIAN
        DJNZ    R7,DAT2
        DJNZ    R1,DAT3
   DAT1:SETB    P2.6
        RET

   ;---------------------------------------------------------
  DATEN:MOV     P0,#0FFH      ;年份加1
        MOV     P2,#10111111B
        JNB     P2.3,DATEN1
        CLR     04H      ;按键3是否有效
 DATEN1:JB      04H,DATEN2
        JB      P2.3,DATEN2
        LCALL   MXIAN          ;这四个为去抖动
        MOV     P0,#0FFH
        MOV     P2,#10111111B
        JB      P2.3,DATEN2
        SETB    04H      ;按键3是否有效
   ADDN:MOV     A,39H       ;年份 +1
        CJNE    A,#50H,DATEN3
        MOV     39H,#01H
        SJMP    DATEN2
 DATEN3:ADD     A,#01
        DA      A
        MOV     39H,A
 DATEN2:SETB    P2.6
        RET

     ;---------------------------------------------------------
  DATEM:MOV     P0,#0FFH      ;月份加1
        MOV     P2,#10111111B
        JNB     P2.2,DATEM1
        CLR     03H      ;按键2是否有效
 DATEM1:JB      03H,DATEM2
        JB      P2.2,DATEM2
        LCALL   MXIAN          ;这四个为去抖动
        MOV     P0,#0FFH
        MOV     P2,#10111111B
        JB      P2.2,DATEM2
        SETB    03H      ;按键3是否有效
   ADDM:MOV     A,3AH       ;月份 +1
        CJNE    A,#12H,DATEM3
        MOV     3AH,#01H
        LCALL   ADDN       ;年份+1
        SJMP    DATEM2
 DATEM3:ADD     A,#01
        DA      A
        MOV     3AH,A
 DATEM2:SETB    P2.6
        RET

      ;---------------------------------------------------------
  DATED:MOV     P0,#0FFH      ;加1日
        MOV     P2,#10111111B
        JNB     P2.1,DATED1
        CLR     05H      ;按键1是否有效
 DATED1:JB      05H,DATED2
        JB      P2.1,DATED2
        LCALL   MXIAN          ;这四个为去抖动
        MOV     P0,#0FFH
        MOV     P2,#10111111B
        JB      P2.1,DATED2
        SETB    05H      ;按键3是否有效

   ADDD:MOV     A,39H     ;判断是否是闰年
        MOV     B,#04H
        DIV     AB
        MOV     A,B
        JZ      DATED4
        MOV     DPTR,#TAB2  ;平年
        SJMP    DATED5
 DATED4:MOV     DPTR,#TAB3  ;闰年
 DATED5:MOV     A,3AH       ;用月份查表
        MOVC    A,@A+DPTR
        MOV     B,A
        MOV     A,3BH       ;+1日
        CJNE    A,B,DATED3
        MOV     3BH,#01H
        LCALL   ADDM       ;月份+1
        SJMP    DATED2
 DATED3:CJNE    A,#32H,DATED6
        MOV     3BH,#01H
        SJMP    DATED2
 DATED6:ADD     A,#01
        DA      A
        MOV     3BH,A
 DATED2:SETB    P2.6
        RET
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;闹钟子程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

    DSQ:MOV     A,35H            ;判断30H单元和35H单元是否相等
        CJNE    A,30H,DSQ1       ;是:判断31H单元和36H单元是否相等
        MOV     A,36H            ;否:判断另一个闹钟时间
        CJNE    A,31H,DSQ1
        CLR     01H              ;另一个相等,闹钟清标致位
        SJMP    DSQ2
   DSQ1:SETB    01H              ;不等,标致位置位

   DSQ2:MOV     A,37H            ;同上
        CJNE    A,30H,DSQ3
        MOV     A,38H
        CJNE    A,31H,DSQ3
        CLR     02H
        SJMP    DSQ4
   DSQ3:SETB    02H

   DSQ4:MOV     C,01H          ;将两个闹钟合并在同一个端口输出
        ANL     C,02H
        ORL     C,06H          ;闹钟输出总开关
        MOV     P1.0,C         ;闹钟输出在P1.0口
        RET
   ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        END        ;程序结束

⌨️ 快捷键说明

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