74HC595的引腳如下

圖片.png
其邏輯如下

圖片.png
引腳說明

圖片.png
Ds :串行數(shù)據(jù)的輸入,簡稱SER
Q0-Q7:并行輸出,
Q7‘ :則是為了級聯(lián)多個595設置的引腳,級聯(lián)的話會連接到下一個595的Ds
OE : 芯片使能腳
SHCP:移位時鐘,一般簡稱 SCLK
STCP : 鎖存時鐘, 一般簡稱 RCLK
其中對于數(shù)據(jù)的流向,有些人一直搞不清楚,其實就可以按照下面畫的紅線去理解

圖片.png
按D7-D0組成的二進制序列數(shù)即為要從串口輸入的數(shù)據(jù)
具體的程序如下
#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級聯(lián),則用下面的函數(shù)
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;
}
當然,如果使用的這個函數(shù)的時候bitCnt設為8,則和單個595是一樣的
需要注意的事情
(1)這個是沒有加使能控制, 如果上電對引腳電平以及功耗有要求,可以加上使能引腳的控制
(2)如果系統(tǒng)本身的速度就不快,延時可以省略掉
(3)SCLK,RCLK引腳在初始化結束的時候,一般立即設為低電平