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

📄 渐变七彩灯.txt

📁 采用汇编语言写的51单片机的七彩灯控制程序
💻 TXT
字号:
/*---------------------------------------*/
/*P1。5接红LED,P1。4接绿色LED,P1。3接蓝色
/*LED,总共分三档,分别由P1。0、P1。1、P1。2
/*控制,P1。0为低时变色速度最慢,P1。2最高.*/

CO        EQU   2   ; 0.25MS计数?计数200表示50MS
CU        EQU   5    ;50MS计数器,计数20表示1
QDSHJ     EQU   200   ;按键首次启动加减速的时间控制,小时和分钟使用同一个数字以同步
LISHJ     EQU   10    ;设定连加减的速度
LO        EQU   0AAH
HI        EQU   3CH
ALL_RED   EQU   50  ;最终点亮的时间控制
STOP      EQU   18  ;计到此处表示完全点亮


COUNTER         EQU   021H ;最终点亮开始计数
RED_ON          EQU   022H ;开始慢慢点亮计数
RED_OFF         EQU   023H ;开始慢慢变暗计数
RED_COUNTER     EQU   024H
DEDA            EQU   025H



WLED            EQU     P3.0
RED             EQU     P3.2
GREEN           EQU     P3.3
BLUE            EQU     P3.4



      ORG     00H
      CALL    LED_BL
      CALL    START
      ORG     0100H
LOOP:
      CALL    RED_LED 
LOOP1:
      CALL    PURPLE_LED
      CALL    BLUE_LED
      CALL    CYAN_LED 
      CALL    GREEN_LED
      CALL    YELLOW_LED 
      CALL    WHITE_LED
      CALL    BLACK_LED
      JMP     LOOP1


;------------------------------------------

;------------------------------------------
RED_LED:
      MOV     COUNTER,#0
      MOV     RED_ON,#0
      MOV     RED_OFF,#250
RED_LED0:
      INC     RED_ON
      DEC     RED_OFF
;---------------------------------------------------------
;一个周期程序
RED_LED1:
      MOV     A,RED_OFF
      MOV     R4,A
      MOV     A,RED_ON
      MOV     R5,A
RED_LED2:
      SETB    RED   ;此处关闭LED
      SETB    BLUE
      SETB    GREEN
      CALL    DEX
      DJNZ    R4,RED_LED2

      CLR     RED
      SETB    BLUE
      SETB    GREEN
RED_LED3:
      CALL    DEX
      DJNZ    R5,RED_LED3
;---------------------------------------------------------
      INC     COUNTER
      MOV     A,COUNTER      
      CJNE    A,#249,RED_LED0  ;跳入RED_LED0加大占空比
      MOV     RED_ON,#0
      MOV     RED_OFF,#250
      MOV     COUNTER,#0

      CLR     RED   ;直接启动,控制MOS管
      SETB    BLUE
      SETB    GREEN
      CALL    DELAY1

      RET
;------------------------------------------- 
      

;------------------------------------------
GREEN_LED:
      MOV     COUNTER,#0
      MOV     RED_ON,#0
      MOV     RED_OFF,#250
      SETB    RED
GREEN_LED0:
      INC     RED_ON
      DEC     RED_OFF
;---------------------------------------------------------
;一个周期程序
GREEN_LED1:
      MOV     A,RED_OFF
      MOV     R4,A
      MOV     A,RED_ON
      MOV     R5,A
GREEN_LED2:
      CLR     BLUE
      CLR     GREEN
      CALL    DEX
      DJNZ    R4,GREEN_LED2


      SETB    BLUE
      CLR     GREEN
GREEN_LED3:
      CALL    DEX
      DJNZ    R5,GREEN_LED3
;---------------------------------------------------------
      INC     COUNTER
      MOV     A,COUNTER      
      CJNE    A,#249,GREEN_LED0  ;跳入RED_LED0加大占空比
      MOV     RED_ON,#0
      MOV     RED_OFF,#250
      MOV     COUNTER,#0
      
      SETB    RED
      SETB    BLUE
      CLR     GREEN
      CALL    DELAY1

      RET
;------------------------------------------- 


;------------------------------------------
BLUE_LED:
      MOV     COUNTER,#0
      MOV     RED_ON,#0
      MOV     RED_OFF,#250
      SETB    GREEN
BLUE_LED0:
      INC     RED_ON
      DEC     RED_OFF
;---------------------------------------------------------
;一个周期程序
BLUE_LED1:
      MOV     A,RED_OFF
      MOV     R4,A
      MOV     A,RED_ON
      MOV     R5,A
BLUE_LED2:
      CLR     BLUE
      CLR     RED
      CALL    DEX
      DJNZ    R4,BLUE_LED2


      CLR     BLUE
      SETB    RED
BLUE_LED3:
      CALL    DEX
      DJNZ    R5,BLUE_LED3
;---------------------------------------------------------
      INC     COUNTER
      MOV     A,COUNTER      
      CJNE    A,#249,BLUE_LED0  ;跳入RED_LED0加大占空比
      MOV     RED_ON,#0
      MOV     RED_OFF,#250
      MOV     COUNTER,#0

      CLR     BLUE
      SETB    GREEN
      CALL    DELAY1

      RET
;------------------------------------------- 


;------------------------------------------
PURPLE_LED:
      MOV     COUNTER,#0
      MOV     RED_ON,#0
      MOV     RED_OFF,#250
      CLR     RED   ;此处关闭LED
PURPLE_LED0:
      INC     RED_ON
      DEC     RED_OFF
;---------------------------------------------------------
;一个周期程序
PURPLE_LED1:
      MOV     A,RED_OFF
      MOV     R4,A
      MOV     A,RED_ON
      MOV     R5,A
PURPLE_LED2:
      SETB    BLUE
      SETB    GREEN
      CALL    DEX
      DJNZ    R4,PURPLE_LED2


      CLR     BLUE
      SETB    GREEN
PURPLE_LED3:
      CALL    DEX
      DJNZ    R5,PURPLE_LED3
;---------------------------------------------------------
      INC     COUNTER
      MOV     A,COUNTER      
      CJNE    A,#249,PURPLE_LED0  ;跳入RED_LED0加大占空比
      MOV     RED_ON,#0
      MOV     RED_OFF,#250
      MOV     COUNTER,#0

      CLR     RED   ;直接启动,控制MOS管
      CLR     BLUE
      SETB    GREEN
      CALL    DELAY1

      RET
;------------------------------------------- 

;------------------------------------------
CYAN_LED:
      MOV     COUNTER,#0
      MOV     RED_ON,#0
      MOV     RED_OFF,#250
      SETB    RED
CYAN_LED0:
      INC     RED_ON
      DEC     RED_OFF
;---------------------------------------------------------
;一个周期程序
CYAN_LED1:
      MOV     A,RED_OFF
      MOV     R4,A
      MOV     A,RED_ON
      MOV     R5,A
CYAN_LED2:
      CLR     BLUE
      SETB    GREEN
      CALL    DEX
      DJNZ    R4,CYAN_LED2


      CLR     BLUE
      CLR     GREEN
CYAN_LED3:
      CALL    DEX
      DJNZ    R5,CYAN_LED3
;---------------------------------------------------------
      INC     COUNTER
      MOV     A,COUNTER      
      CJNE    A,#249,CYAN_LED0  ;跳入RED_LED0加大占空比
      MOV     RED_ON,#0
      MOV     RED_OFF,#250
      MOV     COUNTER,#0
      
      SETB    RED
      CLR     BLUE
      CLR     GREEN
      CALL    DELAY1

      RET
;------------------------------------------- 

;------------------------------------------
YELLOW_LED:
      MOV     COUNTER,#0
      MOV     RED_ON,#0
      MOV     RED_OFF,#250
      SETB    BLUE
YELLOW_LED0:
      INC     RED_ON
      DEC     RED_OFF
;---------------------------------------------------------
;一个周期程序
YELLOW_LED1:
      MOV     A,RED_OFF
      MOV     R4,A
      MOV     A,RED_ON
      MOV     R5,A
YELLOW_LED2:
      SETB     RED
      CLR     GREEN
      CALL    DEX
      DJNZ    R4,YELLOW_LED2


      CLR     RED
      CLR     GREEN
YELLOW_LED3:
      CALL    DEX
      DJNZ    R5,YELLOW_LED3
;---------------------------------------------------------
      INC     COUNTER
      MOV     A,COUNTER      
      CJNE    A,#249,YELLOW_LED0  ;跳入RED_LED0加大占空比
      MOV     RED_ON,#0
      MOV     RED_OFF,#250
      MOV     COUNTER,#0
      
      SETB    BLUE
      CLR     GREEN
      CLR     RED
      CALL    DELAY1

      RET
;------------------------------------------- 


;------------------------------------------
WHITE_LED:
      MOV     COUNTER,#0
      MOV     RED_ON,#0
      MOV     RED_OFF,#250
WHITE_LED0:
      INC     RED_ON
      DEC     RED_OFF
;---------------------------------------------------------
;一个周期程序
WHITE_LED1:
      MOV     A,RED_OFF
      MOV     R4,A
      MOV     A,RED_ON
      MOV     R5,A
WHITE_LED2:
      SETB    BLUE
      CLR     RED
      CLR     GREEN
      CALL    DEX
      DJNZ    R4,WHITE_LED2


      CLR     RED
      CLR     GREEN
      CLR     BLUE
WHITE_LED3:
      CALL    DEX
      DJNZ    R5,WHITE_LED3
;---------------------------------------------------------
      INC     COUNTER
      MOV     A,COUNTER      
      CJNE    A,#249,WHITE_LED0  ;跳入RED_LED0加大占空比
      MOV     RED_ON,#0
      MOV     RED_OFF,#250
      MOV     COUNTER,#0
      
      CLR     BLUE
      CLR     GREEN
      CLR     RED
      CALL    DELAY1

      RET
;------------------------------------------- 

;------------------------------------------
BLACK_LED:
      MOV     COUNTER,#0
      MOV     RED_ON,#0
      MOV     RED_OFF,#250
BLACK_LED0:
      INC     RED_ON
      DEC     RED_OFF
;---------------------------------------------------------
;一个周期程序
BLACK_LED1:
      MOV     A,RED_OFF
      MOV     R4,A
      MOV     A,RED_ON
      MOV     R5,A
BLACK_LED2:
      CLR     BLUE
      CLR     RED
      CLR     GREEN
      CALL    DEX
      DJNZ    R4,BLACK_LED2


      CLR     RED
      SETB    GREEN
      SETB    BLUE
BLACK_LED3:
      CALL    DEX
      DJNZ    R5,BLACK_LED3
;---------------------------------------------------------
      INC     COUNTER
      MOV     A,COUNTER      
      CJNE    A,#249,BLACK_LED0  ;跳入RED_LED0加大占空比
      MOV     RED_ON,#0
      MOV     RED_OFF,#250
      MOV     COUNTER,#0
      
      SETB    BLUE
      SETB    GREEN
      CLR     RED
      CALL    DELAY1

      RET
;------------------------------------------- 


;-------------------------------------------
START:
      MOV     P1,#0FFH
      MOV     P3,#0FFH
      RET
;--------------------------------------------

;----------------------------------------------
; timer delay 10.151ms 
DELAY:
      MOV  R6,#50
DEL:  
      MOV  R7,#100
      DJNZ R7,$
      DJNZ R6,DEL
      DJNZ R5,DELAY
      RET
;----------------------------------------------


;----------------------------------------------
; timer delay 10.151ms 
DELAY1:
      MOV  R5,#200
      MOV  R6,#50
DEL1:  
      MOV  R7,#100
      DJNZ R7,$
      DJNZ R6,DEL1
      DJNZ R5,DELAY
      RET
;----------------------------------------------
;----------------------------
;LED闪动程序
LED_BL:
     MOV    R4,#6 ;闪动6次
LE1: 
     CPL    P3.0
     MOV    R5,#10 ;5 x 10.151ms
     CALL   DELAY
     DJNZ   R4,LE1
     RET
;---------------------------


;-------------------------------
;500us延时程序
DEX:  
      MOV   R6,#1
      MOV   R7,#15 ;2us 
DE1:  
      NOP  ;1 X 20us
      DJNZ  R7,DE1 ;2 X 20us
      DJNZ  R6,DE1
      RET ; 2us
;------------------------------

      END

⌨️ 快捷键说明

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