特點
8位串列輸入 /8位串列或並行輸出 存儲狀態暫存器,三種狀態
輸出暫存器(三態輸出:就是具有高電平、低電平和高阻抗三種輸出狀態的門電路。)可以直接清除 100MHz的移位頻率
輸出能力
並行輸出,匯流排驅動; 串列輸出;標準中等規模積體電路
595移位暫存器有一個串列移位輸入(Ds),和一個串列輸出(Q7'),和一個異步的低電平復位,存儲暫存器有一個並行8位的,具備三態的匯流排輸出,當使能OE時(為低電平),存儲暫存器的數據輸出到匯流排。
參考數據
Cpd決定動態的能耗,
Pd=Cpd×VCC×f1+∑(CL×VCC^2×f0)
F1=輸入頻率,CL=輸出電容 f0=輸出頻率(MHz) Vcc=電源電壓
引腳說明
符號 | 引腳 | 描述 |
Q0--Q7 | 第15腳,第1-7腳 | 8位並行數據輸出, |
GND | 第8腳 | 地 |
Q7’ | 第9腳 | 串列數據輸出 |
MR | 第10腳 | 主復位(低電平) |
SHCP | 第11腳 | 移位暫存器時鐘輸入 |
STCP | 第12腳 | 存儲暫存器時鐘輸入 |
OE | 第13腳 | 輸出有效(低電平) |
DS | 第14腳 | 串列數據輸入 |
VCC | 第16腳 | 電源 |
使用方法
74595的數據端:
QA--QH: 八位並行輸出端,可以直接控制數碼管的8個段。
QH': 級聯輸出端。將它接下一個595的SI端。
SI: 串列數據輸入端。
74595的控制端說明:
/SCLR(10腳): 低電平時將移位暫存器的數據清零。通常我將它接Vcc。
SCK(11腳):上升沿時數據暫存器的數據移位。QA-->QB-->QC-->...-->QH;下降沿移位暫存器數據不變。(脈衝寬度:5V時,大於幾十納秒就行了。我通常都選微秒級)
RCK(12腳):上升沿時移位暫存器的數據進入數據存儲暫存器,下降沿時存儲暫存器數據不變。通常我將RCK置為低點平,當移位結束後,在RCK端產生一個正脈衝(5V時,大於幾十納秒就行了。我通常都選微秒級),更新顯示數據。
/G(13腳): 高電平時禁止輸出(高阻態)。如果單片機的引腳不緊張,用一個引腳控制它,可以方便地產生閃爍和熄滅效果。比通過數據端移位控制要省時省力。
注1)74164和74595功能相仿,都是8位串列輸入轉並行輸出移位暫存器。74164的驅動電流(25mA)比74595(35mA)的要小,14腳封裝,體積也小一些。
2)74595的主要優點是具有數據存儲暫存器,在移位的過程中,輸出端的數據可以保持不變。這在串列速度慢的場合很有用處,數碼管沒有閃爍感。
3)595是串入並出帶有鎖存功能移位暫存器,它的使用方法很簡單,在正常使用時SCLR為高電平, G為低電平。從SER每輸入一位數據,串列輸595是串入並出帶有鎖存功能移位暫存器,它的使用方法很簡單,如下面的真值表,在正常使用時SCLR為高電平, G為低電平。從SER每輸入一位數據,串列輸入時鐘SCK上升沿有效一次,直到八位數據輸入完畢,輸出時鐘上升沿有效一次,此時,輸入的數據就被送到了輸出端。入時鐘SCK上升沿有效一次,直到八位數據輸入完畢,輸出時鐘上升沿有效一次,此時,輸入的數據就被送到了輸出端。
595具體使用的步驟:
第一步:目的:將要準備輸入的位數據移入74HC595數據輸入端上。
方法:送位數據到_595。
第二步:目的:將位數據逐位移入74HC595,即數據串入
方法:SCK_595產生一上升沿,將PSI_595上的數據移入74HC595中.從低到高
第三步:目的:並行輸出數據。即數據並出
方法:P1.1產生一上升沿,將由SI_595上已移入數據暫存器中的數據
送入到輸出鎖存器。
說明: 從上可分析:從SCK_595產生一上升沿(移入數據)和RCK_595產生一上升沿(輸出數據)是二個獨立過程,實際套用時互不干擾。即可輸出數據的 同時移入數據。
真值表
輸入 | 輸出 | 功能 | |||||
SHCP | STCP | OE | MR | DS | Q7’ | Qn | |
× | × | L | L | × | L | NC | MR為低電平時僅僅影響移位暫存器 |
× | ↑ | L | L | × | L | L | 空移位暫存器到輸出暫存器 |
× | × | H | L | × | L | Z | 清空移位暫存器,並行輸出為高阻狀態 |
↑ | × | L | H | H | Q6 | NC | 邏輯高電平移入移位暫存器狀態0,包含所有的移位暫存器狀態 移入 |
× | ↑ | L | H | × | NC | Qn’ | 移位暫存器的內容到達保持暫存器並從並口輸出 |
↑ | ↑ | L | H | × | Q6’ | Qn’ | 移位暫存器內容移入,先前的移位暫存器的內容到達保持暫存器並出 |
相關注釋
H=高電平狀態
L=低電平狀態
↑=上升沿
↓=下降沿
Z=高阻態
NC=無變化
×=無關係
當MR為高電平,數據在SHCP上升沿進入移位暫存器,在STCP上升沿輸出到並行連線埠,OE為使能端,低電平有效,當OE為低時,輸出使能,為高關閉使能,並不影響其他輸入端。
程式樣例
DS接MOSI,OE/GND接GND,SH_CP接SCLK,ST_CP接使能信號BIT0@P1,MR/VCC接POWER,如果不需要16位,改US16B,不使用H暫存器即可,還有SPI工作期間可以進入低功耗,也可以執行指令.
#include
void main(void)
{
WDTCTL = WDTPW + WDTHOLD;
P1DIR |= BIT0 + BIT1;
P1OUT &= ~BIT0;
USICTL0 |= USIPE6 + USIPE5 + USIMST + USIOE;
USICTL1 |= USIIE;
USICKCTL = USIDIV_7 + USISSEL_2;
USICTL0 &= ~USISWRST;
while(1)
{
P1OUT |= BIT0;
USISRH = 0xAA;
USISRL = 0xAA;
USICNT = 0x10 + USI16B; // 16位數,級聯可用.
while((USICTL1 & USIIFG) != 0x01){ //此處可以乾別的
//這裡寫入與SPI無關的代碼,共8*16=128條單周期指令.
}
USICTL1 &= ~USIIFG;
P1OUT &= ~BIT0;
}
}
單片機74HC595模組驅動程式
74HC595 LED控制
#include
#include
#defineNOP()_nop_()
sbitMOSIO=P3^4;
sbitR_CLK=P3^5;
sbitS_CLK=P3^6;
voiddelay(unsignedinti);
voidHC595SendData(unsignedcharSendVal);
main()
{unsignedcharLed=0xfe;
HC595SendData(0xff);
while(1)
{ HC595SendData(Led);
Led<<=1;
Led =Led|0x01;
if(Led==0xff)Led=0xfe;
delay(200);
}
}
voiddelay(unsignedinti)
{unsignedintj;
for(i;i>0;i--)
for(j=300;j>0;j--);
}
voidHC595SendData(unsignedcharSendVal)
{
unsignedchari;
for(i=0;i<8;i++)
{
if((SendVal<