📄 595led修改.txt
字号:
SDATA_595 EQU P1.0 ;串行数据输入 14 DS
SH_CP EQU P1.1 ;移位时钟脉冲 11 SH_CP 上升沿有效
; (控制数据进入595)
ST_CP EQU P1.2 ;输出锁存器控制脉冲 12 ST_CP 上升沿有效
;(控制在595中的数据输出到外部)
MAIN: MOV R0,#00H ;R0=00H
MAIN1: MOV DPTR,#TABLE ;TABLE放到DPTR中
MOV A,R0 ;A=R0=00H
MOVC A,@A+DPTR ;TABLE的内容放到A中,一个一次地放,第二次再运行到这
;里再放入第二个数据到A,下面解释以第一次放入01H为例
CALL OUT_595 ;调用OUT_595
CALL DELAY ;调用DELAY延时程序
INC R0 ;R0加1
CJNE R0,#08H,MAIN1 ;R0和8比较,不相等就跳到MAIN1,R0=8时向下运行
MOV R0,#00H
JMP MAIN1 ;跳到MAIN1
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;输出数据
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
OUT_595:LCALL WR_595 ;调用WR_595
CLR ST_CP ;ST_CP清零,后面再置一,产生上升沿
NOP
NOP
CLR ST_CP
NOP
NOP
SETB ST_CP ;上升沿时才会将数据送到输出锁存器
RET
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;输入数据到595
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
WR_595: MOV R4,#08H ;R4=8H
WR_LOOP:RLC A ;A带Cy左移,01H=00000001B左移,变成00000010B,Cy=0
MOV SDATA_595,C ;SDATA_595=Cy=0
CLR SH_CP ;SH_CP清零,后面再置一,产生上升沿
NOP
NOP
SETB SH_CP ;产生上升沿,发生移位
DJNZ R4,WR_LOOP ;R4减一不等与零,则转移到WR_LOOP,否则向下运行
RET ;返回刚才调用的位置OUT_595:LCALL WR_595,运行下一命令
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;延时
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
DELAY: MOV R5,#5
DEL0: MOV R6,#64
DEL1: MOV R7,#128
DJNZ R7,$
DJNZ R6,DEL1
DJNZ R5,DEL0
RET
TABLE:
DB 01H,02H,04H,08H,10H,20H,40H,80H,00H
;变成2进制就是
;00000001B,00000010B,00000100B,00001000B,00010000B,
;00100000B,01000000B,10000000B,000000000B
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -