STM32驱动74HC595代码-应用电路级联电路

前几天说了74HC165驱动电路和级联电路,今天说下74HC595。其实它俩用法很像,前者是并入、串出,后者是串入、并出。等于是把前者的操作反着进行了一遍。

意义在哪?

只需要三个单片机的IO,就能控制8个LED或者信号的开关。如果使用级联方式,可以控制上百个。芯片外形与原理图如下:

管脚功能有哪些?放一个数据手册的截图:

VCC、GND就不用说了,MR用作复位,低电平有效,一般通过上拉电阻接到VCC。13脚OE输出使能,一般接GND。Q1~Q7是并行输出的数据,这些数据是从哪来的?

通过三个常用管脚:DS、SHCP、STCP。也就是数据、移位寄存器时钟、存储寄存器时钟。

数据好理解,串行输入数据。这两个时钟怎么理解?

先说移位寄存器时钟,串行数据每更新一个高低信号,移位时钟就要跳动一次。串行数据虽然送入到了74HC595里面,但不是立即显示在管脚上。什么时候显示?

当存储寄存器时钟跳动的时候,数据会按照送入74HC595的先后顺序,依次显示在它的8个管脚上。参考代码如下:

void HC595_WRITE(uint8_t dat)
{
	uint8_t i;
	for(i=0;i<8;i++)
	{
		if(dat & 0x01)
		{
			SER_H;
		}
		else
		{
			SER_L;
		}
		dat >>= 1;
		SCK_L;
		Delay_Us(1);
		SCK_H;
		Delay_Us(1);
	}
	
	RCK_L;
	RCK_H;
}

其中,dat是数据,SCK是移位时钟,RCK是存储时钟。通过这种方式,可以控制8个LED。

如果要控制16或者24个,需要通过级联的方式。和74HC165类似,假设U1、U2两片74HC595级联,两片上的RCK和SCK都要接到单片机上。U1的DS接到单片机的管脚上,U2的DS接到U1的Q7S上。

通过这种方式,一次送入16bit的数据,然后RCK跳动一下,相应的高低信号即可更新到相关的管脚上。

《STM32驱动74HC595代码-应用电路级联电路》有2条评论

  1. 595的话我记得我第一次用是在arduino里,用的shiftout,后来我看了底层发现代码很简单,然后用51和32复刻了shiftout用的595,老简单了。

    回复

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据