简述74HC595功能
74HC595是串行输入,并行输出的锁存器(可以不用理解)
从Q0~Q7是输出端
VCC电源端;GND接地端
14端口DS是数据输入端
Q7‘是串行数据输出端,(与14端口的输入数据相同,不过要晚一步)可用于级联74HC595(一般不用)
11,12,是时钟输入端口
/MR低电平数据清零,一般接高电平
/OE是高电平高阻态,禁止输出,(有的也说是锁存,具体没试过),一般接低电平。
连接好的电路图如下(大家根据端口号自己对,VCC和GND省略了)
端口介绍完毕,接下来贴程序
sbit SRCLK1=P2^0; //595的SH_CP端口要接的单片机上的端口P2^0(P2^0可以更改为任意端口)
sbit RCLK1=P2^1; //595的ST_CP端口要接的单片机上的端口P2^1(P2^1可以更改为任意端口)
sbit SER1=P2^2; //595的DS端 连接,可以更改为任意端口
void Hc595SendByte(u8 dat1)
{
u8 a;
SRCLK1=0;
RCLK1=0;
for(a=0;a<8;a++) //串行输入过程
{
SER1=dat1>>7;
dat1<<=1;
SRCLK1=1;
_nop_();
_nop_();
SRCLK1=0;
}
RCLK1=1; //并行输出过程
_nop_();
_nop_();
RCLK1=0;
}
ok,简单的介绍完毕后,就可以使用
接下来讲解多个74HC595的使用
方式一:选择级联595,大概图示如下
两个11端口公用一个时钟脉冲,两个12公用一个时钟脉冲
这样连的效果就是后面芯片的输出总是比前面芯片的输出有延时(如果是保持同一个第一个的输出不变的话,两个输出就没有区别)
方式二:采用相同的时钟端口输入,不同的数据输入
这样做的优点就是可以保证每一个芯片的输出人为可控且同步
下面贴代码
sbit SRCLK1=P2^0; //四个芯片的SH-CP端
sbit RCLK1=P2^1; //四个芯片的ST-CP端
sbit SER1=P2^2; // 第一个芯片的DS端
sbit SER2=P2^3; // 第二个芯片的DS端
sbit SER3=P2^4; // 第三个芯片的DS端
sbit SER4=P2^5; // 第四个芯片的DS端
void Hc595SendByte(unsigned char dat1,unsigned char dat2,unsigned char dat3,unsigned char dat4)
//每一个unsigned char都不可少啊,这是血的教训
{
u8 a;
SRCLK1=0;
RCLK1=0;
for(a=0;a<8;a++) //串行输入过程
{
SER1=dat1>>7;
SER2=dat2>>7;
SER3=dat3>>7;
SER4=dat4>>7;
dat1<<=1;
dat2<<=1;
dat3<<=1;
dat4<<=1;
SRCLK1=1;
_nop_();
_nop_();
SRCLK1=0;
}
RCLK1=1; //并行输出过程
_nop_();
_nop_();
RCLK1=0;
}
再深入讲解,什么叫串行输入,并行输出
输入输出相信小伙伴们都明白,这里不赘述
以公司指派命令来举例
你有一个老板,八个员工。
老板每两个小时向你指定一个员工的任务
在十六个小时之后你一次性向八个员工指派任务
那么串行输入在这里指的就是 老板发令的过程,每隔一段时间发送一个指令
并行输出 指的就是你一次性向八个员工发令的过程,一个时刻控制多个端口的输出状态
SH-CP就相当于这里的两小时的节点提示
ST-CP就相当于这里的16小时的节点提示
因为单片机的高速作业能力,使得时间会相当短暂,以至于我们在观察的时候分辨不出来。