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

📄 test8led.asm

📁 C51汇编程序
💻 ASM
字号:
 LEDBUF1 DATA 70H
 LEDBUF2 DATA 78H
 LEDSP   DATA 6FH
 OVERTIME EQU 400
 TIMECOU DATA 6EH
;********************************************
 NUL1  EQU  37H    ;空置单元
 NUL0  EQU  36H    ;空置单元
 HOU1  EQU  35H    ;时高位存储单元
 HOU0  EQU  34H    ;时低位存储单元
 MIN1  EQU  33H    ;分高位存储单元
 MIN0  EQU  32H    ;分低位存储单元
 SEC1  EQU  31H    ;秒高位存储单元
 SEC0  EQU  30H    ;秒低位存储单元
 ;********************主程序*********************
 ORG 0000H  ;主程序入口
 LJMP MAIN
 ORG 002BH  ;T2中断入口
 LJMP CTC2
;*****************主程序开始********************
;*************设置初值显示*23时*59分*00秒********
MAIN:
     MOV NUL1,#0FFH
     MOV NUL0,#0FFH
     MOV HOU1,#2
     MOV HOU0,#3
     MOV MIN1,#5
     MOV MIN0,#9
     MOV SEC1,#0
     MOV SEC0,#0
;*************定时器T2每2.5mS中断一次************
CTC0:
      MOV SP, #0DFH         ;对于具有256字节内部RAM芯片来说,
                            ;将0E0H-0FFH,共计32字节作为堆栈区
      MOV TIMECOU,#OVERTIME
      MOV TH2,#0F7H         ;初值0F700送定时器T2
      MOV TL2,#00H
      MOV RCAP2H,#0F7H
      MOV RCAP2L,#00H
      MOV T2CON,#04H   ;初始化T2工作方式(自动重装初值、定时)并启动T2
      SETB ET2         ;允许定时器T2中断
      SETB EA          ;开中断
      SETB TR2
      SJMP $
;****************定时器T2中断********************************
PROC CTC2
CTC2:
     PUSH PSW
     PUSH ACC

     LCALL DISPC
     LCALL DISPLAY

     DJNZ TIMECOU,NEXT20
     MOV TIMECOU,#OVERTIME
     
     LCALL TIMEUP           ;1秒定时到,调用计时子程序
     
NEXT20:
     POP ACC
     POP PSW
     CLR TF2
  RETI
  END
;**************时间计时子程序***************
 PROC TIMEUP
 TIMEUP:
        INC SEC0
        MOV A,SEC0
        CJNE A,#10,TIMEREXIT
        MOV SEC0,#00H
        INC SEC1
        MOV A,SEC1
        CJNE A,#6,TIMEREXIT
        MOV SEC1,#00H

        INC MIN0
        MOV A,MIN0
        CJNE A,#10,TIMEREXIT
        MOV MIN0,#00H
        INC MIN1
        MOV A,MIN1
        CJNE A,#6,TIMEREXIT
        MOV MIN1,#00H

        INC HOU0
        MOV A,HOU1
        CJNE A,#2,HOUR1
        MOV A,HOU0
        CJNE A,#4,TIMEREXIT
        MOV HOU1,#00H
        MOV HOU0,#00H
  HOUR1:
        MOV A,HOU0
        CJNE A,#10,TIMEREXIT
        MOV HOU0,#00H
        INC HOU1
 TIMEREXIT:
      RET
      END
;*****************以下为LED显示程序*************
 PROC DISPLAY
 DISPLAY:
         SETB RS1
         SETB RS0
         INC LEDSP
         MOV A,LEDSP
         ANL A,#07
         ADD A,#LEDBUF2
         MOV R0,A
         MOV P2,#000H  ;黄师傅加的这条指令有点神呀!!!
         MOV P0,@R0
         MOV A,LEDSP
         ANL A,#07H
         CJNE A,#7,NEXT1
   NEXT0:
         MOV P2, #00000001B
         SJMP EXIT
   NEXT1:
         CJNE A, #6, NEXT2
         MOV  P2,#00000010B
         SJMP EXIT
   NEXT2:
         CJNE A, #5, NEXT3
         MOV  P2,#00000100B
         SJMP EXIT
   NEXT3:
         CJNE A, #4, NEXT4
         MOV  P2,#00001000B
         SJMP EXIT
   NEXT4:
         CJNE A, #3, NEXT5
         MOV  P2,#00010000B
         SJMP EXIT
   NEXT5:
         CJNE A, #2, NEXT6
         MOV  P2,#00100000B
         SJMP EXIT
   NEXT6:
         CJNE A, #1, NEXT7
         MOV  P2,#01000000B
         SJMP EXIT
   NEXT7:
         MOV  P2,#10000000B

   EXIT:
         RET
  END

;******************************************************************************
 PROC DISPC
 DISPC:
      SETB RS1
      CLR RS0
      MOV R0,#LEDBUF1
      MOV R1,#SEC0
      MOV R2,#8
 LOOP21:
       MOV A,@R1
       MOV @R0, A
       INC R0
       INC R1
       DJNZ R2,LOOP21
 LOOP22:
       MOV R0,#LEDBUF1
       MOV R1,#LEDBUF2
       MOV R2,#8
       MOV DPTR, #DISPTAB
 LOOP23:
       MOV A ,@R0
       MOVC A,@A+DPTR
       MOV @R1,A

       INC R0
       INC R1
       DJNZ R2,LOOP23
       RET
 END

;*********************共阳数码管************************************************
DISPTAB:
       ;   0     1   2     3   4   5   6   7    8   9   A   B   C    D    E   F
       DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH

⌨️ 快捷键说明

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