通過上一課的學(xué)習(xí),我們貌似成功的點(diǎn)亮了一個(gè)LED小燈,但是還有一些知識(shí)大家還沒有徹底明白。單片機(jī)是根據(jù)硬件電路圖的設(shè)計(jì)來寫代碼的,所以我們不僅僅要學(xué)習(xí)編程知識(shí),還有硬件知識(shí),也要進(jìn)一步的學(xué)習(xí),這節(jié)課我們就要來穿插介紹電路硬件知識(shí)。
3.1 電磁干擾EMI
第一個(gè)知識(shí)點(diǎn),去耦電容的應(yīng)用,那首先要介紹一下去耦電容的應(yīng)用背景,這個(gè)背景就是電磁干擾,也就是傳說中的EMI。
1、冬天的時(shí)候,尤其是空氣比較干燥的內(nèi)陸城市,很多朋友都有這樣的經(jīng)歷,手觸碰到電腦外殼、鐵柜子等物品的時(shí)候會(huì)被電擊,實(shí)際上這就是“靜電放電”現(xiàn)象,也稱之為ESD。
2、不知道有沒有同學(xué)有這樣的經(jīng)歷,早期我們使用電鉆這種電機(jī)設(shè)備,并且同時(shí)在聽收音機(jī)或者看電視的時(shí)候,收音機(jī)或者電視會(huì)出現(xiàn)雜音,這就是“快速瞬間群脈沖”的效果,也稱之為EFT。
3、以前的老電腦,有的性能不是很好,帶電熱插拔優(yōu)盤、移動(dòng)硬盤等外圍設(shè)備的時(shí)候,內(nèi)部會(huì)產(chǎn)生一個(gè)百萬分之一秒的電源切換,直接導(dǎo)致電腦出現(xiàn)藍(lán)屏或者重啟現(xiàn)象,就是熱插拔的“浪涌”效果,稱之為Surge。
... ...
電磁干擾的內(nèi)容有很多,我們這里不能一一列舉,但是有些內(nèi)容非常重要,后邊我們要一點(diǎn)點(diǎn)的了解。這些問題大家不要認(rèn)為是小問題,比如一個(gè)簡(jiǎn)單的靜電放電,我們用手能感覺到的靜電,可能已經(jīng)達(dá)到3KV以上,如果用眼睛能看得到的,至少是5KV了,只是因?yàn)檫@個(gè)電壓雖然很高,電量卻很小,因此不會(huì)對(duì)人體造成傷害。但是我們應(yīng)用的這些半導(dǎo)體元器件就不一樣了,一旦瞬間電壓過高,就有可能造成器件的損壞。而且,即使不損壞,在2、3里邊介紹的兩種現(xiàn)象,也嚴(yán)重干擾到我們正常使用電子設(shè)備了。
基于以上的這些問題,就誕生了電磁兼容(EMC)這個(gè)名詞。這節(jié)課我們僅僅講一下去耦電容的應(yīng)用,電磁兼容的處理在我們今后設(shè)計(jì)電路,對(duì)PCB畫板布局中應(yīng)用尤為重要,那是后話,暫且不說。
3.2 去耦電容的應(yīng)用
首先我們來看圖3-1。
圖3-1 去耦電容應(yīng)用
左邊這張圖,過了保險(xiǎn)絲以后,接了一個(gè)470uF的電容C16,右邊這種圖,經(jīng)過開關(guān)后,接了一個(gè)100uF的電容C19,并且并聯(lián)了一個(gè)0.1uF的電容C10。其中C16和C19起到的作用是一樣的,C10的作用和他們兩個(gè)不一樣,我們先來介紹這2個(gè)大一點(diǎn)的電容。
容值比較大的電容,理論上可以理解成水缸或者水池子,同時(shí),大家可以直接把電流理解成水流,其實(shí)大自然萬物的原理都是類似的。
作用一,緩沖作用。當(dāng)上電的瞬間,電流從電源處流下來的時(shí)候,不穩(wěn)定,容易沖擊電子器件,加個(gè)電容可以起到緩沖作用。就如同我們直接用水龍頭的水澆地,容易沖壞花花草草的。我們只需要在水龍頭處加個(gè)水池,讓水經(jīng)過水池后再緩慢流進(jìn)草地,就不會(huì)沖壞花草,起到有效的保護(hù)作用。
作用二,穩(wěn)定作用。我們一整套電路,后級(jí)的電子器件功率大小、電流大小也不一樣,器件工作的時(shí)候,電流大小不是一直持續(xù)不變的。比如后級(jí)有個(gè)器件還沒有工作的時(shí)候,電流消耗是100mA,突然它參與工作了,電流猛的增大到150mA了,這個(gè)時(shí)候如果沒有一個(gè)水缸的話,電路中的電壓(水位)就會(huì)直接突然下降,比如我們的5V電壓突然降低到3V了。而我們系統(tǒng)中有些電子元器件,必須高于一定的電壓才能正常工作,電壓太低就直接不工作了,這個(gè)時(shí)候水缸就必不可少了。電容會(huì)在這個(gè)時(shí)候把存儲(chǔ)在里邊的電流釋放一下,穩(wěn)定電壓,當(dāng)然,隨后前級(jí)的電流會(huì)及時(shí)把水缸充滿的。
有了這個(gè)電容,可以說我們的電壓和電流就會(huì)很穩(wěn)定了,不會(huì)產(chǎn)生大的波動(dòng)。這種電容常用的有以下三種:

圖3-2 鋁電解電容

圖3-3 鉭電容 圖3-4 陶瓷電容
這三種電容是我們常用的三種電容,其中第一種個(gè)頭大,占空間大,單位容量價(jià)格最便宜,第二種和第三種個(gè)頭小,占空間小,性能一般也略好于第一種,但是價(jià)格也貴不少。當(dāng)然,除了價(jià)格,還有一些特殊參數(shù),在通信要求高的場(chǎng)合也要考慮很多,這里暫且不說。我們板子上現(xiàn)在用的是第一種,只要在符合條件的情況下,第一種470uF的電容不到一毛錢,同樣的耐壓和容值,第二種和第三種可能得1塊錢左右。
電容的選取,第一個(gè)參數(shù)是耐壓值的考慮。我們用的是5V系統(tǒng),電容的耐壓值要高于5V,一般推薦1.5倍到2倍即可,有些場(chǎng)合稍微高于也可以。我們板子上用的是10V耐壓的。第二個(gè)參數(shù)是電容容值,這個(gè)就需要根據(jù)經(jīng)驗(yàn)來選取了,選取的時(shí)候,要看這個(gè)電容起作用的這塊系統(tǒng)的功率消耗情況,如果系統(tǒng)耗電較大,波動(dòng)可能比較大,那么容值就要選大一些,反之,可以小一些。
剛開始同學(xué)們?cè)O(shè)計(jì)電路也模仿別人,別人用多大自己也用多大,慢慢積累。比如咱上邊講電容作用二的時(shí)候,電流從100mA突然增大到150mA的時(shí)候,其實(shí)即使加上這個(gè)電容,電壓也會(huì)輕微波動(dòng),比如從5V波動(dòng)到4.9V,但是只要我們板子上的器件在電壓4.9V以上也可以正常工作的話,這點(diǎn)波動(dòng)是沒有問題的,但是如果不加或者加的很小,電壓波動(dòng)比較大,有些器件就會(huì)工作不正常了。但是如果加的太大,占空間并且價(jià)格也高,所以這個(gè)地方電容的選取多參考經(jīng)驗(yàn)。
第二個(gè)電容,容值較小,是0.1uF,也就是100nF,是用來濾除高頻信號(hào)干擾的。比如ESD,EFT等。有一點(diǎn)大家要清楚,我們初中學(xué)過電容可以通交流隔直流,但是電容的參數(shù)對(duì)不同頻率段的干擾的作用是不一樣的。這個(gè)100nF的電容,是我們的前輩根據(jù)干擾的頻率段,根據(jù)板子的參數(shù),根據(jù)電容本身的參數(shù)所總結(jié)出來的一個(gè)值。也就是說,以后大家在設(shè)計(jì)數(shù)字電路的時(shí)候,在電源處的去耦高頻電容,直接用這個(gè)0.1uF就可以了,不需要去計(jì)算。
還有一點(diǎn),就是大家看我們的電路圖可以看出來,通常在電路中可能瞬間電流較大的地方,會(huì)加一個(gè)大電容,比如在1602液晶左上角的那個(gè),靠近了單片機(jī)的VCC以及1602液晶背光的VCC,起到穩(wěn)定電壓的作用,在左上角電機(jī)和蜂鳴器位置有一個(gè),也是起到穩(wěn)定電壓的作用。還有在所有的IC器件的VCC和GND之間,都會(huì)放一個(gè)0.1uF的高頻去耦電容,特別在布板的時(shí)候,這個(gè)0.1uF電容要盡可能的靠近IC,盡量很順利的將這個(gè)IC的VCC和GND連到一起,這個(gè)大家先了解,細(xì)節(jié)以后再討論。
3.3 三極管在數(shù)字電路中的應(yīng)用
三極管在我們數(shù)字電路和模擬電路中都有大量的應(yīng)用,在我們開發(fā)板上也用了多個(gè)三極管。在我們板子上的LED小燈部分,就有這個(gè)三極管的應(yīng)用了,圖3-5的LED電路中的 Q16就是一個(gè)PNP型的三極管。
圖3-5 LED電路
3.3.1 三極管的初步認(rèn)識(shí)
三極管是一種很常用的控制和驅(qū)動(dòng)器件,常用的三極管根據(jù)材料分有硅管和鍺管兩種,原理相同,壓降略有不同,本課程用硅管的參數(shù)來進(jìn)行講課。三極管共有2種類型,分別是PNP型和NPN型,先來認(rèn)識(shí)一下。

圖3-6 三極管示意圖
三極管一共有3個(gè)極,從圖3-6來看,橫向左側(cè)的引腳叫做基極(base),中間有一個(gè)箭頭,一頭連接基極,另外一頭連接的是發(fā)射極e(emitter),那剩下的一個(gè)引腳就是集電極c(collector)。這塊是必須要記住的內(nèi)容,死記硬背即可,后邊慢慢用的多了,每次死記硬背一次,多次以后就會(huì)深入腦海了。
3.3.2 三極管的原理
三極管的應(yīng)用有截止、放大、飽和三種狀態(tài)。放大狀態(tài)主要是對(duì)模擬信號(hào)而言,而且用法的計(jì)算內(nèi)容比較復(fù)雜,暫時(shí)我們用不到。而我們數(shù)字電路主要使用三極管的開關(guān)特性,因此我們只用到了截止與飽和兩種狀態(tài),所以我們只講這兩種用法。三極管的類型和用法我給大家總結(jié)了一句口訣,大家要把這句口訣記牢了:箭頭朝內(nèi)PNP,導(dǎo)通電壓順箭頭過,電壓導(dǎo)通,電流控制。
下面我們一句一句來解析口訣。大家可以看圖3-6,三極管有2種類型,箭頭朝內(nèi)就是PNP,箭頭朝外自然就是NPN了,在實(shí)際應(yīng)用中,往往我們要根據(jù)實(shí)際電路需求來選擇到底用哪種類型,大家用幾次估計(jì)就會(huì)了,很簡(jiǎn)單。
三極管的用法特點(diǎn),關(guān)鍵點(diǎn)在于b極(基極)和e級(jí)(發(fā)射極)之間的電壓情況,對(duì)于PNP而言,e極電壓只要高于b級(jí)0.7V以上,這個(gè)三極管e級(jí)和c級(jí)之間就可以順利導(dǎo)通。也就是說,控制端在b和e之間,被控制端是e和c之間。同理,NPN型三極管的導(dǎo)通電壓是b極比e極高0.7V,總之是箭頭的始端比末端高0.7V就可以導(dǎo)通三極管的e極和c極。這就是關(guān)于“導(dǎo)通電壓順箭頭過,電壓控制”的解釋,我們來看圖3-7。
圖3-7 三極管的用法
我們以圖3-7為例介紹一下。三極管基極通過一個(gè)10K的電阻接到了單片機(jī)的一個(gè)IO口上,發(fā)射極直接接到5V的電源上,集電極接了一個(gè)LED小燈,并且串聯(lián)了一個(gè)1K的限流電阻最終接到了電源負(fù)極GND上。
如果LEDS6我們程序給一個(gè)高電平1,那么基極b和發(fā)射極e都是5V,也就是說e到b不會(huì)產(chǎn)生一個(gè)0.7V的壓降,這個(gè)時(shí)候,發(fā)射極和集電極也就不會(huì)導(dǎo)通,那么豎著看這個(gè)電路在三極管處是斷開的,所以沒有電流通過,LED2小燈也就不會(huì)亮。如果我們程序給LEDS6的位置一個(gè)低電平0,而e極是個(gè)5V,產(chǎn)生壓差就會(huì)導(dǎo)通,三極管e和b之間大概有0.7V的電壓,那還有(5-0.7)V的電壓會(huì)在電阻R47上。這個(gè)時(shí)候,e和c之間也會(huì)導(dǎo)通了,那么LED小燈本身有2V的壓降,三極管本身e和c之間大概有0.2V的壓降,我們忽略不計(jì)。那么在R41上就會(huì)有大概3V的壓降,可以計(jì)算出來,這條之路的電流大概是3mA,可以成功點(diǎn)亮LED。
最后一個(gè)概念,電流控制。前邊講過,三極管有截止,放大,飽和三個(gè)狀態(tài),截止就不用說了,只要e和b之間不導(dǎo)通即可。我們要讓這個(gè)三極管處于飽和狀態(tài),就是我們所謂的開關(guān)特性,必須要滿足一個(gè)條件。三極管都有一個(gè)放大倍數(shù)β,要想處于飽和狀態(tài),b極電流就必須大于e和c之間電流值除以β。這個(gè)β,對(duì)于常用的三極管大概可以認(rèn)為是100。那么上邊的R47的阻值我們必須要來計(jì)算一下了。
剛才我們算過了,e和c之間的電流是3mA,那么b極電流最小就是3mA除以100等于30uA,大概有4.3V電壓會(huì)在基極電阻上,那么基極電阻最大值就是4.3V/30uA = 143K。只要比這個(gè)值小就可以,當(dāng)然也不能太小,STC89C52RC的IO口輸入電流最大理論值是25mA,我推薦不要超過10mA。
3.3.3 三極管的應(yīng)用
三極管在我們數(shù)字電路里的開關(guān)特性,常用的一個(gè)是控制應(yīng)用,一個(gè)是驅(qū)動(dòng)應(yīng)用。所謂的控制就是如同我們圖3-7里邊介紹的,我們可以通過單片機(jī)控制三極管的基極來間接控制后邊的小燈的亮滅,用法大家基本熟悉了。還有一個(gè)控制就是進(jìn)行不同電壓之間的轉(zhuǎn)換控制,比如我們的單片機(jī)的IO口是5V系統(tǒng),如果直接接12V系統(tǒng)會(huì)燒壞單片機(jī),所以我們加一個(gè)三極管,三極管的工作電壓高于單片機(jī)的IO口電壓,用5V的IO口來控制12V的電路,如圖3-8所示。
圖3-8 三極管控制電路圖
圖3-8里所示,當(dāng)IO口輸出高電平5V時(shí),三極管導(dǎo)通,OUT輸出低電平0V,當(dāng)IO口輸出低電平時(shí),三極管截止,OUT則由于上拉電阻R2的作用而輸出12V的高電平,這樣就實(shí)現(xiàn)了低電壓控制高電壓的工作原理。
所謂的驅(qū)動(dòng),主要是指電流輸出能力。我們?cè)賮砜催@兩個(gè)圖之間的對(duì)比
圖3-9 LED小燈對(duì)比示意圖
圖3-9中上邊的LED燈,和我們第二課講過的LED燈是一樣的,當(dāng)IO口是高電平時(shí),小燈熄滅,當(dāng)IO口是低電平時(shí),小燈點(diǎn)亮。
下邊那個(gè)圖呢,按照這種推理,IO口是高電平的時(shí)候,應(yīng)該有電流流過并且點(diǎn)亮小燈,但是實(shí)際并非如此。
單片機(jī)主要是個(gè)控制器件,具備四兩撥千斤的特點(diǎn)。就如同杠桿必須有一個(gè)支點(diǎn)一樣,想要撐起整個(gè)地球必須有力量承受的支點(diǎn)。單片機(jī)的IO口可以輸出一個(gè)高電平,但是他的輸出電流很有限,普通IO口輸出高電平的時(shí)候,大概只有幾十到幾百uA的電流,達(dá)不到1mA,也就點(diǎn)不亮這個(gè)LED小燈或者亮度很低,這個(gè)時(shí)候如果我們想高電平點(diǎn)亮LED,用上三極管就可以這樣來處理,我們板上的這種型號(hào),可以通過500mA的電流,有的三極管通過的電流還更大一些,如圖3-10所示。
圖3-10 三極管驅(qū)動(dòng)LED小燈
圖3-10中,當(dāng)IO口是高電平,三極管導(dǎo)通,因?yàn)槿龢O管的電流放大作用,c極電流就可以達(dá)到mA以上了,就可以成功點(diǎn)亮LED小燈。
雖然我們用了IO口的低電平可以直接點(diǎn)亮LED,但是單片機(jī)的IO口作為低電平,輸入電流就可以很大嗎?這個(gè)我想大家都能猜出來,當(dāng)然不可以。單片機(jī)的IO口電流承受能力,不同型號(hào)不完全一樣,就STC89C52來說,官方手冊(cè)的81頁有對(duì)電氣特性的介紹,整個(gè)單片機(jī)的工作電流,不要超過50mA,單個(gè)IO口總電流不要超過6mA。即使一些增強(qiáng)型51的IO口承受電流大一點(diǎn),可以到25mA,但是還要受到總電流50mA的限制。那我們來看電路圖的8個(gè)LED小燈的這個(gè)部分電路,如圖3-11所示。

圖3-11 LED電路圖(一)
3-11圖示這里我們要學(xué)會(huì)看電路圖的一個(gè)知識(shí)點(diǎn),大家注意看,電路圖右側(cè)所有的LED下側(cè)的線最終都連到一根黑色的粗線上去了,大家注意,這個(gè)地方不是實(shí)際的完全連到一起,而是一種總線的畫法,畫了這種線以后,表示這是個(gè)總線結(jié)構(gòu),所有的名字一樣的是一一對(duì)應(yīng)的連接到一起,其他名字不一樣的,是不連到一起的。比如左側(cè)的DB0和右側(cè)的最左邊的LED2小燈下邊的DB0是連在一起的,而和DB1等其他線不是連在一起的。
那么我們把3-11電路圖里的我們現(xiàn)在需要講的這部分再摘出來看。
圖3-12 LED電路圖(二)
大家通過3-12的電路圖來計(jì)算一下,5V的電壓減去LED本身的壓降,減掉三極管e和c之間的壓降,限流電阻用的是330歐,那么每條支路的電流大概是8mA,那么8路LED如果全部同時(shí)點(diǎn)亮的話電流總和就是64mA。這樣如果直接接到單片機(jī)的IO口,那單片機(jī)肯定是承受受不住的,即使短時(shí)間可以承受,長(zhǎng)時(shí)間工作就會(huì)不穩(wěn)定,甚至導(dǎo)致單片機(jī)燒毀。
有的同學(xué)會(huì)提出來可以加大限流電阻的方式來降低這個(gè)電流。比如改到1K,那么電流不到3mA,8路總的電流就是20mA左右。首先,降低電流會(huì)導(dǎo)致LED小燈亮度變?nèi)酰舻牧炼瓤赡荜P(guān)系不大,因?yàn)槲覀兺瑯拥碾娐方恿藬?shù)碼管,后邊我們要講數(shù)碼管還要?jiǎng)討B(tài)顯示,如果數(shù)碼管亮度不夠的話,那視覺效果就會(huì)很差,所以降低電流的方法并不可取;其次,對(duì)于單片機(jī)來說,他主要是起到控制作用,電流輸入和輸出的能力相對(duì)較弱,P0的8個(gè)口總電流也有一定限制,所以如果接一兩個(gè)LED小燈觀察,可以勉強(qiáng)直接用單片機(jī)的IO口來接,但是接多個(gè)小燈,從實(shí)際工程的角度去考慮,就不推薦直接接IO口了。那么我們?nèi)绻脝纹瑱C(jī)控制多個(gè)LED小燈該怎么辦呢?
除了三極管之外,其實(shí)還有一些驅(qū)動(dòng)IC,這些驅(qū)動(dòng)IC可以作為單片機(jī)的緩沖器,僅僅是電流驅(qū)動(dòng)緩沖,不起到任何邏輯控制的效果,比如我們板子上用的74HC245D這個(gè)芯片,這個(gè)芯片在邏輯上起不到什么別的作用,就是當(dāng)做電流緩沖器的,我們通過查看其數(shù)據(jù)手冊(cè),74HC245穩(wěn)定工作在70mA電流是沒有問題的,比單片機(jī)的8個(gè)IO口大多了,所以我們可以把他接在小燈和IO口之間做緩沖,如圖3-13所示

圖3-13 74HC245功能圖
從圖3-13我們來分析,其中VCC和GND就不用多說了,細(xì)心的同學(xué)會(huì)發(fā)現(xiàn)這里有個(gè)0.1uF的去耦電容噢。
74HC245是個(gè)雙向緩沖器,1引腳DIR是方向引腳,當(dāng)這個(gè)引腳接高電平的時(shí)候,右側(cè)所有的B編號(hào)的電壓都等于左側(cè)A編號(hào)對(duì)應(yīng)的電壓。比如A0是高電平,那么B0就是高電平,A1是低電平,B1就是低電平等等。如果DIR引腳接低電平,得到的效果是左側(cè)A編號(hào)的電壓都會(huì)等于右側(cè)B編號(hào)對(duì)應(yīng)的電壓。因?yàn)槲覀冞@個(gè)地方控制端是左側(cè)接的是P0口,所以我們要求B等于A的狀態(tài),所以1腳我們直接接的高電平。圖3-13中還有一排電阻R10到R17是上拉電阻,這個(gè)電阻的用法我們在后邊介紹。
還有最后一個(gè)使能引腳19腳OE,這個(gè)引腳上邊有一橫,表明是低電平有效,當(dāng)接了低電平后,74HC245就會(huì)按照剛才上邊說的起到雙向緩沖器的作用,如果OE接了高電平,那么無論DIR怎么接,A和B的引腳是沒有關(guān)系的,也就是74HC245功能不能實(shí)現(xiàn)出來。
從我們的電路圖3-14可以看出來,我們的P0口和74HC245的A端是直接接起來的。這個(gè)地方,有個(gè)別同學(xué)有一個(gè)疑問,就是我們明明在電源VCC那地方加了一個(gè)三極管驅(qū)動(dòng)了,為何還要再加245驅(qū)動(dòng)芯片呢。這里大家要理解一個(gè)道理,電路上從正極經(jīng)過器件到地,首先必須有電流才能正常工作,電路中任何一個(gè)位置斷開,都不會(huì)有電流,器件也就不會(huì)參與工作了。其次,和水流一個(gè)道理,從電源正極到負(fù)極的電流水管的粗細(xì)都要滿足要求,任何一個(gè)位置的管子過細(xì),都會(huì)出現(xiàn)瓶頸效應(yīng),電流在整個(gè)通路中細(xì)管處會(huì)受到限制而降低,所以在電路通路的每個(gè)位置上,都要保證足夠通道足夠暢通,這個(gè)245的作用就是消除單片機(jī)IO這一環(huán)節(jié)的瓶頸。

圖3-14 單片機(jī)和74HC245接口
3.3.4 74HC138三八譯碼器的應(yīng)用
在我們?cè)O(shè)計(jì)單片機(jī)電路的時(shí)候,單片機(jī)的IO口數(shù)量是有限的,有時(shí)并滿足不了我們的設(shè)計(jì)需求,比如我們的STC89C52RC一共是32個(gè)IO口,但是我們?yōu)榱丝刂聘嗟钠骷鸵褂靡恍┩鈬臄?shù)字芯片,這種數(shù)字芯片由簡(jiǎn)單的輸入邏輯來控制輸出邏輯,比如74HC138這個(gè)三八譯碼器,圖3-15是74HC138在我們?cè)韴D上的一個(gè)應(yīng)用。

圖3-15 74HC138應(yīng)用原理圖
從這個(gè)名字來分析,三八譯碼器,就是把3種輸入狀態(tài)翻譯成8種輸出狀態(tài)。從圖3-15所看出來的,74HC138一共有1~6一共是6個(gè)輸入引腳,但是其中4、5、6這三個(gè)引腳是使能引腳。使能引腳和我們前邊講74HC245的OE引腳是一樣的,這三個(gè)引腳如果不符合規(guī)定的輸入要求,Y0到Y7不管你輸入的1、2、3引腳是什么電平狀態(tài),總是高電平。所以我們要想這個(gè)74HC138正常工作,ENLED那個(gè)輸入位置必須輸入低電平,ADDR3位置必須輸入高電平,這兩個(gè)位置都是使能控制端口。不知道大家是否記得我們第二課的程序有這么兩句ENLED = 0;ADDR3 = 1;就是控制使這個(gè)74HC138使能的。
這類邏輯芯片,大多都是有使能引腳的,使能符合要求了,那下面就要研究邏輯控制了。對(duì)于數(shù)字器件的引腳,如果一個(gè)引腳輸入的時(shí)候,有0和1兩種狀態(tài);對(duì)于兩個(gè)引腳輸入的時(shí)候,就會(huì)有00,01,10,11這四種狀態(tài)了,那么對(duì)于3個(gè)輸入的時(shí)候,就會(huì)出現(xiàn)8種狀態(tài)了,大家可以看下邊的這個(gè)真值表——圖3-16,其中輸入是A2,A1,A0的順序,輸出是從Y0,Y1....Y7的順序。
圖3-16 74HC148真值表
從圖3-16可以看出,任一輸入狀態(tài)下,只有一個(gè)輸出引腳是低電平,其他的引腳都是高電平。我們清楚的知道,8個(gè)LED小燈的總開關(guān)三極管Q16基極的控制端是LEDS6,也就是Y6輸出一個(gè)低電平的時(shí)候,可以開通三極管Q16,從右側(cè)的希望輸出的結(jié)果,我們可以推導(dǎo)出我們的A2,A1,A0的輸入狀態(tài)應(yīng)該是110,那我們?cè)賮砜聪略韴D3-17。

圖3-17 點(diǎn)亮LED小燈整體示意圖
那么我們?cè)谡w捋一遍點(diǎn)亮LED小燈的過程,首先看74HC138,我們要讓LEDS6為低電平才能導(dǎo)通三極管Q16,所以ENLED = 0;ADDR3 = 1;保證74HC138使能。然后ADDR2 = 1; ADDR1 = 1; ADDR0 = 0;這樣保證了三極管Q16這個(gè)開關(guān)開通,5V電源加到LED上。
而74HC245左側(cè)是通過P0口控制,我們讓P0.0引腳等于0,就是DB_0等于0,而右側(cè)DB0等于DB_0的狀態(tài),也是0,那么這樣在這一排共8個(gè)LED小燈當(dāng)中,只有最右側(cè)的小燈和5V之間有壓差,有壓差就會(huì)有電流通過,有電流通過我們的LED2就會(huì)發(fā)光。
74HC245左側(cè)我們可以看出來,是直接接到P0口上的,而74HC138的ADDR0 ~ ADDR3接在何處呢?

圖3-18 跳線帽接口部分
跳線帽是大家以后要常用的一個(gè)器件,他的作用就是起到導(dǎo)線的作用,我們可以通過跳線帽來實(shí)現(xiàn)連接線的切換。
圖3-19 跳線實(shí)物圖
大家看,跳線帽本身可以占2個(gè)針的位置,現(xiàn)在是把右側(cè)和中間的針插到了一起,這樣實(shí)現(xiàn)的就是圖3-18中的P1.0和ADDR0連接到一起,P1.1和ADDR1接一起,P1.2和ADDR2接一起,P1.3和ADDR3接一起。這樣就可以透徹理解我們第二課的程序了。
好了,大家認(rèn)真再回顧一下我們第二課的那個(gè)程序,再領(lǐng)悟一下這幾個(gè)數(shù)字器件的用法。
3.4 LED閃爍程序
點(diǎn)亮LED小燈的程序我們第二課完成了,就是讓LED = 0;熄滅小燈的程序也很簡(jiǎn)單,就是LED = 1;亮和滅中間加個(gè)時(shí)間延時(shí),點(diǎn)亮和熄滅就都學(xué)會(huì)了,那么我們中間加個(gè)延時(shí)程序,反復(fù)不停的點(diǎn)亮和熄滅小燈,就成了閃爍了。
我們首先復(fù)習(xí)一下Keil寫程序的過程,建立工程--保存工程--建立文件--添加文件到工程--編寫程序--編譯--下載程序。
LED閃爍程序?qū)τ谟?/font>C基礎(chǔ)的同學(xué)來說很簡(jiǎn)單,那我先寫出來,大家可以先看下。沒有C語言基礎(chǔ)的同學(xué)也可以跟著抄一遍,下節(jié)課我會(huì)補(bǔ)充部分C語言基礎(chǔ)知識(shí),這樣你先抄一遍后,再跟著看C語言基礎(chǔ)知識(shí)的時(shí)候也比較容易理解透徹。
#include<reg52.h> //包含寄存器的庫文件
sbit LED = P0^0; //位地址聲明,注意:sbit必須小寫!
sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;
void main()
{
unsigned int i = 0;
ENLED = 0;
ADDR0 = 0;
ADDR1 = 1;
ADDR2 = 1;
ADDR3 = 1; //74HC138開啟三極管
while(1) //程序死循環(huán)
{
LED = 0; //點(diǎn)亮小燈
for(i=0;i<30000;i++); //延時(shí)一段時(shí)間
LED = 1; //熄滅小燈
for(i=0;i<30000;i++); //延時(shí)一段時(shí)間
}
}
大家把這個(gè)程序編譯一下,下載到單片機(jī)里,會(huì)發(fā)現(xiàn)LED2這個(gè)小燈會(huì)閃爍了。關(guān)于閃爍燈程序的詳解請(qǐng)看:http://www.zg4o1577.cn/mcuteach/248.html 里面有c語言和匯編2個(gè)版本的.
3.5 作業(yè)
1、深刻理解電容的意義,并且在今后的學(xué)習(xí)電路過程中要多多注意并且參考別人電路中所用到的去耦電路,積累經(jīng)驗(yàn)。
2、完全背過三極管的導(dǎo)通原理,并且可以熟練應(yīng)用NPN和PNP這兩種三極管在開關(guān)特性下的應(yīng)用方法。
3、學(xué)習(xí)并且掌握74HC245和74HC138的應(yīng)用原理,能夠在設(shè)計(jì)電路中正確應(yīng)用。
4、能夠獨(dú)立實(shí)現(xiàn)點(diǎn)亮開發(fā)板上的每一個(gè)小燈,并且可以實(shí)現(xiàn)小燈點(diǎn)亮和關(guān)閉以及閃爍功能。
上一課:第二章 點(diǎn)亮你的LED
下一課:第四章 C語言基礎(chǔ)以及流水燈的實(shí)現(xiàn)
|