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