目录
1.74H595的介绍
1.什么是74H595
74H595简单来说是一款少量io控制8个io的芯片,通过移位的方式将串行数据变为并行数据。芯片引脚如图所示:
2.74HC595的引脚介绍
SH_CP引脚:移位寄存器时钟引脚,上升沿时,移位寄存器中的bit 数据整体后移一位,并接受新的bit(从DS输入脚,也就是14脚),代码处理如下:
SH_CP = 0; //初始化时,先将SH_CP拉低
SH_CP = 1; //将SH_CP拉高
_nop_();
_nop_(); //延时一段时间后拉低
SH_CP = 0;
ST_CP引脚:存储寄存器时钟输入引脚。上升沿时,数据从移位寄存器转存到存储寄存器,也就是将数据表示出来。代码处理如下:
ST_CP = 0; //初始化时,先将SH_CP拉低
ST_CP = 1; //将ST_CP拉高
_nop_();
_nop_(); //延时一段时间后拉低
ST_CP = 0;
DS引脚:数据输入角,串行数据由此输入。
MR引脚:数据清空脚,低电平时会清除移位数据寄存器的数据,一般的话直接接高电平。
OE引脚:芯片使能引脚,低电平使能失能。
Q?(?代指0~7和7')引脚:数据输出引脚
2.74HC595的使用
74H595就如同一截水管,由于输入的是串行数据,所以要一位一位的输入,每输入一个数据就要ST_CP引脚进行一次上升沿的产生将数据移位才能存储下一个数据,由于是一次性可以显示8位数据,所以一般会存储8个数据后ST_CP引脚进行上升沿将数据进入存储寄存器从而显示出来。74HC595演示视频如下:
74HC595
视频可见,数据随着后面数据的出现被挤在后面了,由此也可以看出,先进入的数据最先出来,所以在处理数据的时候要注意先放入高位,再放入低位。在处理多个74HC595的级联时,可以将ST_CP引脚和SH_CP引脚连接同一个io口,这样既可以同时控制,也可以节省io口。多个74HC595的级联代码如下
void SendTo595(uchar times,uchar byteData) //times为控制第几个74HC595,byteData为级联的位
{
char i,j=0;
for(j=times_595;j>0;j--) //times_595为74HC595的级联个数
{
for(i=8;i>0;i--)
{
if(byteData==i)
{
if(j==times)
SER=1;
}
else
SER=0;
SH_CP = 1;
_nop_();
_nop_();
SH_CP = 0;
}
ST_CP = 1;
_nop_();
_nop_();
ST_CP = 0;
}
}
通过该代码可以控制任意74HC595的任意io进行显示高电平。但不建议在对时序要求特别严格的地方使用。
注意:使用时在初始化要将ST_CP引脚和SH_CP引脚拉低,否则会出现最后一个74HC595的最后一位显示不出来的BUG。