一、僅用一個74HC595驅動四位甚至更多的數碼管
在數碼管上要顯示同一個數字可以用靜態顯示,當數碼管要顯示不同數字時就用到動態顯示。圖所示為74HC595芯片的封裝及引腳分布。74HC595是由8位移位寄存器和8位三態並行輸出的D型鎖存器組成,如圖所示。
14腳:DS(SER),串行數據輸入引腳
13腳:OE, 輸出使能控制腳,它是低電才使能輸出,所以接GND
12腳:RCK,存儲寄存器時鍾輸入引腳。上升沿時,數據從移位寄存器轉存帶存儲寄存器。
11腳:SCK,移位寄存器時鍾引腳,上升沿時,移位寄存器中的bit 數據整體后移,並接受新的bit(從SER輸入)。
10腳:MR,低電平時,清空移位寄存器中已有的bit數據,一般不用,接 高電平即可。
9 腳 :串行數據出口引腳。當移位寄存器中的數據多於8bit時,會把已有的bit“擠出去”,就是從這里出去的。用於595的級聯。
Qx:並行輸出引腳
74HC595具有以下特征:
(1) 移位寄存器接收串行數據、提供串行或8位並行數據輸出;
(2) 移位寄存器和鎖存器擁有獨立的時鍾輸入;
(3) 移位寄存器擁有異步復位信號
所示為74HC595的時序圖。由時序圖可以看出,串行輸入數據在移位時鍾的上升沿被讀進移位寄存器中(更正先傳輸高位,時序圖有誤);當復位信號有效時,移位寄存器被清零;在輸出使能為低電平且鎖存時鍾的上升沿時,移位寄存器的值被鎖存輸出;當輸出使能為高電平時,輸出高阻態。而串行輸出接口則是輸出移位寄存器的最高位,且不受輸出使能的控制。
14腳:DS,又叫SER 英文全稱是:Serial data input ,顧名思義,就是串行數據輸入口。
11腳,(shift register clock input) 移位寄存器時鍾引腳。上升沿有效。
12腳: (storage register clock input ) 存儲寄存器數據從位移寄存器轉移到存儲寄存器,也是需要時鍾脈沖驅動的,上升沿有效。
參考代碼(代碼有誤,先傳高位)
#include<reg51.h> #include<intrins.h>
/**********函數聲明********************/ void SendTo595(unsigned char byteData);
/***********************************/ sbit SER = P3^4; //p3.4腳控制串行數據輸入 sbit SCK = P3^6; //串行輸入時鍾 sbit RCK = P3^5; //存儲寄存器時鍾 void main() { SendTo595(55); //85的二進制:0101 0101 while(1); } //功能:發送一個字節的數據給595,再並行輸出 void SendTo595(unsigned char byteData) { char i=0;
for(;i<8;i++) { SER = byteData>>7; //此條語句嚴重錯誤,因為74HC595先傳高位 byteData= byteData<<1; SCK = 1; //上升沿,讓串行輸入時鍾變為高電平,並延時2個時鍾周期 _nop_(); _nop_(); SCK = 0; //變為低電平,為下次准備 } /*位移寄存器數據准備完畢,轉移到存儲寄存器*/ RCK = 1; //上升沿,讓存儲寄存器時鍾變為高電平,並延時2個時鍾周期 _nop_(); _nop_(); RCK = 0; }
74HC595和74HC164的區別主要有:
1、74HC595有鎖存器,所以在移位過程中輸出可以保持不變;而74HC164沒有鎖存器,所以每產生一個移位時鍾輸出就改變一次。這是二者的最大區別
2、74HC595使用專門的Q7'引腳實現多片級聯;74HC164直接使用輸出引腳Q7級聯
3、74HC595有使能OE,OE無效時輸出引腳為高阻態;而74HC164沒有使能引腳
4、74HC595的復位是針對移位寄存器的,想要復位LATCH寄存器還須ST_CP上升沿將移位寄存器內容加載到鎖存寄存器;也就是說:74HC595的復位是同步的,74HC164的復位是異步的,所以74HC164的復位更簡單
5、74HC164有對應的74HC165並轉串芯片