📄 qicai.txt
字号:
/*-------------------------------------*/
/*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 + -