介绍
74HC595是一个8位串行输入、并行输出的位移缓存器:并行输出为三态输出。在SCK 的上升沿,串行数据由SDL输入到内部的8位位移缓存器,并由Q7’输出,而并行输出则是在LCK的上升沿将在8位位移缓存器的数据存入到8位并行输出缓存器。当串行数据输入端OE的控制信号为低使能时,并行输出端的输出值等于并行输出缓存器所存储的值。
其实595不一定支持三态输出。针对自己的应用,确定下自己需要输出哪些状态。需不需要输出高电平。比如这款就可以输出高电平、低电平、高阻态:
但是这款就只能输出低电平、高阻态:
别像我一样,被坑了一次。
引脚
真值表
内部逻辑图
从逻辑图可以得到几个信息:
1、拉低SCLR(10脚)会复位移位寄存器,值全为0。正常工作时应该拉高。
2、移位寄存器有8位,SCK(11脚)给一个上升沿,移位寄存器就会往前移动1位。比如此时状态为
SI(14脚)为低电平,OH(9脚)为高电平,则SCK(11脚)来一个上升沿,就会变为:
3、移位寄存器中的8位值不会影响输出引脚状态,输出引脚的状态是由存储寄存器中的8位值决定的,给RCK(12引脚)一个上升沿,移位寄存器中的8位值才会赋值给存储寄存器。假如要让QA~QH输出(1,0,0,1, 0,1,1,0),要首先控制SI、SCK把值赋给移位寄存器,最后给RCK一个上升沿,值才真正输出。
4、G(13脚)是输出控制脚,拉高QA~QH会输出高阻态,拉低才会输出有效值。
时序图
从时序图可以知道74HC595的使用流程为:
1、拉高SCLR(10脚)。如果不用,设计原理图时可以直接拉高。
2、控制SI(14引脚)、SCK(11脚)把移位寄存器的值赋好(使用8个上升沿)。
3、给RCK(12引脚)一个上升沿。
4、拉低G(13脚)。
给个参考程序:
/**********************************************************************************************************
* 函 数 名:HC595_Out1Byte
* 功能说明:HC595输出一个字节
* 形 参:
* 返 回 值:
**********************************************************************************************************/
void HC595_Out1Byte(uint8_t dat)
{
unsigned char i;
HC595_LATCH_LOW();
Delay_us(1);
for(i=0;i<8;i++)
{
HC595_SRCLK_LOW(); //先将串行时钟输入端SRCLK置成低电平
Delay_us(1);
if(dat&0x80)
HC595_SER_HIGH(); //每次只取一位
else
HC595_SER_LOW();
dat<<=1; //每次只取一位进行左移
HC595_SRCLK_HIGH(); //数据在串行时钟输入端SRCLK的上升沿输入到移位寄存器中
Delay_us(1); //空指令
}
HC595_LATCH_HIGH(); //LATCH上升沿并行数据输出
Delay_us(1);
HC595_LATCH_LOW();
}
常见的原理图
级联使用
把前一个的OH(9脚)接到下一个的SI(11脚)就可以级联使用了。