项目7(任务5)74HC595的引脚及其功能
我们都有Arduino NANO了,为什么还要用74HC595?
扩展输出用!
拓展输出是什么?
以Arduino Uno为例,它的0-13号口可以接LED灯,13号口自己带一个灯,但一般来说Arduino的0和1号口是串口通信不接灯,只有2-13号口是接灯的,也就是有12个口可以接灯。但假如想要接20个LED灯怎么办呢?这个时候就要拓展输出。
今天给大家介绍一种常用于拓展数字输出的芯片74HC595,它是一款漏极开路输出的CMOS移位寄存器,输出端口为可控的三态输出端,亦能串行输出控制下一级级联芯片。
74HC595的作用就是把串行的信号转为并行的信号,常用在各种数码管以及点阵屏的驱动芯片,使用74HC595可以节约单片机的I/O口资源,用3个I/O就可以控制8个数码管的引脚,它还具有一定的驱动能力,可以免掉三极管等放大电路,所以这块芯片是驱动数码管的神器,应用非常广泛。
1.特点:串入并出
74HC595的最重要的功能就是:串行输入,并行输出。
74HC595具有8位移位寄存器和一个存储器,三态输出功能。移位寄存器和存储器是分别的时钟。
数据在SH_CP的上升沿输入,在ST_CP的上升沿进入的存储寄存器中去。如果两个时钟连在一起,则移位寄存器总是比存储寄存器早一个脉冲。移位寄存器有一个串行移位输入(Ds),和一个串行输出(Q7’),和一个异步的低电平复位,存储寄存器有一个并行8位的,具备三态的总线输出,当使能 OE时(为低电平),存储寄存器的数据输出到总线。
74hc595引脚图
14脚:DS(SER),串行数据输入引脚。
13脚:OE,输出使能控制脚,它是低电才使能输出,所以接GND。
12脚:RCK,存储寄存器时钟输入引脚。上升沿时,数据从移位寄存器转存带存储寄存器。
11脚:SCK,移位寄存器时钟引脚,上升沿时,移位寄存器中的bit 数据整体后移,并接受新的bit(从SER输入)。
10脚:MR,低电平时,清空移位寄存器中已有的bit数据,一般不用,接高电平即可。
9 脚 :串行数据出口引脚。当移位寄存器中的数据多于8bit时,会把已有的bit“挤出去”,就是从这里出去的。用于595的级联。
Qx:并行输出引脚。
74HC595引脚功能
74hc595真值表
74HC595内部结构图
其中,shift register为移位寄存器,latch为锁存器。
移位寄存器
假如,我们要将二进制数据0111 1111 输入到595的移位寄存器中,下面的图片,模拟了前2个位输入的情景。
0111 1111这个数据完全输入后是这样的
这里要注意一个引脚,11脚,(shift registerclock input) 移位寄存器时钟引脚。上升沿有效。
存储寄存器
存储器是直接和8个输出引脚相通的,将移位寄存器的数据转移到存储寄存器后,Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7 就可以接受到开始输入的一个字节的数据。所谓存储器,就是数据可以存在这个寄存器中,并不会随着一次输出就消失,只要74HC595不断电,也没有新的数据从移位寄存器中过来,数据就一直不变且有效。新的数据过来后,存储寄存器中的数据就会被覆盖更新。
这里要注意的是12脚:(storage register clock input ) 存储寄存器时钟。数据从位移寄存器转移到存储寄存器,也是需要时钟脉冲驱动的,这就是12脚的作用。它也是上升沿有效。
2.74HC595具体使用步骤
第一步:目的:将要准备输入的位数据移入74HC595数据输入端上。
方法:送位数据到_595。
第二步:目的:将位数据逐位移入74HC595,即数据串入
方法:SH_CP产生一上升沿,将DS上的数据移入74HC595移位寄存器中,先送低位,后送高位。
第三步:目的:并行输出数据。即数据并出
方法:ST_CP产生一上升沿,将由DS上已移入数据寄存器中的数据送入到输出锁存器。
说明: 从上可分析:从SH_CP产生一上升沿(移入数据)和ST_CP产生一上升沿(输出数据)是二个独立过程,实际应用时互不干扰。即可输出数据的 同时移入数据。
3.74HC595程序
sbit SI_595=P2^0;
sbit RCK_595=P2^2;
sbit SCK_595=P2^1;
void HC595SendData(unsigned char SendVal)//发送数据
{
unsigned char i;
for(i=0;i<8;i++)
{
if((SendVal<
else SI_595=0;
SCK_595=0;//从SCK_595产生一上升沿(移入数据)
_nop_();
_nop_();
SCK_595=1;
}
}
void HC595ShowData()//RCK_595产生一上升沿(输出数据)
{
RCK_595=0;
_nop_();
_nop_();
RCK_595=1;
}
网友评论