0x00 74595芯片简介
74595芯片有很多种封装,不管是贴片的还是直插式的,它们的引脚定义都如下图所示:
其中 :
- Q0-Q7为并行数据输出口,可以输出高低电平。
- OE 为使能引脚,低电平有效
- DS 为串行数据输入引脚,也称SER,也就是你用于输入数据的引脚
- MR为复位引脚,将其拉低可以清空数据
- STCP在上升沿时,数据从移位寄存器转存到存储寄存器
- SHCP在上升沿时,数据移位,并且可以接收新的数据(从DS引脚输入)
- Q7S为串行数据输出引脚,这个引脚可以用于级联其他的74595芯片。
其工作原理为,74595内部有两个8位的寄存器,其中一个用于存储,一个用于移位输入新的数据,74595将根据用于存储的8位寄存器内容,8个引脚按位依次输出对应的电平值。
0x01 实现原理
以下将介绍如何编写函数向74595发送一个字节的数据,如果需要控制两个74595芯片,将这个函数调用两次即可。
实现的原理都在代码之中,结合引脚介绍即可看懂
void SendTo595(uint8_t byteData)
{
int i=0;
uint8_t SER;
for(;i<8;i++)
{
//判断最高位数据是 0 或 1
SER = (byteData>>7) & 0x01;
if(SER)
gpio_bit_set(GPIO_PORT_SER,GPIO_PIN_SER);
else
gpio_bit_reset(GPIO_PORT_SER,GPIO_PIN_SER);
byteData= byteData<<1;
//上升沿,让串行输入时钟变为高电平,并延时2个时钟周期
gpio_bit_set(GPIO_PORT_SCK,GPIO_PIN_SCK);/
delay_1us(5);
gpio_bit_reset(GPIO_PORT_SCK,GPIO_PIN_SCK);//变为低电平,为下次准备
}
/*位移寄存器数据准备完毕,转移到存储寄存器*/
//上升沿,让存储寄存器时钟变为高电平,并延时2个时钟周期
gpio_bit_set(GPIO_PORT_RCK,GPIO_PIN_RCK);
delay_1us(5);
gpio_bit_reset(GPIO_PORT_RCK,GPIO_PIN_RCK);
}