一、74HC595簡介
74HC595是一個8位串行輸入、平行輸出的位移緩存器:平行輸出為三態輸出。在SCK的上升沿,單行數據由SDL輸人到內部的8位位移緩存器,并由Q7‘輸出,而平行輸出則是在LCK的上升沿將在8位位移緩存器的數據存人到8位平行輸出緩存器。當串行數據輸人端OE的控制信號為低使能時,平行輸出端的輸出值等于平行輸出緩存器所存儲的值。而當OE為高電位,也就是輸出關閉時,平行輸出端會維持在高阻抗狀態。
二、74hc595引腳圖及功能
引腳圖:
引腳功能:
三、74HC595工作原理
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邏輯圖
五、典型應用電路
1、74HC595驅動LED的電路設計
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;子程序返回
2、基于74HC595流水燈設計
電路原理圖如圖所示,用串入并出驅動芯片編寫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++);
}
評論