1
电子常识
74HC595是一个8位串行输入、平行输出的位移缓存器:平行输出为三态输出。在SCK的上升沿,单行数据由SDL输人到内部的8位位移缓存器,并由Q7‘输出,而平行输出则是在LCK的上升沿将在8位位移缓存器的数据存人到8位平行输出缓存器。当串行数据输人端OE的控制信号为低使能时,平行输出端的输出值等于平行输出缓存器所存储的值。而当OE为高电位,也就是输出关闭时,平行输出端会维持在高阻抗状态。
引脚功能:
1、74HC595的数据端:
QA--QH:八位并行输出端,可以直接控制数码管的8个段。
QH‘:级联输出端。我将它接下一个595的SI端。
SI:串行数据输入端。
2、74hc595的控制端说明:
/SCLR(10脚):低电平时将移位寄存器的数据清零。通常我将它接Vcc。
SCK(11脚):上升沿时数据寄存器的数据移位。QA--》QB--》QC--》。。。--》QH;下降沿移位寄存器数据不变。(脉冲宽度:5V时,大于几十纳秒就行了。我通常都选微秒级)
3、控制移位寄存器
SCK上升沿数据移位SCK下降沿数据保持
RCK(12脚):上升沿时移位寄存器的数据进入存储寄存器,下降沿时存储寄存器数据不变。通常我将RCK置为低电平,当移位结束后,在RCK端产生一个正脉冲(5V时,大于几十纳秒就行了。我通常都选微秒级),更新显示数据。
4、控制存储寄存器
RCK上升沿移位寄存器的数据进入存储寄存器RCK下降沿存储寄存器数据不变
/G(13脚):高电平时禁止输出(高阻态)。如果单片机的引脚不紧张,用一个引脚控制它,可以方便地产生闪烁和熄灭效果。比通过数据端移位控制要省时省力。
注:
1)74164和74595功能相仿,都是8位串行输入转并行输出移位寄存器。74164的驱动电流(25mA)比74595(35mA)的要小,14脚封装,体积也小一些。
2)74595的主要优点是具有数据存储寄存器,在移位的过程中,输出端的数据可以保持不变。这在串行速度慢的场合很有用处,数码管没有闪烁感。
3)与74hc164只有数据清零端相比,74hc595还多有输出端时能/禁止控制端oe,可以使输出为高阻态。所以是用这块芯片会更方便
4)74HC595是具有8位移位寄存器和一个存储器,三态输出功能。移位寄存器和存储器是分别的时钟。数据在SHcp(见时序图)的上升沿输入,在STcp(见时序图)的上升沿进入的存储寄存器中去。如果两个时钟连在一起,则移位
5)寄存器总是比存储寄存器早一个脉冲。移位寄存器有一个串行移位输入(Ds),和一个串行输出(Q7’),和一个异步的低电平复位,存储寄存器有一个并行8位的,具备三态的总线输出,当使能OE时(为低电平),存储寄存器的数据输出到总线。
5、74hc595真值表
最高电圧和最低电压
时序图:
74HC595逻辑图
74HC595内含8位串入、串/并出移位寄存器和8位三态输出锁存器。寄存器和锁存器分别有各自的时钟输入(SCLK和SLCK),都是上升沿有效。当SCLK从低到高电平跳变时,串行输入数据(SDA)移入寄存器;当SLCK从低到高电平跳变时,寄存器的数据置入锁存器。清除端(CLR)的低电平只对寄存器复位(QS为低电平),而对锁存器无影响。当输出允许控制(EN)为高电平时,并行输出(Q0~Q7)为高阻态,而串行输出(QS)不受影响。
74HC595最多需要5根控制线,即SDA、SCLK、SLCK、CLR和EN。其中CLR可以直接接到高电平,用软件来实现寄存器清零;如果不需要软件改变亮度,EN可以直接接到低电平,而用硬件来改变亮度。把其余三根线和单片机的I/O口相接,即可实现对LED的控制。
数据从SDA口送入74HC595,在每个SCLK的上升沿,SDA口上的数据移入寄存器,在SCLK的第9个上升沿,数据开始从QS移出。如果把第一个74HC595的QS和第二个74HC595的SDA相接,数据即移入第二个74HC595中,照此一个一个接下去,可接任意多个。数据全部送完后,给SLCK一个上升沿,寄存器中的数据即置入锁存器。此时如果EN为低电平,数据即从并口Q0~Q7输出,把Q0~Q7与LED的8段相接,LED就可以实现显示了。要想软件改变LED的亮度,只需改变EN的占空比就行了。
1)硬件电路
用AT89C2051与74HC595接口设计的显示面板电路。
P1口的P115、P116、P117用来控制LED的显示,分别接到SLCK、SCLK和SDA脚。三个数码管用来显示电压值的大小。在电路板上,LED3在最左边,LED1在最右边,送数据时,先送LED3的显示码,最后送LED1的显示码。LED的亮度用PR1~PR3的阻值来控制。
2)显示驱动程序
用DISP1、DISP2、DISP3三个连续的单元存放显示数据,在CPU初始化完成后,调用LRDISP子程序清除74HC595的寄存器,在以后调用显示子程序DISPLAY前就不用再调用清除子程序了。现将两个子程序写出如下:
清除子程序:
CLRDISP:
MOVR2,#24; 三个数码管,一共24位
CLRBIT:
CLRSCLK;寄存器时钟拉低
CLRC;寄存器清零
MOVSDA,C;送入74HC595
SETBSCLK;时钟的上升沿送入寄存器
DJNZR2,CLRBIT;送完24位
RET;子程序返回
显示子程序:
DISPLAY:
CLRSLCK;锁存器时钟拉低
MOVR3,#3;三个数码管
MOVR0,#DISP3;从第三个开始送
DISP1:
MOVA,@R0;送8位数到74HC595
MOVR2,#8
DISP2:
CLRSCLK
RLCA
MOVSDA,C
SETBSCLK
DJNZR2,DISP2;送完一个字节
DECR0;送下一个数码管的显示数据
DJNZR3,DISP1;送完三个字节
SETBSLCK;时钟的上升沿寄存器数据送入锁存器
RET;子程序返回
电路原理图如图所示,用串入并出驱动芯片编写74HC595编写单项流水灯程序。
图74HC595流水灯硬件结构图
74HC595控制端说明:
MR(10脚):低点平时将移位寄存器的数据清零。通常我将它接Vcc。
SHCP(11脚):上升沿时数据寄存器的数据移位。QA--》QB--》QC--》。。。--》QH;下降沿移位寄存器数据不变。(脉冲宽度:5V时,大于几十纳秒就行了。我通常都选微秒级)
STCP(12脚):上升沿时移位寄存器的数据进入数据存储寄存器,下降沿时存储寄存器数据不变。通常我将STCP置为低点平,当移位结束后,在STCP端产生一个正脉冲(5V时,大于几十纳秒就行了。我通常都选微秒级),更新显示数据。
OE(13脚):高电平时禁止输出(高阻态)。如果单片机的引脚不紧张,用一个引脚控制它,可以方便地产生闪烁和熄灭效果。比通过数据端移位控制要省时省力。
表74HC595主要参数
程序流程图
程序:
#include《at89x52.h》
#include《intrins.h》
voiddelay();
sbitin=P2^1;
sbitout=P2^2;
sbitshuju=P2^0;
voidinout595(unsignedchare);
voidmain()
{
unsignedchara;
a=0xfe;
while(1)
{
inout595(a);
delay();
a=_crol_(a,1);
}
}
voidinout595(unsignedchare)//
向595发送一个字节的数据,然后从595输出,本函数具有通用性。
{
unsignedcharf;
in=1;
out=1;
for(f=0;f《8;f++)
{
if((e&0x80)==0x00){shuju=0;}
else{shuju=1;}
in=0;
in=1;
e=e《《1;//
此处可控制先发低位还是高位,向左移先发高位,向右移先取低位
}
out=0;
out=1;
}
voiddelay()
{
unsignedintb;
for(b=0;b《40000;b++);
}
全部0条评论
快来发表一下你的评论吧 !