單片機(jī)芯片之——圖解74HC595
第一部部分用于快速查閱使用,詳細(xì)的使用見文章第二部分引腳圖
14腳:DS(SER),串行數(shù)據(jù)輸入引腳
13腳:OE, 輸出使能控制腳,它是低電才使能輸出,所以接GND
12腳:RCK,存儲寄存器時鐘輸入引腳。上升沿時,數(shù)據(jù)從移位寄存器轉(zhuǎn)存帶存儲寄存器。
11腳:SCK,移位寄存器時鐘引腳,上升沿時,移位寄存器中的bit 數(shù)據(jù)整體后移,并接受新的bit(從SER輸入)。
10腳:MR,低電平時,清空移位寄存器中已有的bit數(shù)據(jù),一般不用,接 高電平即可。
9 腳 :串行數(shù)據(jù)出口引腳。當(dāng)移位寄存器中的數(shù)據(jù)多于8bit時,會把已有的bit“擠出去”,就是從這里出去的。用于595的級聯(lián)。
Qx:并行輸出引腳
使用參數(shù)VCC:2V~6V,5V最好
I Qn:+- 35mA
注意第一個從SER送入的bit將會從Q7出去。
74HC595介紹一張圖片和一段文字,哪種信息傳遞方式給人的第一視覺沖擊是最大的?我想大家心中都有答案。
這也是我文章標(biāo)題的來由。廢話就到這里,下面我就用圖片來分析595這個chip。
74HC595的最重要的功能就是:串行輸入,并行輸出。3態(tài)高速位移寄存器(好膩害的說)
595里面有2個8位寄存器:移位寄存器、存儲寄存器
移位寄存器
在我看來,74HC595的移位寄存器工作方式就像shou qiang彈夾。但是子彈的發(fā)射(移位寄存器中的數(shù)據(jù)轉(zhuǎn)儲到存儲寄存器),又像是【散x彈】(因為是并行輸出嘛)
為什么說和彈夾很像呢?
1、串行輸入,已進(jìn)入的位數(shù)據(jù)依次下移(所以叫移位寄存器) | 子彈也是一顆一顆上的,先上的子彈,被后上的慢慢往下壓。
2、第一個輸入的位,是并行輸出的最后一個位 | 最先進(jìn)入彈夾的子彈,最后射出。
74HC595的引腳圖
14腳:DS,又叫SER 英文全稱是:Serial data input ,顧名思義,就是串行數(shù)據(jù)輸入口。
595的數(shù)據(jù)來源只有這一個口,一次只能輸入一個位,那么連續(xù)輸入8次,就可以積攢為一個字節(jié)了。
假如,我們要將二進(jìn)制數(shù)據(jù)0111 1111 輸入到595的移位寄存器中,下面來上一張動態(tài)圖,模擬了前2個位輸入的情景。
這個圖有7幀,做了很久,畢竟不是做美工的??芍^術(shù)業(yè)有專攻,聞道有先后啊,還是要虛心學(xué)習(xí) :)
0111 1111 這個數(shù)據(jù)完全輸入后是這樣的
我們還要注意一個腳:11腳,(shift register clock input) 移位寄存器時鐘引腳。上升沿有效。
首先我們要介紹這個引腳的作用。
我們知道51單片機(jī)的工作離不開晶振,他使CPU的工作步調(diào)穩(wěn)定有序,就像跑步時喊1,2,1的那個人。
那么這里的位移寄存器時鐘也是同樣的道理,當(dāng)一個新的位數(shù)據(jù)要進(jìn)來時,已經(jīng)進(jìn)入的位數(shù)據(jù)就在移位寄存器時鐘脈沖的控制下,整體后移,讓出位置。
上升沿:電平從低到高的那個過程。移位寄存器時鐘在上升沿這個過程中才起作用。
存儲寄存器
到這里我們已經(jīng)大致講了怎么上子彈,也把子彈上齊了。下面來將怎么將子彈打出去,也就是怎么將移位寄存器的數(shù)據(jù)轉(zhuǎn)移到存儲寄存器
存儲寄存器是直接和8個輸出引腳相通的,將移位寄存器的數(shù)據(jù)轉(zhuǎn)移到存儲寄存器后,Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7 就可以接受帶到我們
開始輸入的一個字節(jié)的數(shù)據(jù)。所謂存儲寄存器,就是數(shù)據(jù)可以存在這個寄存器中,并不會隨著一次輸出就消失,只要595不斷電,也沒有新 的
數(shù)據(jù)從移位寄存器中過來,數(shù)據(jù)就一直不變且有效。新的數(shù)據(jù)過來后,存儲寄存器中的數(shù)據(jù)就會被覆蓋更新。
12腳: (storage register clock input ) 存儲寄存器時鐘
數(shù)據(jù)從位移寄存器轉(zhuǎn)移到存儲寄存器,也是需要時鐘脈沖驅(qū)動的,這就是12腳的作用。它也是上升沿有效。
自此,我們已經(jīng)講解了一個595正常情況下的工作流程,下面寫一個程序,讓8個LED保持亮暗亮暗.... 間隔的效果。
Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7 分別接 8個LED正極
14腳SER 接 單片機(jī)P3.4
11腳SCK 接 單片機(jī)P3.6
12腳RCK接 單片機(jī)P3.5
13腳OE接GND
10腳MR接VCC
9腳閑置不接
#include#include typedefunsignedcharuchar;typedefunsignedintuint;/**********函數(shù)聲明********************/voidSendTo595(ucharbyteData);/***********************************/sbitSER=P3^4;//p3.4腳控制串行數(shù)據(jù)輸入sbitSCK=P3^6;//串行輸入時鐘sbitRCK=P3^5;//存儲寄存器時鐘voidmain(){SendTo595(85);//85的二進(jìn)制:01010101while(1);}//功能:發(fā)送一個字節(jié)的數(shù)據(jù)給595,再并行輸出voidSendTo595(ucharbyteData){chari=0;for(;i<8;i++){SER=byteData>>7;//大家自己考量這2句byteData=byteData<<1;SCK=1;//上升沿,讓串行輸入時鐘變?yōu)楦唠娖?,并延時2個時鐘周期_nop_();_nop_();SCK=0;//變?yōu)榈碗娖?,為下次?zhǔn)備}/*位移寄存器數(shù)據(jù)準(zhǔn)備完畢,轉(zhuǎn)移到存儲寄存器*/RCK=1;//上升沿,讓存儲寄存器時鐘變?yōu)楦唠娖剑⒀訒r2個時鐘周期_nop_();_nop_();RCK=0;}
擴(kuò)展提升
見識到595的厲害了吧。138譯碼器通過3個輸入口控制8個輸出口,而且還只能是特定的8個輸出值,
而595只用了一個輸入口就可以輸任意的8位數(shù)據(jù)??芍^短小精悍。
啥?你覺的1位控制8位輸出還不夠?讓你的595串聯(lián)起來吧!打造成加特林機(jī)關(guān)槍。
在上面的程序中用到的9腳,沒用起作用,如果要讓2個595串聯(lián)起來的話,就需要它了。
想一下,我們將移位寄存器的8個位填滿后,再往移位寄存器中塞一個會怎么樣?也許你想到了。
對!移位寄存器的最后一個位數(shù)據(jù)會被擠出去,從哪里出去?就是從9腳輸出的。如果我們把第一個595的
9腳連接到第二個的串行數(shù)據(jù)輸入腳SER,那么,就形成了595的級聯(lián)。這樣,如果我們用2個595組合成了一個新的超級595,
這個草雞595的移位寄存器和存儲寄存器的容量都翻倍了,1口控制16口,有木有!你還可以繼續(xù)級聯(lián)下去!
最后還遺留2個 595 的腳沒說
13腳OE 輸出使能控制腳,如果它不工作,那么595的輸出就是高阻態(tài),595就不受我們程序控制了,這顯然違背我們的意愿。
OE的上面畫了一條線,表示他是低電平有效。于是我們將他接GND。
10腳MR ,位移寄存器清空腳,他的作用就是將位移寄存器中的數(shù)據(jù)全部清空,這個很少用到,所以我們一般不讓他起作用,他
也是低電平有效,于是我們給他接VCC。
終于寫完了,希望幫到大家。以后還會繼續(xù)講解其它的74系列的邏輯芯片,盡請期待!
如有錯誤歡迎指出。 :)