任務2.38位流水燈_第1頁
任務2.38位流水燈_第2頁
任務2.38位流水燈_第3頁
任務2.38位流水燈_第4頁
任務2.38位流水燈_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、2.3 8位流水燈任務三 8位流水燈2.3.1 任務內容 流水燈在我們的日照生活中有著非常多的應用,如廣告牌的設計和節(jié)日彩燈的設計都用到它的原理。本節(jié)的任務是把開發(fā)板上的8個發(fā)光二極管依次點亮。另外一IO口接外部電平,高電平時流水燈從左向右依次點亮,低電平時流水燈從右向左依次點亮。2.3.2 知識準備1、單片機IO的構造在上一單元中發(fā)光二極管閃爍的實例中,I/O控制小燈閃爍,只需在Keil中對I/O寫0、和寫1就可以了,使用起來非常簡單。但是在實際應用中如果不了解I/O的特點,設計的電路存在缺陷,I/O應用起來未必會得心應手。初學者不必深究I/O控制原理,但至少得弄明白幾個基本的概念,這對后期

2、學習高檔單片機也很有幫助。在I/O構造電路中,有三極管(實際上是MOS管)、鎖存器等,我們先來學習一下這兩個基本器件的特點。(1) 三極管在I/O構造電路中,有一個器件是MOS管,I/O能對外輸出高低電平全依賴MOS管的導通與否。MOS管和三極管在外特性很相像,由于我們更熟悉三極管,所以這里講解三極管。三極管是模擬電路和數字電路的基石。在模擬電路中,三極管主要用于放大弱信號。在數字電路中,三極管更多作為開關管來使用。三極管的基本結構是兩個反向聯(lián)結的的PN接面,如圖所示,有NPN和PNP兩種組合。三個接出來的端點依次被稱為發(fā)射極(E)、基極(B)和集電極(C)。圖中也顯示了NPN和PNP三極管的

3、電路符號,射極被特別標出,箭頭由外指向內的是NPN,由內指向外的是PNP。 PNP三極管 NPN三極管圖2.3.1 PNP三極管和NPN三極管NPN三極管電流由基極和集電極流入,發(fā)射極流出;而PNP三極管則相反,從發(fā)射極流進,從基極和集電極流出。不管是NPN三極管還是PNP三極管,都滿足這樣幾個特性:三個極之間的電流的關系為:流進的=流出的,即IB+IC=IE。:Ic大小跟Ib有關:Ib為0,則Ic也為0;Ib從0開始增大,Ic也跟著增大,而且在這一過程中,Ic=Ib,其中 為放大倍數,不同三極管 不一樣,從幾十到幾百倍;當Ic的值到了極限時,Ib再增大,Ic也不再跟著增大了。:基極和發(fā)射極之

4、間可以等效成一個二極管,要獲得基極電流,基極電壓要高于發(fā)射極電壓0.60.7V,而且一旦導通之后,這個電壓基本保持不變。三極管本質上是一個以弱控強的器件,大家可以想象一下用一個閥門控制大壩匝門的情形。當閥門關閉時,大壩匝門也關閉,水流就不能從上游流到下游去,對應三極管,即沒有IB,則也沒有IC,這一區(qū)域稱為“截止區(qū)”;轉動閥門,大壩的匝門也跟著開啟,閥門擰的圈數越多,匝門的開合度也越大,從上游到下游的水流也越大,對應三極管,則為Ic= Ib,這一狀態(tài)稱為“放大區(qū)”;當大壩匝門完全開啟,再擰閥門,匝門的開合度已經到了最大值,水流不能再增大了,對應三極管,即當Ic的值到了極限時,Ib再增大,Ic也

5、不再跟著增大了,這一區(qū)域稱之為“飽和區(qū)”。下面結合圖2.3.2的電路通過實驗對三極管的三個區(qū)做一下測試。 (a)實驗原理圖 (b)在面包板上實驗測數據 圖2.3.2 三極管特性實現(xiàn)電路講究理論與實踐的統(tǒng)一,說白了就是在學完理論后,只要有條件,一定要動手做實驗,來驗證理論的正確性,這樣才會真正理解電路的特性。對于一些簡單的實驗,推薦使用如圖2.3.2所示的面包板板來驗證。圖中三極管型號為較為常用的直插中小功率NPN三極管8050,VCC=5V?;鶚O限流電阻Rb,阻值10K,集電極電阻RC阻值510。三極管的基極電壓由3296電位器提供,通過旋轉電位器,不斷調整A點電位,讓A點電位以0.2V的步進

6、升高,從0V到5V,然后用萬用表測試A點、B點和C點電壓,Ib=(Ua-Ub)/Rb,Ic=(VCC-Uc)/Rc,=Ic/Ib。 表2.3.1 三極管實現(xiàn)數據表Ua(V)Ub(V)URb(V)Ib(uA)Uc(V)URc(V)Ic(uA)0.2030.2030050000.4010.4010050000.5980.5560.0420.5674.9840.01631.37255.30.8120.620.1922.5944.7220.2785452101.0030.6380.3654.9324.4060.59411652361.2010.6480.5537.4734.0910.909178223

7、81.3990.6550.74410.0543.7851.21523822391.6020.6620.9412.7023.4551.54530292382.0010.6711.3312.7922.8022.19843092392.4030.6781.72523.3112.1712.82955472362.7990.6862.11328.5541.5663.43467332363.2060.6922.51433.9720.9614.03980782383.6020.6982.90439.2430.4124.58889962294.0030.7023.30144.6080.1714.8299468

8、2124.2010.7023.49947.2830.1434.85795232014.3920.7033.68949.8510.1354.86595391914.5970.7033.89452.6210.1324.86895451814.7970.7034.09455.3240.1294.87195501734.9850.7034.28257.8640.1244.8769560165當A點電壓<0.598V時(A點電壓為0.203V和0.401V),B點電壓和A點電壓相同,C點電壓與電源VCC相同,這說明在這段區(qū)間內,基極電流為0(電阻Rb上沒有壓降),集電極電流也為0(電阻Rc上沒有壓

9、降)。這段區(qū)域我們稱之為截止區(qū)。當A點電位超過0.6V后,基極和集電極都有電流,而且在一段區(qū)間內,隨著輸入電壓的提高,集電極電流和基極電流都跟著升高,但其比值是不變的(=238)。三極管的輸出端滿足VCC=Ic*Rc+UCE,URc升高,UCE下降,這段區(qū)域我們稱之為放大區(qū),Ic=Ib。由關系式VCC=Ic*Rc+UCE可以看出,隨著Ic的增大,UCE減低,當UCE接近0V時,Ic到達最高值,再往后,集電極電流不再跟隨基極電流變化。從實驗數據可以看出,A點電壓超過4V后,C點電位下降至0.1V后,集電極電流和基極電流不再成比例關系。這段區(qū)域我們稱之為飽和區(qū)。基極電流再升高,UCE間始終存在0.

10、1V左右的電壓,我們稱之為飽和壓降。 在單片機應用電路中,三極管作為開關管來使用,三極管工作于截止區(qū)和飽和區(qū)。在截止區(qū)時,三極管的CE之間如同一個開關斷開時,CE之間沒有電流通過;而在飽和區(qū)時,三極管的CE之間如果一個開關導通一樣,CE之間以最大電流通過,所以我們把三極管工作于這兩個區(qū)的狀態(tài)稱之為開關。(2)D觸發(fā)器在實際的數字系統(tǒng)中往往包含大量的存儲單元,而且經常要求他們在同一時刻同步動作,為達到這個目的,在每個存儲單元電路上引入一個時鐘脈沖(CLK)作為控制信號,只有當CLK到來時電路才被“觸發(fā)”而動作,并根據輸入信號改變輸出狀態(tài)。把這種在時鐘信號觸發(fā)時才能動作的存儲單元電路稱為觸發(fā)器。D

11、觸發(fā)器是觸發(fā)器的一種。圖2.3.2是D觸發(fā)器的內部構造圖。 圖2.3.2 D觸發(fā)器內部構造D觸發(fā)器的方程為Q=D,即輸出Q的值等于輸入D的值,但這種情況只發(fā)生在時鐘的上升沿。在時鐘上升沿到來之前,即使輸入發(fā)生改變,輸出也不會立即改變。(3)P1口、P2口和P3口的內部構造51單片機的P1口、P2口和P3口的構造大同小異,在這里暫且把他們當成是同一類型。圖2.3.3中是這些I/O口的內部構造圖。在圖2.3.3中,P1、P2、P3口輸出端是一個接上拉電阻的MOS管,漏極輸出,考慮到初學者對MOS管不太熟悉,而MOS管和三極管的外特性相似,我們暫且把MOS管當成是NPN型的三極管來講解,即圖中三極管

12、發(fā)射極接地,集電極輸出電平。我們要把I/O口置成高電平,需要在程序中對I/O口寫“1”,D鎖存器的輸入端為高電平“1”,則D觸發(fā)器的反相輸出端輸出低電平,則NPN三極管截止,輸出端對外呈現(xiàn)高電平;反之,當我們在程序中寫“0”,D觸發(fā)器的反相端輸出高電平,三極管飽和導通,輸出低電平。因內部上拉電阻R的阻值較大,所以稱之為弱上拉輸出。圖2.3.3 P1、P2和P3口的內部構造(4)P0內部構造圖2.3.4是P0口的內部構造圖。與P1、P2和P3口相比,P0口構造比較特殊。P0口既可以作為普通I/O口使用,也可以作為擴展存儲器的地址/數據線使用。P0口怎樣作為地址/數據總線來使用,我們暫且不要理會,

13、但地址/數據總線的輸出形式值得一提,從圖上可以看出,MUX開關打向上邊,IO作為地址/數據用,MOS管T1和T2輪流導通,這種形式成為推挽輸出。這種雙管輪流導通的方式是AVR/PIC等單片機I/O口輸出的主要形式,輸出和輸入都具有大電流。P0口用作普通I/O時,MUX開關打向D鎖存器的輸出端,D鎖存器只能控制MOS管T2,對MOS管T1不起作用,MOS管T1截止。P0口用作普通I/O時,和P1、P2和P3口類似,不同之處在于,由于MOS管T1截止,MOS管T2沒有電源和上拉電阻,即T2漏極開路,。所以P0口作為普通IO使用,還需在P0口的外部接上拉電阻。我們的開發(fā)板上外接了5.1K的排阻。 圖

14、2.3.4 P0口內部構造 圖2.3.4 P0口內部構造 2、拉電流與灌電流 拉電流和灌電流是衡量數字電路輸出驅動能力的參數。數字電路的輸出只有高、低(即“0”和“1”)兩種電平值,高電平輸出時,一般是輸出端對負載提供電流,其提供電流的叫“拉電流”;低電平輸出時,一般是輸出端要吸收負載的電流,其吸收電流的叫“灌電流”。如圖2.3.5所示。P2.1置“0”,低電平,電流從電源VCC經負載流入P2.1,稱之為“灌電流”。P2.0置“1”,高電平,電流從芯片引腳P2.0流出,稱之為“拉電流”。 圖2.3.5 拉電流和灌電流灌電流越大,輸出端MOS管的飽和壓降就會越大,則輸出低電平則會變高,數字電路的

15、低電平是有一定限制的,它有一個最大值UOLMAX。電路工作時,不允許超過這個數值,TTL邏輯門的規(guī)范規(guī)定UOLMAX 0.40.5V。所以,灌電流有一個上限,灌電流太大,不僅會使I/O輸出端電壓升高,而且還可能使I/O燒壞。拉電流越大,輸出端的高電平就越低。這是因為MOS管的輸出端有上拉電阻的原因,輸出電流越大,上拉電阻上的壓降也會越大,則對外輸出的電壓越低。數字電路的高電平有一個最小值UOHMIN。工作時,不允許超過這個數值,TTL邏輯門的規(guī)范規(guī)定UOHMIN 2.4V。所以,拉電流也有一個上限。3、STC89C52的拉電流和灌電流大小STC89C52的官方手冊并沒有給出I/O的拉電流和灌電

16、流的大小,只是說和傳統(tǒng)8051單片機一樣,是弱上拉。表2.3.2是拉電流的測試數據,測試方法是在P20引腳外接一個電阻,電阻另外一端接地,用萬用表測試一下P20引腳的電壓,然后換其它阻值的電阻測試。表2.3.3是灌電流的測試數據,測試方法是類似拉電流的測試,不同之處在于電阻的另外一端接電源VCC。 表2.3.2 拉電流測試數據 表2.3.3 灌電流測試數據電阻()I/O電壓(mV)輸入電流(mA)5K750.9851K3474.6535007228.556電阻()I/O電壓(V)輸出電流(uA)95K4.5944832K412521K3.5166 從表2.3.2和表2.3.3中可以看出STC8

17、9C52的灌電流和拉電流能力都比較弱,但相比較而言,灌電流要遠遠大于拉電流,拉電流是uA級別的,而灌電流是mA級別。另外根據表2.3.2中的數據計算,STC89C52單片機I/O中內置上拉電阻的阻值在7-10K左右。通過實驗分析,就不難解釋為什么我們在驅動發(fā)光二極管時,采用低電平驅動而不是高電平驅動了。由于STC89C52的上拉電阻在10K級別,就算不接限流電阻,發(fā)光二極管也不會被點亮。 4、C語言中的位運算流水燈的程序實現(xiàn)有兩種方法,其中之一是采用移位的方法。C語言中的位運算在單片機程序中格外重要,程序中到處可見位運算,我們先了解一下C51的位運算種類和特點。C51提供了幾種位操作符,如下表

18、所示:表2.3.2 C語言中的位運算符號運算符含義運算符含義&按位與取反|按位或<< 左移按位異或>> 右移(1)“按位與”運算符(&)參與與操作的兩個位,原則是全1為1,有0才為0,即:0&0=0;0&1=0;1&0=0;1&1=1。如下例:a=0x05&0x03,即a=(0b 0101) & (0b 0011) =0b 0001。(2)“按位或”運算符(|) 參與或操作的兩個位,原則是有一個為1,則結果為1,全0為0。即:0|0=0;0|1=1;1|0=1;1|1=1。例如:a=0x30|0x0f;即a

19、= (0b00110000)|(0b00001111) = (0b00111111)=0x3f。(3)“異或”運算符()異或運算符又被稱為XOR運算符。當參與運算的兩個位相同(1與1或0與0)時結果為0。不同時為1。即相同為0,不同為1。 00=0;01=1;10=1;11=0。例如:a=0x550x3f; 即a=(0b01010101)(0b00111111)=(0b01101010)=0x6a。(4)“取反”運算符()與其它運算符不同,“取反”運算符為單目運算符,即它的操作數只有一個。它的功能就是對操作數按位取反。也就是是1得0,是0得1。如下例:a=0xaa; a=0b10101010,

20、b=a,則b=0b01010101。(5)左移運算符(<<)左移運算符用來將一個數的各位全部向左移若干位。如:a=a<<2,表示將a的各位向左移2位,右邊補0。如a=34(0b00100010),左移2位得0b10001000。(6)右移運算符(>>)右移與左移相類似,只是位移的方向不同。如:a=a>>2,表示將a的各位向右移動2位,左邊補0。如a=34(0b00100010),左移2位。得0b10001000。5、C運算符位運算屬于C眾多運算符中的一種,除了位運算,還有算術運算符、關系運算符、邏輯運算符等。(1)算術運算符算術運算符用于各類數值

21、運算,包括加(+)、減(-)、乘(*)、除(/)、求余(%)、自增(+)、自減()。在C語言中,乘法運算符為“*”,不能寫成數學中的“×”,除法運算符為“/”, 不能寫成“÷”。對于“/”運算符,C語言規(guī)定,當它的兩個運算分量都為整數時,其結果為整數,如果兩個運算分量其中一個為浮點數時,則結果為浮點數。“%”運算符,是用來求兩個數相除后的余數,相處的兩個數必須為整形數據。“+”和“”是C語言中的自增運算符,如a+,+a。其中a+是表示先使用a的值,再加1,+a表示先加1,再使用a的值。“”的用法和“+”類似,是自減1。下面是算術運算符的舉例。5+3:結果為5;5-3:結果為

22、2;5*3:結果為15;5/3: 結果為1;5+:結果為6。 (2)關系運算符C語言提供6種關系運算符,分別是大于(>)、大于等于(>=)、小于(<)、小于等于(<=)、等于(=)、不等于(!=)。需要注意的等于運算符,是雙等于號,不是單個等號,單個等號是賦值。關系運算符的結果只有兩種,0(假)和1(真)。關系成立為1,不成立則為0。如100>=20,結果1;7=3,結果為0;a<A,結構為0。(3)邏輯運算符邏輯運算符有三種,分別是邏輯與(&&)、邏輯或(|)和邏輯非(?。?,注意和位運算的區(qū)別。邏輯運算的結果只有兩種:0(假)和1(真)。具

23、體功能如表2.3.4所示:表2.3.4 邏輯運算符aba&&ba|b!a真真真真假真假假真假假真假真真假假假假真6、數組流水燈實現(xiàn)的第二種方法是采用取表的方式。我們這里所謂的“取表”實際上就是C語言中的數組。在程序設計中,為了處理方便,把具有相同類型的若干變量按有序的形式組織起來,這些按序排列的同類數據元素的集合稱為數組。C語言支持一維數組和多維數組。我們這里先來學習簡單的一維數組。(1)一維數組的定義方式在C語言中使用數組必須先進行定義,才能使用。一維數組的定義方式為:類型說明符 數組名 常量表達式;其中,類型說明符是任一種基本數據類型或構造數據類型。數組名是用戶定義的數組標

24、識符。方括號中的常量表達式表示數據元素的個數,也稱為數組的長度。例如:int a10; /* 整型數組a,有10個元素 */char ch20; /* 字符數組ch,有20個元素 */需要說明幾點,類型說明符實際是數組元素的取值類型,數組名的書寫規(guī)則遵循標示符的規(guī)定,方括號中的常量表達式用來表示數組中元素的個數,如a5表示數組中有5個元素,但是其下標從0開始計算,因此5個元素分別是a0、a1、a2、a3、a4。(2)一位數組的初始化數組賦值既可以在定義的時候給數組元素賦初值,也可以在定義后用賦值語句逐個賦值。初始化賦值的一般形式為:類型說明符 數組名常量表達式 = 值, 值值 ; 其中在 中的

25、各數據值即為各元素的初值,各值之間用逗號間隔。例如:int a10= 0,1,2,3,4,5,6,7,8,9 ;相當于a0=0; a1=1 . a9=9;另外數組在初始化的時候,內數組元素的個數可以不寫,編譯系統(tǒng)會根據內數據的個數計算數組元素的個數。(3)一位數組的引用數組元素引用的一般形式為:數組名下標。其中下標只能為整型常量或者整型表達式,不能為變量。7、選擇語句C語言的選擇語句中包括if語句和switch語句。我們先來看一學習一下if語句。if構成的選擇語句有3種類型。(1)第一種類型是判斷是否滿足某個條件,滿足則執(zhí)行相應的動作。其功能模型如下:if(條件) 執(zhí)行動作 (2)if語句的第

26、二種類型是在第一種類型的基礎之上,又加入了一個條件。判斷是否滿足某個條件,滿足則執(zhí)行動作1,不滿足,則執(zhí)行動作2。其功能模型如下:if(條件) 執(zhí)行動作A else 執(zhí)行動作B if(條件A) 執(zhí)行動作A;else if (條件B) 執(zhí)行動作B;else if (條件C) 執(zhí)行動作C; else 執(zhí)行動作D;(3)if語句的第三種類型是有多種條件可供選擇,執(zhí)行某個條件下的相應指令,如果條件A滿足,則執(zhí)行動作A,然后退出,不滿足則判斷條件B是否滿足,依次進行下去。其功能模型如下:另外執(zhí)行動作語句只有一個,則可以省略。三、任務實施1、移位方式實現(xiàn)流水燈程序#include<reg52.h&g

27、t;#define uchar unsigned char#define uint unsigned intsbit Input=P10; /外接電平輸入端 void delay_ms(uint xms) /ms級延時函數 uint i,j;for(i=0;i<xms;i+)for(j=0;j<122;j+);void main() uchar i=0;uchar temp;while(1)if(keyy=1) /流水燈從右向左移動temp=0x01; /temp初值for(i=0;i<8;i+) P2=temp; /temp取反后,賦值給P2口 delay_ms(1000)

28、; /延時1000mstemp=temp<<1; /temp左移一位 else /流水燈從左向右移動temp=0x80;for(i=0;i<8;i+) P2=temp;delay_ms(1000);temp=temp>>1;程序解釋:例程中,根據輸入IO的電平(P10引腳外接電平),分為流水燈向左移和向右移,外接高電平時,向左移,外接低電平時,向右移。表2.3.5是向左移中temp變量和P2賦值的狀態(tài),表2.3.6是向右移中temp變量和P2賦值的狀態(tài)。 表2.3.5 流水燈左移 表2.3.6 流水燈右移 iTemp(左移)P2=temp00000,00011111,111010000,00101111,110120000,01001111,101130000,10001111,011140001,00001110,111150010,00001101,111160100,00001011,111171000,00000111,1111iTemp(右移)P2=temp01000,00000111,111110100,00001011,111120010,00001101,111130001,00001110,111140000,10001111,011150000,01001111,10116

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論