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

📄 qicai.txt

📁 七彩多变彩灯控制器
💻 TXT
📖 第 1 页 / 共 5 页
字号:
/*-------------------------------------*/
/*SUBJECT:先点亮前三个红灯,然后三个顺序点亮16段红灯*/
/*16段红灯点亮后,然后绿灯开始顺序点亮,再蓝灯开始点亮*/
/*DESIGN:张宝财*  DATA:2006/10/27  */


;74HC595管脚定义
DSR_595    EQU   P1.0 ;红色LED数据从此脚输入
DSG_595    EQU   P1.1 ;绿色LED数据输入脚
DSB_595    EQU   P1.2 ;蓝色LED数据输入脚
SGCP_595   EQU   P1.3 ;在脉冲的上升沿移位寄存器接收数据
STCP_595   EQU   P1.4 ;在脉冲的上升沿输出数据到输出寄存器
EN_595     EQU   P1.5 ;595使能端,低电平有效


DIS_COUN   EQU   021H ;显示计数器
STATE0     EQU   022H
STATE1     EQU   023H
STATE2     EQU   024H
STATE3     EQU   025H
WALK_COUN  EQU   026H





       ORG    00H
       SETB   EN_595
       SETB   EN_595
       CALL   DELAY1
       SETB   EN_595
       CLR    DSR_595
       CLR    DSG_595
       CLR    DSB_595
       CLR    SGCP_595 ;先将数据脉冲请零以防数据窜入
       CLR    STCP_595 ;把数据输入脚置低电平
       MOV    DIS_COUN,#0
       MOV    SP,#40H
       MOV    STATE0,#0H
       MOV    STATE1,#0H
       MOV    WALK_COUN,#00H
       LJMP   LOOP

       ORG    0100H
LOOP:
       CALL   RED
       MOV    R5,#200
       CALL   DELAY1


       CALL   YELLOW
       MOV    R5,#200
       CALL   DELAY1


       CALL   GREEN
       MOV    R5,#200
       CALL   DELAY1


       CALL   CYAN
       MOV    R5,#200
       CALL   DELAY1


       
       CALL   BLUE
       MOV    R5,#200
       CALL   DELAY1

       
       CALL   PURPLE
       MOV    R5,#200
       CALL   DELAY1


       CALL   WHITE
       MOV    R5,#200
       CALL   DELAY1

       CALL   WALK_RED
       CALL   WALK_GREEN
       CALL   WALK_BLUE
       CALL   WALK_RED_GREEN
       CALL   WALK_GREEN_BLUE        
       CALL   WALK_WHITE_GREEN
       CALL   WALK_WHITE_BLUE
       CALL   WALK_WHITE_PURPLE
       CALL   RED_AND_GREEN
       CALL   GREEN_AND_BLUE
       CALL   GREEN_AND_PURPLE
       JMP    LOOP



;---------------------------------------------------------------------------------------------
;红色LED开始循环点亮
RED:
       MOV    DIS_COUN,#0
       CLR    SGCP_595 ;先将数据脉冲请零以防数据窜入
       CLR    STCP_595 ;把数据输入脚置低电平
       MOV    R0,#0FFH
       CALL   REDOUT_595
       RET
;-------------------------------------------------



;--------------------------------------------------
;输出锁存器输出数据子程序
REDOUT_595:
       SETB  EN_595
       LCALL REDWR_595
       CLR   STCP_595 ;把数据输入脚置低电平
       NOP
       NOP
       SETB  STCP_595 ;上升沿将数据送到输出锁存器
       NOP
       NOP
       NOP
       LCALL REDWR_595
       CLR   STCP_595 ;把数据输入脚置低电平
       NOP
       NOP
       SETB  STCP_595 ;上升沿将数据送到输出锁存器
       NOP
       NOP
       NOP
       CLR   EN_595
       RET
;--------------------------------------------------


;--------------------------------------------------
;移位寄存器接收数据子程序
REDWR_595: 
       MOV   R4,#08H ;
       MOV   A,R0
REDWR_LOOP: 
       RLC   A
       MOV   DSR_595,C
       CPL   C
       MOV   DSB_595,C
       MOV   DSG_595,C
       SETB  SGCP_595 ;上升沿发生移位
       NOP
       NOP
       CLR   SGCP_595
       DJNZ  R4,REDWR_LOOP ;移位寄存器接收8位数据
       RET
;-----------------------------------------------------------------------



;-----------------------------------------------------------------------
;黄色LED开始循环点亮
YELLOW:
       MOV    DIS_COUN,#0
       CLR    SGCP_595 ;先将数据脉冲请零以防数据窜入
       CLR    STCP_595 ;把数据输入脚置低电平
       MOV    R0,#0FFH
       CALL   YELLOWOUT_595
       RET
;-------------------------------------------------



;--------------------------------------------------
;输出锁存器输出数据子程序
YELLOWOUT_595:
       SETB  EN_595
       LCALL YELLOWWR_595
       CLR   STCP_595 ;把数据输入脚置低电平
       NOP
       NOP
       SETB  STCP_595 ;上升沿将数据送到输出锁存器
       NOP
       NOP
       NOP
       LCALL YELLOWWR_595
       CLR   STCP_595 ;把数据输入脚置低电平
       NOP
       NOP
       SETB  STCP_595 ;上升沿将数据送到输出锁存器
       NOP
       NOP
       NOP
       CLR   EN_595
       RET
;--------------------------------------------------


;--------------------------------------------------
;移位寄存器接收数据子程序
YELLOWWR_595: 
       MOV   R4,#08H ;
       MOV   A,R0
YELLOWWR_LOOP: 
       RLC   A
       MOV   DSR_595,C
       MOV   DSG_595,C
       CPL   C
       MOV   DSB_595,C
       SETB  SGCP_595 ;上升沿发生移位
       NOP
       NOP
       CLR   SGCP_595
       DJNZ  R4,YELLOWWR_LOOP ;移位寄存器接收8位数据
       RET
;-----------------------------------------------------------------------


;---------------------------------------------------------------------------------------------
;绿色LED开始循环点亮
GREEN:
       MOV    DIS_COUN,#0
       CLR    SGCP_595 ;先将数据脉冲请零以防数据窜入
       CLR    STCP_595 ;把数据输入脚置低电平
       MOV    R0,#0FFH
       CALL   GREENOUT_595
       RET
;-------------------------------------------------



;--------------------------------------------------
;输出锁存器输出数据子程序
GREENOUT_595:
       SETB  EN_595
       LCALL GREENWR_595
       CLR   STCP_595 ;把数据输入脚置低电平
       NOP
       NOP
       SETB  STCP_595 ;上升沿将数据送到输出锁存器
       NOP
       NOP
       NOP
       LCALL GREENWR_595
       CLR   STCP_595 ;把数据输入脚置低电平
       NOP
       NOP
       SETB  STCP_595 ;上升沿将数据送到输出锁存器
       NOP
       NOP
       NOP
       CLR   EN_595
       RET
;--------------------------------------------------


;--------------------------------------------------
;移位寄存器接收数据子程序
GREENWR_595: 
       MOV   R4,#08H ;
       MOV   A,R0
GREENWR_LOOP: 
       RLC   A
       MOV   DSG_595,C
       CPL   C
       MOV   DSR_595,C
       MOV   DSB_595,C
       SETB  SGCP_595 ;上升沿发生移位
       NOP
       NOP
       CLR   SGCP_595
       DJNZ  R4,GREENWR_LOOP ;移位寄存器接收8位数据
       RET
;-----------------------------------------------------------------------


;---------------------------------------------------------------------------------------------
;青色LED开始循环点亮
CYAN:
       MOV    DIS_COUN,#0
       CLR    SGCP_595 ;先将数据脉冲请零以防数据窜入
       CLR    STCP_595 ;把数据输入脚置低电平
       MOV    R0,#0FFH
       CALL   CYANOUT_595
       RET
;-------------------------------------------------



;--------------------------------------------------
;输出锁存器输出数据子程序
CYANOUT_595:
       SETB  EN_595
       LCALL CYANWR_595
       CLR   STCP_595 ;把数据输入脚置低电平
       NOP
       NOP
       SETB  STCP_595 ;上升沿将数据送到输出锁存器
       NOP
       NOP
       NOP
       LCALL CYANWR_595
       CLR   STCP_595 ;把数据输入脚置低电平
       NOP
       NOP
       SETB  STCP_595 ;上升沿将数据送到输出锁存器
       NOP
       NOP
       NOP
       CLR   EN_595
       RET
;--------------------------------------------------


;--------------------------------------------------
;移位寄存器接收数据子程序
CYANWR_595: 
       MOV   R4,#08H ;
       MOV   A,R0
CYANWR_LOOP: 
       RLC   A
       MOV   DSG_595,C
       MOV   DSB_595,C
       CPL   C
       MOV   DSR_595,C
       SETB  SGCP_595 ;上升沿发生移位
       NOP
       NOP
       CLR   SGCP_595
       DJNZ  R4,CYANWR_LOOP ;移位寄存器接收8位数据
       RET
;-----------------------------------------------------------------------



;---------------------------------------------------------------------------------------------
;蓝色LED开始循环点亮
BLUE:
       MOV    DIS_COUN,#0
       CLR    SGCP_595 ;先将数据脉冲请零以防数据窜入
       CLR    STCP_595 ;把数据输入脚置低电平
       MOV    R0,#0FFH
       CALL   BLUEOUT_595
       RET
;-------------------------------------------------


;--------------------------------------------------
;输出锁存器输出数据子程序
BLUEOUT_595:
       SETB  EN_595
       LCALL BLUEWR_595
       CLR   STCP_595 ;把数据输入脚置低电平
       NOP
       NOP
       SETB  STCP_595 ;上升沿将数据送到输出锁存器
       NOP
       NOP
       NOP
       LCALL BLUEWR_595
       CLR   STCP_595 ;把数据输入脚置低电平
       NOP
       NOP
       SETB  STCP_595 ;上升沿将数据送到输出锁存器
       NOP
       NOP
       NOP
       CLR   EN_595
       RET
;--------------------------------------------------


;--------------------------------------------------
;移位寄存器接收数据子程序
BLUEWR_595: 
       MOV   R4,#08H ;
       MOV   A,R0
BLUEWR_LOOP: 
       RLC   A
       MOV   DSB_595,C
       CPL   C
       MOV   DSR_595,C
       MOV   DSG_595,C
       SETB  SGCP_595 ;上升沿发生移位
       NOP
       NOP
       CLR   SGCP_595
       DJNZ  R4,BLUEWR_LOOP ;移位寄存器接收8位数据
       RET
;-----------------------------------------------------------------------


;---------------------------------------------------------------------------------------------
;紫色LED开始循环点亮
PURPLE:
       MOV    DIS_COUN,#0
       CLR    SGCP_595 ;先将数据脉冲请零以防数据窜入
       CLR    STCP_595 ;把数据输入脚置低电平
       MOV    R0,#0FFH
       CALL   PURPLEOUT_595
       RET
;-------------------------------------------------


;--------------------------------------------------
;输出锁存器输出数据子程序
PURPLEOUT_595:
       SETB  EN_595
       LCALL PURPLEWR_595
       CLR   STCP_595 ;把数据输入脚置低电平
       NOP
       NOP
       SETB  STCP_595 ;上升沿将数据送到输出锁存器
       NOP
       NOP
       NOP
       LCALL PURPLEWR_595
       CLR   STCP_595 ;把数据输入脚置低电平
       NOP
       NOP
       SETB  STCP_595 ;上升沿将数据送到输出锁存器
       NOP
       NOP
       NOP
       CLR   EN_595
       RET
;--------------------------------------------------


;--------------------------------------------------
;移位寄存器接收数据子程序
PURPLEWR_595: 
       MOV   R4,#08H ;
       MOV   A,R0
PURPLEWR_LOOP: 
       RLC   A
       MOV   DSB_595,C
       MOV   DSR_595,C
       CPL   C
       MOV   DSG_595,C
       SETB  SGCP_595 ;上升沿发生移位
       NOP
       NOP
       CLR   SGCP_595
       DJNZ  R4,PURPLEWR_LOOP ;移位寄存器接收8位数据
       RET
;-----------------------------------------------------------------------




;---------------------------------------------------------------------------------------------
;白色LED开始循环点亮
WHITE:
       MOV    DIS_COUN,#0
       CLR    SGCP_595 ;先将数据脉冲请零以防数据窜入
       CLR    STCP_595 ;把数据输入脚置低电平
       MOV    R0,#0FFH
       CALL   WHITEOUT_595
       RET
;-------------------------------------------------


;--------------------------------------------------
;输出锁存器输出数据子程序
WHITEOUT_595:
       SETB  EN_595
       LCALL WHITEWR_595
       CLR   STCP_595 ;把数据输入脚置低电平
       NOP
       NOP
       SETB  STCP_595 ;上升沿将数据送到输出锁存器
       NOP
       NOP
       NOP
       LCALL WHITEWR_595
       CLR   STCP_595 ;把数据输入脚置低电平
       NOP
       NOP
       SETB  STCP_595 ;上升沿将数据送到输出锁存器
       NOP
       NOP
       NOP
       CLR   EN_595
       RET
;--------------------------------------------------


;--------------------------------------------------
;移位寄存器接收数据子程序
WHITEWR_595: 
       MOV   R4,#08H ;
       MOV   A,R0
WHITEWR_LOOP: 
       RLC   A
       MOV   DSB_595,C
       MOV   DSR_595,C
       MOV   DSG_595,C
       SETB  SGCP_595 ;上升沿发生移位
       NOP
       NOP
       CLR   SGCP_595
       DJNZ  R4,WHITEWR_LOOP ;移位寄存器接收8位数据
       RET
;-----------------------------------------------------------------------


;---------------------------------------------------------------------------------------------------------------
;红色LED开始循环追加点亮
WALK_RED:
       MOV   WALK_COUN,#0
S1:
       CALL  NULL
       CALL  WKRED
       INC   WALK_COUN
       MOV   A,WALK_COUN
       CJNE  A,#0AH,S1
       MOV   WALK_COUN,#0
       RET

WKRED:
       CLR    DSR_595
       CLR    DSG_595
       CLR    DSB_595
       MOV    DIS_COUN,#0
       CLR    SGCP_595 ;先将数据脉冲请零以防数据窜入
       CLR    STCP_595 ;把数据输入脚置低电平
       CLR    EN_595   ; 使能器件595输出
WKRED1:
       CALL   WKREDOUT_5951
       INC    DIS_COUN
       MOV    R5,#10
       CALL   DELAY1
       MOV    A,STATE1
       RL     A
       MOV    STATE1,A
       INC    STATE1

       MOV    A,DIS_COUN
       CJNE   A,#08H,WKRED1
       MOV    DIS_COUN,#0
       MOV    STATE0,#01H
       MOV    STATE1,#0FFH
WKRED2:
       CALL   WKREDOUT_5952
       INC    DIS_COUN
       MOV    R5,#10
       CALL   DELAY1
       MOV    A,STATE0
       RL     A
       MOV    STATE0,A
       INC    STATE0
       
       MOV    A,DIS_COUN
       CJNE   A,#08H,WKRED2
       MOV    DIS_COUN,#00H
       MOV    STATE1,#01H
       MOV    STATE0,#00H
       RET
;-------------------------------------------------



;--------------------------------------------------
;第一个IC点亮
WKREDOUT_5951:
       SETB  EN_595
       LCALL FREDWR_595 ;第二个IC数据输入
       CLR   STCP_595 ;把数据输入脚置低电平
       NOP
       NOP
       SETB  STCP_595 ;上升沿将数据送到输出锁存器
       NOP
       NOP
       NOP
       LCALL SREDWR_595
       CLR   STCP_595 ;把数据输入脚置低电平
       NOP
       NOP
       SETB  STCP_595 ;上升沿将数据送到输出锁存器
       NOP
       NOP
       NOP
       CLR    EN_595   ; 使能器件595输出
       RET
;--------------------------------------------------


;--------------------------------------------------
;第二个IC点亮
WKREDOUT_5952:
       SETB  EN_595
       LCALL FREDWR_595
       CLR   STCP_595 ;把数据输入脚置低电平
       NOP
       NOP
       SETB  STCP_595 ;上升沿将数据送到输出锁存器
       NOP
       NOP
       NOP
       LCALL SREDWR_595
       CLR   STCP_595 ;把数据输入脚置低电平
       NOP
       NOP
       SETB  STCP_595 ;上升沿将数据送到输出锁存器
       NOP
       NOP
       NOP
       CLR   EN_595
       RET
;--------------------------------------------------

⌨️ 快捷键说明

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