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

📄 final.asm

📁 电子钟
💻 ASM
字号:
COUNT EQU 31H
ORG 0000H
AJMP MAIN
ORG 0003H
LJMP SETW
ORG 000BH
LJMP INTT0  ;计时中断
ORG 001BH
LJMP INTT1  ;闪烁中断
ORG 100H
MAIN:MOV SP,#70H
     MOV 30H,#0AH
     MOV 31H,#00H
     MOV R2,#06H
     MOV R0,#60H
     MOV R7,#0DH
CLEARRAM:MOV @R0,#00H
     INC R0
     DJNZ R7,CLEARRAM
     MOV 20H,#00H  ;标志位
     MOV IP,#2H
     MOV TCON,#00000101B  ;为边缘触发
     MOV TMOD,#11H
     MOV TH0,#4CH
     MOV TL0,#00H ;50MS定时
     MOV TH1,#4CH
     MOV TL1,#00H
     CLR 06H
     SETB EA
     SETB ET1
     SETB EX0
     SETB ET0
     SETB TR0
     MOV R4,#14H  ;1S定时
START:LCALL DISPLAY
      SJMP START
;;;;;;;;;;;;;;;;;;;;;;;;;
SETW:CLR EX0
     PUSH ACC
     PUSH PSW
     CLR TR1
     MOV TH1,#4CH
     MOV TL1,#00H
     SETB TR1
     MOV 32H,#20
     JB P1.7,SETN
     LJMP INCW
SETN:;SETB TR1
     INC COUNT
     MOV A,COUNT
     CJNE A,#6,JUDG
     MOV COUNT,#00H
     CLR 04H
     CLR TR1
     JMP OUTSETW
JUDG:CJNE A,#1,JUDG1
     SETB 00H        ;调整小时十位
     JMP OUTSETW
JUDG1:CJNE A,#2,JUDG2
     CLR 00H
     SETB 01H
     JMP OUTSETW
JUDG2:CJNE A,#3,JUDG3
     CLR 01H
     SETB 02H
     JMP OUTSETW
JUDG3:CJNE A,#4,JUDG4
     CLR 02H
     SETB 03H
     JMP OUTSETW
JUDG4:CJNE A,#5,OUTSETW
     CLR 03H
     SETB 04H
OUTSETW:SETB EX0
        POP PSW
        POP ACC
        RETI
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INCW:MOV A,COUNT
     JZ OUTINCW
INCW0:CJNE A,#1,INCW1
     INC 65H
     MOV A,65H
     DA A
     CJNE A,#3,OUTINCW
     MOV 65H,#00H
     JMP OUTINCW
INCW1:MOV A,COUNT
     CJNE A,#2,INCW2
     INC 64H
     MOV A,65H
     CJNE A,#02H,RRRR
     MOV A,64H
     CJNE A,#04H,OUTINCW
     MOV 64H,#00H
     JMP OUTINCW
RRRR:MOV A,64H
     CJNE A,#0AH,OUTINCW
     MOV 64H,#00H
     JMP OUTINCW
INCW2:MOV A,COUNT
     CJNE A,#3,INCW3
     INC 63H
     MOV A,63H
     DA A
     CJNE A,#6,OUTINCW
     MOV 63H,#00H
     JMP OUTINCW
INCW3:MOV A,COUNT
     CJNE A,#4,INCW4
     INC 62H
     MOV A,62H
     DA A
     CJNE A,#10H,OUTINCW
     MOV 62H,#00H
     JMP OUTINCW
INCW4:MOV A,COUNT
     CJNE A,#5,INCW2
     INC 61H
     MOV A,61H
     DA A
     CJNE A,#6,OUTINCW
     MOV 61H,#00H
OUTINCW:JMP OUTSETW
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
     ;T0中断服务程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INTT0:PUSH ACC
      PUSH PSW
      CLR ET0
      CLR TR0
      MOV A,#00H
      ADD A,TL0
      MOV TL0,A
      MOV A,#4CH
      ADDC A,TH0
      MOV TH0,A
      SETB TR0
      DJNZ R4,OUTT00
      MOV R4,#14H
      MOV R0,#61H   ;秒加一
      ACALL ADD1   ;加1操作
      MOV A,R3
      CLR C
      CJNE A,#60H,ADDSS
ADDSS:JC OUTT0
      ACALL CLR0
      MOV R0,#63H         ;分加一
      LCALL ADD1
      MOV A,R3
      CLR C
      CJNE A,#60H,ADDMG
ADDMG:JC OUTT0
      ACALL CLR0
      MOV R0,#65H
      LCALL ADD1            ;小时加一
      MOV A,R3
      CLR C
      CJNE A,#24H,CLRH
CLRH: JC OUTT0
      ACALL CLR0
OUTT0:MOV 66H,60H;将数据放到对应的显示单元
      MOV 67H,61H
      MOV 68H,62H
      MOV 69H,63H
      MOV 6AH,64H
      MOV 6BH,65H
OUTT00:POP PSW
      POP ACC
      SETB ET0
      RETI
;;;;;;;;;;;;;;;;;;;;;;;;;;
    ;ADD1加一子程序
;;;;;;;;;;;;;;;;;;;;;;;;;;
ADD1:MOV A,@R0
     SWAP A
     DEC R0
     ORL A,@R0
     ADD A,#01H
     DA A
     MOV R3,A
     ANL A,#0FH
     MOV @R0,A
     MOV A,R3
     INC R0
     SWAP A
     ANL A,#0FH
     MOV @R0,A
     RET
;;;;;;;;;;;;;;;;;;;;;;;;;;
    ;清零程序
;;;;;;;;;;;;;;;;;;;;;;;;;;
CLR0: CLR A
      MOV @R0,A
      DEC R0
      MOV @R0,A
      RET
;;;;;;;;;;;;;;;;;;;;;;;;;;
    ;ADD2
;;;;;;;;;;;;;;;;;;;;;;;;;;
ADD2: MOV A,@R0   ;指向当前单元
      ADD A,#01H  ;加一操作
      DA A        ;十进制转换
      ANL A,#0FH
      MOV R3,A
      MOV @R0,A
      RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;
    ;CLR1
;;;;;;;;;;;;;;;;;;;;;;;;;;;
CLR1:CLR A
     MOV @R0,A
     RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   ;闪烁功能程序即T1中断程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INTT1:CLR TR1
      PUSH ACC
      PUSH PSW
      MOV TL1,#00H
      MOV TH1,#4CH
      SETB TR1
      DJNZ R2,OUTT1
      CLR ET1
      MOV R2,#0AH   ;重置初值
      DJNZ 32H,NETR
      CLR TR1
      CLR 00H
      CLR 01H
      CLR 02H
      CLR 03H
      CLR 04H
      CLR 06H
 NETR:CPL 06H       ;每0.5秒换一种状态
      JNB 06H,FLASH
      MOV 67H,61H
      MOV 68H,62H   ;正常显示
      MOV 69H,63H   ;将数据放到对应的显示单元
      MOV 6AH,64H
      MOV 6BH,65H
OUTT1:SETB ET1
      POP PSW
      POP ACC
      RETI
FLASH:JNB 04H,FLASH1
      MOV 67H,30H
      MOV 68H,62H
      MOV 69H,63H
      MOV 6AH,64H
      MOV 6BH,65H
      LJMP OUTT1
FLASH1:JNB 03H,FLASH2
      MOV 68H,30H
      MOV 69H,63H
      MOV 6AH,64H
      MOV 6BH,65H
      LJMP OUTT1
FLASH2:JNB 02H,FLASH3
      MOV 68H,62H
      MOV 69H,30H
      MOV 6AH,64H
      MOV 6BH,65H
      LJMP OUTT1
FLASH3:JNB 01H,FLASH4
      MOV 68H,62H
      MOV 69H,63H
      MOV 6AH,30H
      MOV 6BH,65H
      LJMP OUTT1
FLASH4:JNB 00H,FLASH5
      MOV 68H,62H
      MOV 69H,63H
      MOV 6AH,64H
      MOV 6BH,30H
FLASH5:LJMP OUTT1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   ;显示程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DISPLAY:MOV R1,#66H
        MOV P3,#10000100b
        MOV A,@R1
        MOV DPTR,#TAB
        MOVC A,@A+DPTR
        MOV P1,A
        LCALL DL1MS
        MOV R1,#67H
        MOV P3,#00100100b
        MOV A,@R1
        MOV DPTR,#TAB
        MOVC A,@A+DPTR
        MOV P1,A
        LCALL DL1MS
        MOV R1,#68H
        MOV P3,#00010100b
        MOV A,@R1
        MOV DPTR,#TAB
        MOVC A,@A+DPTR
        MOV P1,A
        LCALL DL1MS
        MOV R1,#69H
        MOV P3,#00001100b
        MOV A,@R1
        MOV DPTR,#TAB
        MOVC A,@A+DPTR
        MOV P1,A
        LCALL DL1MS
        MOV R1,#6AH
        MOV P3,#00000110b
        MOV A,@R1
        MOV DPTR,#TAB
        MOVC A,@A+DPTR
        MOV P1,A
        LCALL DL1MS
        MOV R1,#6BH
        MOV P3,#00000101b
        MOV A,@R1
        MOV DPTR,#TAB
        MOVC A,@A+DPTR
        MOV P1,A
        LCALL DL1MS
        ;MOV P1,#0FFH
        RET
TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH
;;;;;;;;;;;;;;;;;;;;;;;;;
  ;DL1MS延时
;;;;;;;;;;;;;;;;;;;;;;;;;
DL1MS:MOV R6,#14H
  DL1:MOV R5,#19H
  DL2:DJNZ R5,DL2
      DJNZ R6,DL1
      RET

⌨️ 快捷键说明

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