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

📄 at89c2051日期闹钟.asm

📁 用at89c2051时间加日期显示的闹钟
💻 ASM
📖 第 1 页 / 共 3 页
字号:
SETMM:LCALL    DDL 
      JB        P1.7,SET4 
      MOV       R0,#77H 
      LCALL     ADD1 ;分+1
      MOV       A,R3 
      CJNE      A,#60H,SETMM
      LCALL     CLR0 
      AJMP      SETMM 
SET4: INC       R5 ;R5=B
SEET4:LCALL     DISPLAY 
      JB        P1.7,SEET4 
SETHH:LCALL     DDL 
      JB       P1.7,SETOUT1 
      MOV       R0,#79H 
      LCALL     ADD1 ;时+1
      MOV       A,R3 
      CJNE      A,#24H,SETHH 
      LCALL     CLR0 
      AJMP      SETHH
      ;;;;;;;;;;;;;;;;;;;;;;;;;延时1秒钟;;;;;;;;;;;;;;;;;;;;;;;;;; 
                     DDL:MOV          18H,#18 
                    DDL0:MOV          17H,#245 
                    DDL1:LCALL        DISPLAY 
                         DJNZ         17H,DDL1 
                         DJNZ         18H,DDL0 
                         RET 
      ;;;;;;;;;;;;;;;;;;;;;;;;;;T0中断程序;;;;;;;;;;;;;;;;;;;;;;;;;;; 
                  INTT0: PUSH  ACC                   ;打包 
                         PUSH  PSW 
                         CLR   ET0 
                         CLR   TR0 
                         MOV   A,#0DCH               ;(#0D*H)调整时间快慢
                         ADD   A,TL0 
                         MOV   TL0,A 
                         MOV   A,#0BH 
                         ADDC  A,TH0 
                         MOV   TH0,A 
                         SETB  TR0 
                         DJNZ  R4, OUTT0             ;16次中断未到中断退出 
                         INC 30H
                 ADDSS:  MOV   R4,#10H               ;16次中断到(1秒)重赋初值 
                         MOV   R0,#71H               ;指向秒计时单元(70-71H) 
                         ACALL ADD1                  ;调用加1程序(加1秒操作) 
                         MOV   A,R3                  ;秒数据放入A(R3为2位十进制数组合) 
                         CJNE  A,#60H,OUTT01         ;小于60秒退出 
                         ACALL CLR0                  ;等于或大于60秒清0 
                         MOV   R0,#77H               ;指向分计时单元(76H-77H) 
                         ACALL ADD1 
                         MOV   A,R3 
                         CJNE  A,#60H,OUTT0 
                         ACALL CLR0 
                         MOV   R0,#79H               ;指向小时计时单元(78H-79H) 
                         ACALL ADD1 
                         MOV   A,R3 
                         CJNE  A,#24H,OUTT0 
                         ACALL CLR0
                         jmp pd
                  OUTT0: MOV   A,66H                 ;查询标志 
                         CJNE  A,#1,OUTT01 
                         MOV   72H,76H               ;中断退出时将分、时计时单元数据移入对应显示单元 
                         MOV   73H,77H 
                         MOV   74H,78H 
                         MOV   75H,79H
                  OUTT01:POP   PSW                   ;出栈 
                         POP   ACC 
                         SETB  ET0                   ;开放T0 
                         RETI                        ;中断返回
  pd:mov a,42H;日判断
     swap a;
     orl a,41H;
     cjne a,#01H,pd2;1月转31日处理
     jmp rq31;
 pd2:cjne a,#02H,pd3;2月判断是否闰年
     mov a,46H;
     swap a;
     orl a,45H;
     mov b,#4;
     div ab;
     mov a,b;
     cjne a,#00H,rq28;2月不是闰年转28日处理
     jmp rq29;
 pd3:cjne a,#03H,pd4;3月转31日处理
     jmp rq31;
 pd4:cjne a,#04H,pd5;4月转30日处理
     jmp rq30;
 pd5:cjne a,#05H,pd6;5月转31日处理
     jmp rq31;
 pd6:cjne a,#06H,pd7;6月转30日处理
     jmp rq30;
 pd7:cjne a,#07H,pd8;7月转31日处理
     jmp rq31;
 pd8:cjne a,#08H,pd9;8月转31日处理
     jmp rq31;
 pd9:cjne a,#09H,pd10;9月转30日处理
     jmp rq30;
pd10:cjne a,#10H,pd11;10月转31日处理
     jmp rq31;
pd11:cjne a,#11H,pd12;11月转30日处理
     jmp rq30;
pd12:cjne a,#12H,out0;12月转31日处理
rq31:  mov   r0,#42H;月31日+1
     acall add1;
     mov   a,r3;
     cjne  a,#32h,out0;到31日清0
     acall clr0;
     mov 41H,#01H
     jmp yue
rq30: mov   r0,#42H;月30日+1
     acall add1;
     mov   a,r3;
     cjne  a,#31h,out0;到30日清0
     acall clr0;
     mov 41H,#01H
     jmp yue
rq28: mov   r0,#42H;月28日+1
      acall add1;
      mov   a,r3;
      cjne  a,#29h,out0;到28日清0
      acall clr0;
      mov 41H,#01H
      jmp yue
rq29: mov   r0,#42H;月29日+1
      acall add1;
      mov   a,r3;
      cjne  a,#30h,out0;到29日清0
      acall clr0;
      mov 41H,#01H;
yue:  mov r0,#44H          ;月+1
      call add1;
      mov a,r3;
      cjne a,#13h,out0;
      call clr0;
      MOV 43H,#01H
nan:  mov r0,#46H            ;年+1
      call add1;
      mov a,r3;
      cjne a,#99h,out0;
      call clr0;
OUT0:JMP OUTT0

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;加1程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                   ADD1: MOV          A,@R0          ;取当前计时单元数据到A 
                         DEC          R0             ;指向前一地址 
                         SWAP         A              ;A中数据高四位与低四位交换 
                         ORL          A,@R0          ;前一地址中数据放入A中低四位 
                         ADD          A,#01H         ;A加1操作 
                         DA           A              ;十进制调整 
                         MOV          R3,A           ;移入R3寄存器 
                         ANL          A,#0FH         ;高四位变0 
                         MOV          @R0,A          ;放回前一地址单元 
                         MOV          A,R3           ;取回R3中暂存数据 
                         INC          R0             ;指向当前地址单元 
                         SWAP         A              ;A中数据高四位与低四位交换 
                         ANL          A,#0FH         ;高四位变0 
                         MOV          @R0,A          ;数据放入当削地址单元中 
                         RET 
                   CLR0: CLR          C 
                         CLR          A              ;清累加器 
                         MOV          @R0,A          ;清当前地址单元 
                         DEC          R0             ;指向前一地址 
                         MOV          @R0,A          ;前一地址单元清0 
                         RET                         ;子程序返回 
      ;-------------------------调时闪烁程序----------------------; 
		INTT1:          PUSH    ACC 
                      PUSH    PSW 
                      MOV     TL1,#0b0H 
                      MOV     TH1,#3cH 
                      DJNZ    R2,INTT1OUT                ;0.3秒未到退出中断(50MS中断6次) 
                      MOV     R2,#05H               ;重装0.3秒定时用初值 
                      CPL     02H                    ;0.3秒定时到对闪烁标志取反 
                      JB      02H,FL             ;02H位为1时显示单元"熄灭" 
                      MOV     A,R5 
                      CJNE    A,#01H,NL 
                      JMP     NNN1 
                   NL:CJNE    A,#02H,NL1 
                      LJMP    NNN1 
                  NL1:CJNE    A,#03H,NL2;
                      LJMP    NNN2;
                  NL2:CJNE    A,#04H,NL3;
                      LJMP    NNN2;
                  NL3:CJNE    A,#05H,NL4
                      LJMP    NNN3;
                  NL4:CJNE    A,#06H,NL5
                      LJMP    NNN3
                  NL5:CJNE    A,#07H,NL6;
                      LJMP    NNN4;
                  NL6:CJNE    A,#08H,NL7;
                      LJMP    NNN4;
                  NL7:CJNE    A,#09H,NL8
                      LJMP    NNN4;
                  NL8:CJNE    A,#0AH,NL9
                      LJMP    NLL 
                  NL9:CJNE    A,#0BH,INTT1OUT 
                      LJMP    NLL 
                  fl:jmp FLASH1
	          INTT1OUT:POP     PSW     ;恢复现场 
                      POP     ACC 
                      RETI            ;中断退出 
                  NLL:MOV     72H,76H ;时间移入显示缓存器
                      MOV     73H,77H 
                      MOV     74H,78H 
                      MOV     75H,79H 
                      AJMP    INTT1OUT 
                 NNN1:MOV     72H,7BH ;1闹钟时间移入显示缓存器
                      MOV     73H,7CH 
                      MOV     74H,7DH 
                      MOV     75H,7EH
                      AJMP    INTT1OUT
                 NNN2:MOV     72H,50H ;2闹钟时间移入显示缓存器
                      MOV     73H,51H 
                      MOV     74H,52H 
                      MOV     75H,53H
                      AJMP    INTT1OUT
                 NNN3:MOV     72H,54H ;3闹钟时间移入显示缓存器
                      MOV     73H,55H 
                      MOV     74H,56H 
                      MOV     75H,57H
                      AJMP    INTT1OUT     
                 NNN4:MOV     70H,41H;年月日移入显示缓存器
                      MOV     71H,42H;
                      MOV     72H,43H;
                      MOV     73H,44H;
                      MOV     74H,45H;
                      MOV     75H,46H;
							 AJMP    INTT1OUT
                FLASH1:MOV     A,R5
                      CJNE    A,#01H,ML 
                      LJMP    MNN1 
                   ML:CJNE    A,#02H,ML1 
                      LJMP    MNN11 
                  ML1:CJNE    A,#03H,ML2;
                      LJMP    MNN2;
                  ML2:CJNE    A,#04H,ML3;
                      LJMP    MNN22;
                  ML3:CJNE    A,#05H,ML4;
                      LJMP    MNN3;
                  ML4:CJNE    A,#06H,ML5
                      LJMP    MNN33
                  ML5:CJNE    A,#07H,ML6
                      LJMP    MNN4
                  ML6:CJNE    A,#08H,ML7
                      LJMP    MNN44
                  ML7:CJNE    A,#09H,ML8
                      LJMP    MNN444

⌨️ 快捷键说明

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