74HC595级联

1.硬件电路:

2.软件实现:下面的图是来自台湾一位老师佑來認真教Arduino教學讲解

注意:高位先进入。

解释:每次先把大平台放下(ST输出低电平),把活塞拉回,等待数据放上(SH输出低电平)

数据1或者0通过DS输出。放数据后,再把活塞推出去(SH输出高电平)。连续8次就可以把数据完整的放

扫描二维码关注公众号,回复: 13090106 查看本文章

到大平台(ST)上。最后把大平台上抬,8位数据就同时输出去了。(ST输出高电平)。

级联时数据有些不一样,需要注意先入的数据在后一级。需要循环16次,最后ST大平台输出。

3.驱动代码

#DEFINE		P_SCK				06H,5
#DEFINE		P_RCK				06H,4
#DEFINE		P_SI				06H,1

R_ACC1			EQU     0X15
R_ACC2			EQU     0X16
R_ACC3			EQU     0X17
R_ACC_1			EQU     0X18
R_595_DATA1					EQU     0X19		;数据1
R_595_DATA2					EQU     0X1A		;数据2
;*************************************************************************** 
;74HC595输出SEG--级联
;通过ACC传递数据
;*************************************************************************** 
SEND_595:
		;
		MOVIA	2
        MOVAR	R_ACC3				;2个字节
        ;
        MOVIA	R_595_DATA1			;BUF1的缓存器地址 
        MOVAR	FSR	                ;R4
SEND_595_S:
		MOVR	INDF,0          
        MOVAR	R_ACC1             ;将要发送的一个字节数据    		
		;
	    MOVIA	D'8' 
        MOVAR	R_ACC2             ;将要发送的一个字节的位计数器
		;
		BCR     P_SCK      			;拉低
		;
		LCALL	DELAY_US			;延迟一下
		;
SEND_595_LOOP:
		BTRSS	R_ACC1,7			;//先传输高位,通过与运算判断第八是否为1
		BCR		P_SI
		BTRSC	R_ACC1,7
		BSR		P_SI
		;
		BCR		P_SCK				;/*** 步骤2:SHCP每产生一个上升沿,当前的bit就被送入移位寄存器 ***/
		;
		LGOTO	$+1
		LGOTO	$+1
		LGOTO	$+1
		LGOTO	$+1		
		BSR		P_SCK				
		;
		RLR     R_ACC1,1 			;左移一位
		;
	    DECRSZ  R_ACC2,1  			;
        LGOTO   SEND_595_LOOP   	;一个字节未完,继续发送
		;
		LCALL   DELAY_US
		;
		INCR    FSR,1  
        DECRSZ	R_ACC3,1			;下一个数据
        LGOTO	SEND_595_S    		;一帧数据未完,继续发送
		;
		BCR		P_RCK				;74HC595输出锁存 使能
		LCALL	DELAY_US			;步骤3:STCP产生一个上升沿,移位寄存器的数据移入存储寄存器
		BSR		P_RCK				;再将STCP拉高,STCP即可产生一个上升沿
		LCALL	DELAY_US		
SEND_595_RET:
		RET
;=========================================================================			
DELAY_US:
		MOVIA	100
		MOVAR	R_ACC_1
DELAY_US_1:
		DECRSZ	R_ACC_1,1
		LGOTO	DELAY_US_1
		RET

猜你喜欢

转载自blog.csdn.net/u013830926/article/details/109483858
今日推荐