74HC595的引脚如下
其逻辑如下
引脚说明
Ds :串行数据的输入,简称SER
Q0-Q7:并行输出,
Q7‘ :则是为了级联多个595设置的引脚,级联的话会连接到下一个595的Ds
OE : 芯片使能脚
SHCP:移位时钟,一般简称 SCLK
STCP : 锁存时钟, 一般简称 RCLK
其中对于数据的流向,有些人一直搞不清楚,其实就可以按照下面画的红线去理解
按D7-D0组成的二进制序列数即为要从串口输入的数据
具体的程序如下
#define SER //此添加引脚的输出寄存器
#define SCLK //此添加引脚的输出寄存器
#define RCLK //此添加引脚的输出寄存器
driver_595(uint8_t data)
{
uint8_t i = 0;
uint8_t temp = 0x80;
for(i = 0; i<num; i++)
{
if(data & temp)
{
SER = 1;
}
else
{
SER = 0;
}
SCLK = 1;
_delay(10);
data = data << 1;
SCLK = 0;
}
RCLK = 0;
_delay(10);
RCLK = 1;
}
如果是多个595级联,则用下面的函数
driver_multi_595(uint32_t data, uint8_t bitCnt)
{
uint8_t i = 0;
uint32_t temp = 0x000001<<(num-1);
for(i = 0; i<num; i++)
{
if(data & temp)
{
SER = 1;
}
else
{
SER = 0;
}
SCLK = 1;
_delay(10);
data = data << 1;
SCLK = 0;
}
RCLK = 0;
_delay(10);
RCLK = 1;
}
当然,如果使用的这个函数的时候bitCnt设为8,则和单个595是一样的
需要注意的事情
(1)这个是没有加使能控制, 如果上电对引脚电平以及功耗有要求,可以加上使能引脚的控制
(2)如果系统本身的速度就不快,延时可以省略掉
(3)SCLK,RCLK引脚在初始化结束的时候,一般立即设为低电平