微處理器C51-5輸出輸入端口_第1頁
微處理器C51-5輸出輸入端口_第2頁
微處理器C51-5輸出輸入端口_第3頁
微處理器C51-5輸出輸入端口_第4頁
微處理器C51-5輸出輸入端口_第5頁
已閱讀5頁,還剩65頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、輸出輸出/輸入端口的應(yīng)用輸入端口的應(yīng)用l 如何申請免費(fèi)樣片如何申請免費(fèi)樣片l 輸出端口的應(yīng)用輸出端口的應(yīng)用l 輸入口的應(yīng)用輸入口的應(yīng)用l 輸入輸出端口的高級應(yīng)用輸入輸出端口的高級應(yīng)用輸出端口的應(yīng)用輸出端口的應(yīng)用輸出電路的設(shè)計(jì)輸出電路的設(shè)計(jì) 89S51的輸出端口可直接連接數(shù)字電路,也可驅(qū)動(dòng)的輸出端口可直接連接數(shù)字電路,也可驅(qū)動(dòng)LED、蜂鳴器、繼、蜂鳴器、繼電器或固態(tài)繼電器等負(fù)載。電器或固態(tài)繼電器等負(fù)載。1、驅(qū)動(dòng)、驅(qū)動(dòng)LED LED具有二極管的特點(diǎn),其特性曲線如圖,通過增加具有二極管的特點(diǎn),其特性曲線如圖,通過增加LED正向電流可以正向電流可以使其更亮,但會縮短其壽命或燒斷,以使其更亮,但會縮短其

2、壽命或燒斷,以10-20mA為宜。為宜。 89S51的的I/O端口都有類似漏極開路的輸出,其中端口都有類似漏極開路的輸出,其中P1、P2與與P3內(nèi)部具有內(nèi)部具有30K上拉電阻,它們不能輸出上拉電阻,它們不能輸出10-20mA電流,其電路如圖。電流,其電路如圖。 此電路中,當(dāng)輸出低電平時(shí),輸出端此電路中,當(dāng)輸出低電平時(shí),輸出端FET導(dǎo)通,輸出電壓接近導(dǎo)通,輸出電壓接近0V;而;而LED正向?qū)妷簽榧s正向?qū)妷簽榧s1.7V,限流電阻,限流電阻R兩端約兩端約3.3V(VCC=5.0V),此時(shí)限流電),此時(shí)限流電阻值為:阻值為: R=(5-1.7)/0.01=330 對于對于TTL電平的數(shù)字電流,

3、電平的數(shù)字電流,LED所串接的限流電阻大多為所串接的限流電阻大多為470。2、驅(qū)動(dòng)蜂鳴器、驅(qū)動(dòng)蜂鳴器 蜂鳴器(蜂鳴器(buzzer)類似小型)類似小型喇叭,一般用作電路板上的發(fā)喇叭,一般用作電路板上的發(fā)聲裝置。它分為電壓型與脈沖聲裝置。它分為電壓型與脈沖型兩類,電壓型送電即響,其型兩類,電壓型送電即響,其頻率固定;脈沖型必須加入脈頻率固定;脈沖型必須加入脈沖信號,聲音頻率就是加入脈沖信號,聲音頻率就是加入脈沖的頻率。沖的頻率。 在此使用脈沖型蜂鳴器。在此使用脈沖型蜂鳴器。 89S51驅(qū)動(dòng)蜂鳴器的信號為驅(qū)動(dòng)蜂鳴器的信號為各種頻率的脈沖,其驅(qū)動(dòng)方各種頻率的脈沖,其驅(qū)動(dòng)方式采用達(dá)林頓管,或以兩個(gè)式采

4、用達(dá)林頓管,或以兩個(gè)常用的小三極管(常用的小三極管(cs9013)連接成達(dá)林頓結(jié)構(gòu)。如圖,連接成達(dá)林頓結(jié)構(gòu)。如圖,這兩個(gè)驅(qū)動(dòng)電路屬高電平動(dòng)這兩個(gè)驅(qū)動(dòng)電路屬高電平動(dòng)作,即輸出作,即輸出“1”蜂鳴器吸住。蜂鳴器吸住。 也可采用低電平動(dòng)作,如圖輸出也可采用低電平動(dòng)作,如圖輸出0時(shí),蜂鳴器吸?。惠敵鰰r(shí),蜂鳴器吸??;輸出1時(shí),蜂鳴器釋放。時(shí),蜂鳴器釋放。在晶體管在晶體管BE之間連接一個(gè)泄放電阻(之間連接一個(gè)泄放電阻(3.3K),其目的是讓晶體管從飽和到),其目的是讓晶體管從飽和到截止時(shí)提供一個(gè)泄放截止時(shí)提供一個(gè)泄放BE間少數(shù)載流子的路徑,以加快切換,放止拖音。間少數(shù)載流子的路徑,以加快切換,放止拖音。3

5、、驅(qū)動(dòng)繼電器、驅(qū)動(dòng)繼電器 若要若要89S51控制不同電壓或較大電流的負(fù)載時(shí),則可以通過繼電器控制不同電壓或較大電流的負(fù)載時(shí),則可以通過繼電器(RELAY)來實(shí)現(xiàn)。)來實(shí)現(xiàn)。 電路板上使用的繼電器體積小,使用電壓有電路板上使用的繼電器體積小,使用電壓有DC12V、DC9V、DC6V和和DC5V等,圖中,等,圖中,c-b之間為常閉(之間為常閉(NC)觸點(diǎn),)觸點(diǎn),c-a之間為常開(之間為常開(NO)觸點(diǎn),)觸點(diǎn),只有一組觸點(diǎn),稱為只有一組觸點(diǎn),稱為1P。 89S51驅(qū)動(dòng)的繼電器大多為驅(qū)動(dòng)的繼電器大多為DC6V或或DC5V,盡管如此,盡管如此,89S51輸出口的驅(qū)輸出口的驅(qū)動(dòng)能力還是不夠的,而且,繼

6、電器線圈感性負(fù)載還需要保護(hù)。動(dòng)能力還是不夠的,而且,繼電器線圈感性負(fù)載還需要保護(hù)。 如圖如圖a為高電平驅(qū)動(dòng)的繼電器為高電平驅(qū)動(dòng)的繼電器驅(qū)動(dòng)電路。驅(qū)動(dòng)電路。 如圖如圖b為低電平驅(qū)動(dòng)繼電器為低電平驅(qū)動(dòng)繼電器電路圖。電路圖。 對于微型計(jì)算機(jī)系統(tǒng),采用低對于微型計(jì)算機(jī)系統(tǒng),采用低電平動(dòng)作的繼電器驅(qū)動(dòng)電路屬電平動(dòng)作的繼電器驅(qū)動(dòng)電路屬于較優(yōu)的設(shè)計(jì)。于較優(yōu)的設(shè)計(jì)。 由于線圈是電感負(fù)載,續(xù)流二由于線圈是電感負(fù)載,續(xù)流二極管起到保護(hù)晶體管的損壞。極管起到保護(hù)晶體管的損壞。 如果要同時(shí)驅(qū)動(dòng)多個(gè)繼電器。如果要同時(shí)驅(qū)動(dòng)多個(gè)繼電器??墒褂眉姌O開路(可使用集電極開路(OC)輸出)輸出的反相門,如的反相門,如7405(驅(qū)

7、動(dòng)(驅(qū)動(dòng)5V繼繼電器)或電器)或7406(驅(qū)動(dòng)較高電壓(驅(qū)動(dòng)較高電壓繼電器,最高繼電器,最高30V)。)。4、驅(qū)動(dòng)固態(tài)繼電器、驅(qū)動(dòng)固態(tài)繼電器 固態(tài)繼電器(固態(tài)繼電器(SSR)類似一般繼電器,可用較小的控制信號來驅(qū)動(dòng),以控)類似一般繼電器,可用較小的控制信號來驅(qū)動(dòng),以控制較大的負(fù)載。制較大的負(fù)載。SSR沒有實(shí)際的觸點(diǎn),不會有觸點(diǎn)動(dòng)作的火花與機(jī)械動(dòng)作。沒有實(shí)際的觸點(diǎn),不會有觸點(diǎn)動(dòng)作的火花與機(jī)械動(dòng)作。一般一般SSR是由光耦合器輸入控制信號,而另一端則是較大容量的功率半導(dǎo)體是由光耦合器輸入控制信號,而另一端則是較大容量的功率半導(dǎo)體器件(如器件(如SCR、TRIAC或或IGBT)。)。 如圖為常見的如圖

8、為常見的SSR,其輸出端為,其輸出端為AC250V/10A。 SSR的輸入端為的輸入端為LED,所以其驅(qū)動(dòng)方法與所以其驅(qū)動(dòng)方法與LED一樣,一樣,不過需要較大的電壓和電流。不過需要較大的電壓和電流。 如圖如圖a為高電平驅(qū)為高電平驅(qū)動(dòng)電路;圖動(dòng)電路;圖b為低電為低電平驅(qū)動(dòng)電路。平驅(qū)動(dòng)電路。5、驅(qū)動(dòng)七段數(shù)碼管、驅(qū)動(dòng)七段數(shù)碼管 七段七段LED數(shù)碼管是利用數(shù)碼管是利用7個(gè)個(gè)LED組合而成的顯示裝置,可以顯示組合而成的顯示裝置,可以顯示0-9數(shù)字?jǐn)?shù)字和和A-F字母。七段字母。七段LED數(shù)碼管有共陰極與共陽極兩種。數(shù)碼管有共陰極與共陽極兩種。共陽極(共陽極(Common Anode)七段)七段LED數(shù)碼管

9、數(shù)碼管 電路連接如圖電路連接如圖a,com接接+5V,每個(gè)陰極引腳各接一個(gè)限流電阻。圖,每個(gè)陰極引腳各接一個(gè)限流電阻。圖b為不為不合理的接法。若合理的接法。若a接接8051輸出端口的最低位(輸出端口的最低位(LSB),),dp接接8051的最高位的最高位(MSB),則),則0-9的驅(qū)動(dòng)信號如表所示(小數(shù)點(diǎn)不亮)。的驅(qū)動(dòng)信號如表所示(小數(shù)點(diǎn)不亮)。共陰極(共陰極(Common Catchode)七)七段段LED數(shù)碼管數(shù)碼管 電路連接如圖電路連接如圖a,com接接GND,每個(gè)陽極引腳各接一個(gè)限流電阻。每個(gè)陽極引腳各接一個(gè)限流電阻。圖圖b為不合理的接法。若為不合理的接法。若a接接8051輸輸出端口的

10、最低位(出端口的最低位(LSB),),dp接接8051的最高位(的最高位(MSB),則),則0-9的的驅(qū)動(dòng)信號如表所示(小數(shù)點(diǎn)不亮)。驅(qū)動(dòng)信號如表所示(小數(shù)點(diǎn)不亮)。實(shí)例實(shí)例1、驅(qū)動(dòng)蜂鳴器、驅(qū)動(dòng)蜂鳴器l 電路電路 蜂鳴器由蜂鳴器由P3.7經(jīng)晶體管驅(qū)動(dòng)。經(jīng)晶體管驅(qū)動(dòng)。l 聲音產(chǎn)生原理聲音產(chǎn)生原理 聲音是蜂鳴器簧片振動(dòng)產(chǎn)生的,聲音是蜂鳴器簧片振動(dòng)產(chǎn)生的,若要產(chǎn)生若要產(chǎn)生f的頻率,需要在周期的頻率,需要在周期T時(shí)間內(nèi)進(jìn)行吸、放各一次,即通時(shí)間內(nèi)進(jìn)行吸、放各一次,即通斷時(shí)間各斷時(shí)間各1/2T。l 程序設(shè)計(jì)程序設(shè)計(jì) 本程序?qū)a(chǎn)生本程序?qū)a(chǎn)生1KHz信號持續(xù)信號持續(xù)0.1s,停止,停止0.5s,再產(chǎn)生,再

11、產(chǎn)生1KHz信號持續(xù)信號持續(xù)0.1s停止停止0.5s,然后從,然后從頭開始執(zhí)行。頭開始執(zhí)行。/*ch01.c -蜂鳴器程序蜂鳴器程序-*/*聲明區(qū)聲明區(qū)*#include sbit buzzer=P37; void delay(int);void pulse_BZ(int,int,int);/*主程序主程序*Main() while(1) pulse_BZ(100,1,1); delay(1000); /*子程序子程序*/*延遲函數(shù)延遲函數(shù) x0.5ms */void delay(int x) int i,j; for(i=0;ix;i+) for(j=0;j60;j+);/*蜂鳴器發(fā)聲函數(shù)蜂

12、鳴器發(fā)聲函數(shù) count計(jì)數(shù)計(jì)數(shù) TH高電平時(shí)間高電平時(shí)間 TL低電低電平時(shí)間平時(shí)間 */void pulse_BZ(int count,int TH,int TL) int i; for(i=0;icount;i+) buzzer=1; delay(TH); buzzer=0; delay(TL); 對程序進(jìn)行仿真調(diào)對程序進(jìn)行仿真調(diào)試,如圖高電平持續(xù)試,如圖高電平持續(xù)時(shí)間為時(shí)間為0.000944-0.000422=0.000522s 同樣,低電平持續(xù)同樣,低電平持續(xù)時(shí)間也為時(shí)間也為0.5ms。 如果有目標(biāo)板,可以如果有目標(biāo)板,可以將編譯生成的將編譯生成的2.HEX文件下載至目標(biāo)器件,文件下載

13、至目標(biāo)器件,如圖。如圖。 思考:思考: 若想產(chǎn)生若想產(chǎn)生1KHZ聲音聲音0.2S,暫停,暫停0.05S、600HZ聲音聲音0.1S、暫停、暫停0.2S。應(yīng)如何修改程序。應(yīng)如何修改程序。2、驅(qū)動(dòng)繼電器、驅(qū)動(dòng)繼電器l 電路電路 蜂鳴器由蜂鳴器由P3.7經(jīng)晶體管驅(qū)動(dòng),繼電器由經(jīng)晶體管驅(qū)動(dòng),繼電器由P3.6經(jīng)晶體管驅(qū)動(dòng)。經(jīng)晶體管驅(qū)動(dòng)。l 繼電器驅(qū)動(dòng)原理繼電器驅(qū)動(dòng)原理 由電路圖可知,由電路圖可知,P3.6輸出輸出1,則晶體,則晶體管飽和導(dǎo)通,繼電器管飽和導(dǎo)通,繼電器線圈得電,繼電器吸線圈得電,繼電器吸合;合;P3.6輸出輸出0,則,則晶體管截止,繼電器晶體管截止,繼電器釋放。釋放。 繼電器使用時(shí),一繼電

14、器使用時(shí),一定要看清楚它上面的定要看清楚它上面的標(biāo)示,如標(biāo)示,如“0.5A,120VAC RES”,表示該,表示該繼電器觸點(diǎn)可以驅(qū)動(dòng)繼電器觸點(diǎn)可以驅(qū)動(dòng)0.5A,交流,交流120V的電阻性負(fù)載。的電阻性負(fù)載。 本例子是由本例子是由P3.6驅(qū)動(dòng)繼電器每秒鐘開關(guān)一次,開關(guān)驅(qū)動(dòng)繼電器每秒鐘開關(guān)一次,開關(guān)10次后,蜂鳴器響兩次后,蜂鳴器響兩聲,然后從頭開始執(zhí)行。聲,然后從頭開始執(zhí)行。/*-ch02.c-*/#includesbitbuzzer=P37;sbitrelay=P36;voiddelay(int);voidpulse_BZ(int,int,int);voidpulse_RL(int,int,i

15、nt);main()while(1)pulse_RL(10,2000,2000);/relayon/off10tinmes,2000 x0.5=1spulse_BZ(100,1,1);/buzzerfirston100 x(0.5+0.5)=0.1sdelay(200);/delay200 x0.5=0.1mspulse_BZ(100,1,1);delay(200);/-delay-voiddelay(intx)inti,j;for(i=0;ix;i+)for(j=0;j60;j+);/-pulse_BZ-voidpulse_BZ(intcount,intTH,intTL)inti;for(i

16、=0;icount;i+)buzzer=1;delay(TH);buzzer=0;delay(TL);/-relaycontrol-voidpulse_RL(intcount,intTH,intTL)inti;for(i=0;icount;i+)relay=1;delay(TH);relay=0;delay(TL); 思考:思考: 若讓繼電器吸合若讓繼電器吸合10S,斷開,斷開5S,周而復(fù),周而復(fù)始,應(yīng)如何修改程序。始,應(yīng)如何修改程序。3、霹靂燈、霹靂燈 霹靂燈是指在一排霹靂燈是指在一排LED里(此處里(此處8個(gè)),任何一個(gè)個(gè)),任何一個(gè)時(shí)間只有一個(gè)時(shí)間只有一個(gè)LED亮,亮亮,亮燈順序?yàn)橛勺蠖?/p>

17、右再由右燈順序?yàn)橛勺蠖以儆捎叶?,感覺上就像一個(gè)而左,感覺上就像一個(gè)LED由左跑到右,再由右由左跑到右,再由右跑到左。跑到左。 在程序設(shè)計(jì)中,采用計(jì)在程序設(shè)計(jì)中,采用計(jì)數(shù)循環(huán)的方式,首先左移數(shù)循環(huán)的方式,首先左移7次,在右移次,在右移7次,如此循環(huán)。次,如此循環(huán)。 左移采用左移采用LED1指令。指令。LED的初始值為的初始值為11111110,左移時(shí),右邊將移入,左移時(shí),右邊將移入0,必須將最右邊的位變成,必須將最右邊的位變成1,采用,采用OR運(yùn)算,運(yùn)算,即即LED=(LED1|0X80。 移位完成判斷可采用計(jì)數(shù)的方式,也可采用判斷最高位為移位完成判斷可采用計(jì)數(shù)的方式,也可采用判斷最高位為0

18、的方式(左的方式(左移)或最低位為移)或最低位為0(右移)。(右移)。/*-ch03.c-*/#include#defineLEDP1voiddelay(int);main()unsignedchari;LED=0 xfe;while(1)for(i=0;i7;i+)delay(100);/delay100 x5ms=0.5sLED=(LED1)|0 x01;for(i=0;i1)|0 x80;/-delay-voiddelay(intx)inti,j;for(i=0;ix;i+)for(j=0;j600;j+);/count600delay5ms思考:思考:1、修改程序,將它變成雙燈的、修改

19、程序,將它變成雙燈的霹靂燈功能。霹靂燈功能。2、用判斷的方式重寫上述程序。、用判斷的方式重寫上述程序。4、七段、七段LED數(shù)碼管數(shù)碼管 電路如圖,由電路如圖,由P0驅(qū)動(dòng)共陽極數(shù)碼管。驅(qū)動(dòng)共陽極數(shù)碼管。 數(shù)碼管上顯示的數(shù)字從數(shù)碼管上顯示的數(shù)字從0開始,每隔開始,每隔0.5S增加增加1,直到,直到9之后,再從之后,再從0開始,開始,如此循環(huán)。如此循環(huán)。/*-ch04.c-*/#include#defineSEGP0charcodeTAB=0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x83,0 xf8,0 x80,0 x98;voiddelay(int);main()

20、unsignedchari;while(1)for(i=0;i10;i+)SEG=TABi;delay(500);/delay500 x1ms=0.5s/-delay-voiddelay(intx)inti,j;for(i=0;ix;i+)for(j=0;j120;j+);/count120delay1ms思考:思考:1、修改程序,讓數(shù)碼管從、修改程序,讓數(shù)碼管從9開開始顯示,遞減到始顯示,遞減到0循環(huán)。循環(huán)。2、修改程序,讓數(shù)碼管從、修改程序,讓數(shù)碼管從0開開始顯示,遞增到始顯示,遞增到9,再遞減到,再遞減到0,循環(huán)。循環(huán)。輸入設(shè)備與輸入電路的設(shè)計(jì)輸入設(shè)備與輸入電路的設(shè)計(jì)1、輸入設(shè)備、輸入設(shè)

21、備 對于數(shù)字電路,最基本的輸入器件是開關(guān),開關(guān)分為兩類:對于數(shù)字電路,最基本的輸入器件是開關(guān),開關(guān)分為兩類:l 按鈕開關(guān),具有自動(dòng)恢復(fù)(彈回按鈕開關(guān),具有自動(dòng)恢復(fù)(彈回)功能,在電路板中,最典型的按鈕開關(guān)功能,在電路板中,最典型的按鈕開關(guān)是是Tack Switch ,如圖,如圖a所示,也有以導(dǎo)電橡皮所組成的按鈕組。所示,也有以導(dǎo)電橡皮所組成的按鈕組。l 閘刀開關(guān)(閘刀開關(guān)(Knife Switch)不會自動(dòng)恢復(fù),電路板中最典型的是撥碼開)不會自動(dòng)恢復(fù),電路板中最典型的是撥碼開關(guān)(關(guān)(DIP Switch),如圖),如圖b所示。有所示。有2P、4P、8P等,通常會在一邊標(biāo)示等,通常會在一邊標(biāo)示O

22、N。輸入端口的應(yīng)用輸入端口的應(yīng)用l 面板用數(shù)字型撥碼開關(guān)面板用數(shù)字型撥碼開關(guān) 是一種附有數(shù)字輪盤的撥碼開關(guān),嵌在控制面板上,如圖所示??煞譃槭且环N附有數(shù)字輪盤的撥碼開關(guān),嵌在控制面板上,如圖所示。可分為下列兩種類型:下列兩種類型:a.BCD撥碼開關(guān)提供撥碼開關(guān)提供0-9的的BCD編碼輸出。編碼輸出。b.十六進(jìn)制撥碼開關(guān)提供十六進(jìn)制撥碼開關(guān)提供0-F十六進(jìn)制編碼輸出十六進(jìn)制編碼輸出l 電路板用數(shù)字型撥碼開關(guān)電路板用數(shù)字型撥碼開關(guān) 如圖所示。如圖所示。 2、輸入電路設(shè)計(jì)、輸入電路設(shè)計(jì) 在設(shè)計(jì)數(shù)字電路或微處理器輸入電路時(shí),要在設(shè)計(jì)數(shù)字電路或微處理器輸入電路時(shí),要避免不確定狀態(tài),即輸入端不要空接。避免

23、不確定狀態(tài),即輸入端不要空接。 對開關(guān)輸入至數(shù)字電路,一般會接一個(gè)電阻對開關(guān)輸入至數(shù)字電路,一般會接一個(gè)電阻到到VCC或或GND。3、抖動(dòng)與去抖動(dòng)、抖動(dòng)與去抖動(dòng)l 抖動(dòng)現(xiàn)象抖動(dòng)現(xiàn)象 開關(guān)動(dòng)作并不是想象的那樣工作很確定,在操作的時(shí)候,由于觸點(diǎn)的彈開關(guān)動(dòng)作并不是想象的那樣工作很確定,在操作的時(shí)候,由于觸點(diǎn)的彈性,會出現(xiàn)觸點(diǎn)反復(fù)動(dòng)作而使輸入的電平出現(xiàn)波動(dòng)的不穩(wěn)定現(xiàn)象,這個(gè)性,會出現(xiàn)觸點(diǎn)反復(fù)動(dòng)作而使輸入的電平出現(xiàn)波動(dòng)的不穩(wěn)定現(xiàn)象,這個(gè)現(xiàn)象稱為按鍵的抖動(dòng)。現(xiàn)象稱為按鍵的抖動(dòng)。 抖動(dòng)一般是一個(gè)過渡過程,出現(xiàn)在按鍵按下和松開的過程中,一般持續(xù)抖動(dòng)一般是一個(gè)過渡過程,出現(xiàn)在按鍵按下和松開的過程中,一般持續(xù)10

24、-20毫秒的時(shí)間。毫秒的時(shí)間。l 硬件去抖動(dòng)硬件去抖動(dòng) 如圖為與非門組成的去抖動(dòng)電路如圖為與非門組成的去抖動(dòng)電路(debouncer),這個(gè)電路需要的元),這個(gè)電路需要的元件多,占用電路面積大,使用較少。件多,占用電路面積大,使用較少。 利用利用RC去抖動(dòng)電路較多,如圖所示,去抖動(dòng)電路較多,如圖所示,電路中只需要增加一個(gè)電容。電路中只需要增加一個(gè)電容。應(yīng)用實(shí)例應(yīng)用實(shí)例1、撥碼開關(guān)、撥碼開關(guān) 設(shè)計(jì)一個(gè)由撥碼開關(guān)控制設(shè)計(jì)一個(gè)由撥碼開關(guān)控制LED的系統(tǒng),撥碼開關(guān)輸入到的系統(tǒng),撥碼開關(guān)輸入到P2,對應(yīng)的,對應(yīng)的LED燈由燈由P1輸出控制,電路如圖。輸出控制,電路如圖。/*-ch05.c-*/#incl

25、ude#defineSWP2#defineLEDP1main()SW=0 xff;while(1)LED=SW;思考:思考:1、本程序中,有沒有抖動(dòng)的困擾。、本程序中,有沒有抖動(dòng)的困擾。2、若希望撥碼開關(guān)的、若希望撥碼開關(guān)的S1、S3、S5三個(gè)三個(gè)都合上時(shí),前都合上時(shí),前4個(gè)個(gè)LED亮;亮;S2或或S4或或S6合上時(shí),后合上時(shí),后4個(gè)個(gè)LED亮;亮;S7及及S8合上時(shí),合上時(shí),所有所有LED亮,編寫程序。亮,編寫程序。2、按鈕開關(guān)、按鈕開關(guān) 如圖,若按下如圖,若按下PB1,則,則P1.0所連接的所連接的LED亮;若按亮;若按下下PB2,則關(guān)閉,則關(guān)閉P1.0所接的所接的LED。/*-ch05.

26、c-*/#includesbitPB1=P20;sbitPB2=P21;sbitLED=P10;main()LED=1;PB1=1;PB2=1;while(1)if(PB2=0)LED=1;elseif(PB1=0)LED=0;思考:思考:1、本程序中,有沒有抖動(dòng)的困擾。、本程序中,有沒有抖動(dòng)的困擾。2、若同時(shí)按下、若同時(shí)按下PB1和和PB2按鈕會怎樣按鈕會怎樣?3、按鈕開關(guān)切換、按鈕開關(guān)切換 如圖,若初始如圖,若初始P1.0接的接的LED不亮,按下不亮,按下PB1,則,則LED亮,再按一次亮,再按一次PB1,則,則LED熄滅,以此類推;當(dāng)按住不放時(shí),不會改熄滅,以此類推;當(dāng)按住不放時(shí),不會改

27、變。變。/*-ch05.c-*/#includesbitPB1=P20;sbitLED=P10;voiddebouncer(void);main()LED=1;/LEDoffPB1=1;/setP2.0toinputwhile(1)if(PB1=0)debouncer();LED=LED;while(PB1!=1);debouncer();/-debouncer-voiddebouncer(void)inti;for(i=0;i2400;i+);思考:思考: 改變改變debouncer時(shí)間長短看看有什么時(shí)間長短看看有什么影響。影響。4、按鈕開關(guān)控制數(shù)碼管、按鈕開關(guān)控制數(shù)碼管 如圖,如圖,P0接

28、數(shù)碼管,接數(shù)碼管,P2.0接按鈕接按鈕PB1,P2.1接按鈕接按鈕PB2,其中,其中PB1控制數(shù)碼顯示控制數(shù)碼顯示遞增,遞增,PB2控制遞減。程序開始數(shù)碼管顯控制遞減。程序開始數(shù)碼管顯示示0,當(dāng)按鈕按住不放時(shí),數(shù)碼管顯示不,當(dāng)按鈕按住不放時(shí),數(shù)碼管顯示不變。變。/*-ch05.c-*/#include#defineSEGP0charcodeTAB=0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x83,0 xf8,0 x80,0 x98;sbitPB1=P20;sbitPB2=P21;voiddebouncer(void);main()unsignedchari=0

29、;PB1=PB2=1;/settoinputSEG=TABi;/while(1)if(PB1=0)debouncer();i=(i0)?i-1:9;SEG=TABi;while(PB2=0);debouncer();/-debouncer-voiddebouncer(void)inti;for(i=0;i2400;i+);思考:思考: 同時(shí)按住同時(shí)按住PB1和和PB2會怎么樣?會怎么樣?5、BCD撥碼開關(guān)撥碼開關(guān) 如圖,如圖,P0接數(shù)碼管,接數(shù)碼管,P2的低的低4位連接到位連接到BCD型數(shù)字型撥碼開關(guān),數(shù)碼管顯示撥碼型數(shù)字型撥碼開關(guān),數(shù)碼管顯示撥碼開關(guān)的值。開關(guān)的值。/*-ch05.c-*/#

30、include#defineSEGP0#defineSWP2#defineSW_H()SW&0 x0fcharcodeTAB=0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x83,0 xf8,0 x80,0 x98;main()SW=0 xff;/settoinputwhile(1)SEG=TABSW_H();思考:思考: 1、本程序中有沒有抖動(dòng)的困、本程序中有沒有抖動(dòng)的困擾?擾? 2、如果將、如果將BCD型改成十六進(jìn)型改成十六進(jìn)制,程序如何修改?制,程序如何修改?6、多開關(guān)、多開關(guān) 如圖,如圖,P1接接8個(gè)個(gè)LED,P2的低的低4位連接位連接4個(gè)按鈕開關(guān)

31、,程序功能要求如下。個(gè)按鈕開關(guān),程序功能要求如下。 a.按下按下PB1:前:前4個(gè)個(gè)LED,后,后4個(gè)個(gè)LED交交替顯示替顯示3次,間隔次,間隔0.5S,然后,然后8個(gè)個(gè)LED閃爍閃爍3次。次。 b.按下按下PB2:單燈左移:單燈左移3圈,然后圈,然后8燈閃燈閃爍爍3次。次。 c.按下按下PB3:單燈右移:單燈右移3圈,然后圈,然后8燈閃燈閃爍爍3次。次。 d.按下按下PB4:霹靂燈:霹靂燈3圈,然后圈,然后8燈閃爍燈閃爍3次。次。本例子目的是了解模塊化和按鈕優(yōu)先等級本例子目的是了解模塊化和按鈕優(yōu)先等級。/*-自己寫的鏈接-*/#defineLEDP1voiddebouncer(void);/

32、去抖voiddelay10ms(int);/10ms延時(shí)voidalter(int);/交替閃爍voidleft(int);/單燈左移voidright(int);/單燈右移voidpili(int);/霹靂燈voidflash(int);/閃爍/-去抖函數(shù),延時(shí)約20ms-voiddebouncer(void)delay10ms(2);/-延時(shí)函數(shù),延時(shí)=x*10ms-voiddelay10ms(intx)inti,j;for(i=0;ix;i+)for(j=0;j1200;j+);/-高低電平交替閃爍,執(zhí)行x次voidalter(intx)inti;LED=0 x0f;for(i=0;i2

33、*x-1;i+)delay10ms(50);LED=LED;delay10ms(50);/-全燈閃爍,執(zhí)行x次-voidflash(intx)inti;LED=0 x00;for(i=0;i2*x-1;i+)delay10ms(50);LED=LED;delay10ms(50);/-單燈左移,執(zhí)行x圈-voidleft(intx)inti,j;for(i=0;ix;i+)LED=0 xfe;for(j=0;j7;j+)delay10ms(25);LED=(LED1)|0 x01;delay10ms(25);/-單燈右移,執(zhí)行x圈-voidright(intx)inti,j;for(i=0;ix

34、;i+)LED=0 x7f;for(j=0;j1)|0 x80;delay10ms(25);/-霹靂燈,執(zhí)行x圈-voidpili(intx)inti;for(i=0;ix;i+)left(1);right(1);/*-ch05.c-*/#include#includemyio.hsbitPB1=P20;sbitPB2=P21;sbitPB3=P22;sbitPB4=P23;main()LED=0 xff;P2=0 xff;/settoinputwhile(1)if(PB1=0)debouncer();alter(3);flash(3);elseif(PB2=0)debouncer();lef

35、t(3);flash(3);elseif(PB3=0)debouncer();right(3);flash(3);elseif(PB4=0)debouncer();pili(3);flash(3);思考:思考: 本程序中若同時(shí)按下多鍵會如何?若按本程序中若同時(shí)按下多鍵會如何?若按住按鍵不放會如何?住按鍵不放會如何? 前面程序中,前面程序中,PB1具有最高優(yōu)先具有最高優(yōu)先級,若改成無優(yōu)先權(quán)的問題時(shí),可級,若改成無優(yōu)先權(quán)的問題時(shí),可用用SWITCH語句。語句。 /*-ch05.c-*/#include#includemyio.h#definePBP2main()LED=0 xff;P2=0 xff

36、;/ttoinputwhile(1)switch(PB)case0 x01:debouncer();alter(3);flash(3);break;case0 x02:debouncer();left(3);flash(3);break;case0 x04:debouncer();right(3);flash(3);break;case0 x08:debouncer();pili(3);flash(3);break;思考:思考: 本程序中去抖本程序中去抖動(dòng)函數(shù)是否有必動(dòng)函數(shù)是否有必要?要? 若同時(shí)按下多若同時(shí)按下多鍵會產(chǎn)生什么結(jié)鍵會產(chǎn)生什么結(jié)果?果? 若按住某鍵不若按住某鍵不放會有什么結(jié)果?放

37、會有什么結(jié)果? 前面程序中,如何解決按鍵按住前面程序中,如何解決按鍵按住不放的問題。不放的問題。 /*-ch05.c-*/#include#includemyio.h#definePBP2main()LED=0 xff;P2=0 xff;/ttoinputwhile(1)switch(PB)case0 x01:debouncer();while(PB=1);debouncer();alter(3);flash(3);break;case0 x02:debouncer();while(PB=1);debouncer();left(3);flash(3);break;case0 x04:debou

38、ncer();while(PB=1);debouncer();right(3);flash(3);break;case0 x08:debouncer();while(PB=1);debouncer();pili(3);flash(3);break;輸入端口的高級應(yīng)用輸入端口的高級應(yīng)用1、鍵盤掃描、鍵盤掃描 在計(jì)算機(jī)系統(tǒng)中,若需要多個(gè)按鈕,通常將這些按鈕組成陣列,如在計(jì)算機(jī)系統(tǒng)中,若需要多個(gè)按鈕,通常將這些按鈕組成陣列,如16個(gè)個(gè)按鈕,則排成按鈕,則排成44陣列,稱之為鍵盤(陣列,稱之為鍵盤(Keyboard)。)。 44是指是指4列(列(Column)與)與4行(行(Row)所構(gòu)成的鍵盤,如圖

39、所示。在)所構(gòu)成的鍵盤,如圖所示。在電路中可使用電路中可使用Tack Switch在在PCB上制成鍵盤。上制成鍵盤。 當(dāng)然,象上面連接鍵盤還不夠,在每行上都必須接一個(gè)上拉電阻(當(dāng)然,象上面連接鍵盤還不夠,在每行上都必須接一個(gè)上拉電阻(10k),這里使用一個(gè)),這里使用一個(gè)4R5P視為排阻,如圖。視為排阻,如圖。l 鍵盤掃描原理鍵盤掃描原理 鍵盤電路如圖,進(jìn)行鍵盤掃描時(shí),鍵盤電路如圖,進(jìn)行鍵盤掃描時(shí),將掃描信號送至將掃描信號送至X0-X3,再由,再由Y0-Y3讀取鍵盤狀態(tài),判斷哪個(gè)按鍵被按下。讀取鍵盤狀態(tài),判斷哪個(gè)按鍵被按下。鍵盤掃描方式有兩種,即低電平掃描鍵盤掃描方式有兩種,即低電平掃描與高電

40、平掃描。與高電平掃描。a.低電平掃描低電平掃描 它是將它是將COM端連接端連接VCC,在沒有,在沒有按鍵按下時(shí),按鍵按下時(shí),Y0-Y3保持為保持為高高電平(即電平(即1)。在)。在x0-x3上送上送低低電平,如果對電平,如果對應(yīng)的行有按鍵按下,則讀取應(yīng)的行有按鍵按下,則讀取Y0-Y3中會有中會有低低電平狀態(tài)。整個(gè)掃描分為電平狀態(tài)。整個(gè)掃描分為4個(gè)個(gè)階段:階段: 第一個(gè)階段是判斷第一列的按鍵,在第一個(gè)階段是判斷第一列的按鍵,在X0送低電平,送低電平,X1-X3送高電平,讀送高電平,讀取取Y0-Y3的狀態(tài),若有低電平值,則第一列對應(yīng)的按鍵按下。的狀態(tài),若有低電平值,則第一列對應(yīng)的按鍵按下。 第二、

41、三、四階段分別依次判斷第二、三、四列的按鍵,依次在第二、三、四階段分別依次判斷第二、三、四列的按鍵,依次在X1、X2、X3上送低電平,分別讀取上送低電平,分別讀取Y0-Y3。b.高電平掃描高電平掃描 它是將它是將COM端連接端連接GND,在沒有按鍵按下時(shí),在沒有按鍵按下時(shí),Y0-Y3保持為保持為低低電平(即電平(即0)。在)。在x0-x3上送上送高高電平,如果對應(yīng)的行有按鍵按下,則讀取電平,如果對應(yīng)的行有按鍵按下,則讀取Y0-Y3中中會有會有高高電平狀態(tài)。整個(gè)掃描分為和低電平掃描過程一樣。電平狀態(tài)。整個(gè)掃描分為和低電平掃描過程一樣。 兩種掃描的速度很快,每個(gè)掃描周期只需要幾個(gè)毫秒,通常以低電平

42、掃兩種掃描的速度很快,每個(gè)掃描周期只需要幾個(gè)毫秒,通常以低電平掃描為主,本章以低電平掃描來介紹。描為主,本章以低電平掃描來介紹。l 44鍵盤程序分析鍵盤程序分析 如圖,當(dāng)按下按鍵后,按鍵上的如圖,當(dāng)按下按鍵后,按鍵上的鍵值將顯示在鍵值將顯示在DS1七段數(shù)碼管上。七段數(shù)碼管上。程序如下:程序如下: /-keyscansub-#defineSEGP0#defineKEYPP2charcodeTAB=0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,/0-40 x83,0 xf8,0 x80,0 x98,0 xa0,0 x83,/5-90 xa7,0 xa1,0 x84,/a-

43、e0 x8e,0 xbf,0 x7f;/f-.chardisp=0 x7f;unsignedcharscan=0 xef,0 xdf,0 xbf,0 x7f;/-掃描44鍵盤及4個(gè)七段顯示器函數(shù)-voidscanner(void)unsignedcharcol,row,dig;unsignedcharrowkey,kcode;for(col=0;col4;col+)KEYP=scancol;SEG=disp;rowkey=KEYP&0 x0f;if(rowkey!=0)if(rowkey=0 x01)row=0;elseif(rowkey=0 x02)row=1;elseif(rowk

44、ey=0 x04)row=2;elseif(rowkey=0 x08)row=3;kcode=4*col+row;disp=TABkcode;while(rowkey!=0)rowkey=KEYP&0 x0f;delay1ms(4);l 認(rèn)識認(rèn)識MM74C922/MM74C923 對于鍵盤的狀態(tài)檢測,除了利用鍵盤對于鍵盤的狀態(tài)檢測,除了利用鍵盤掃描軟件,還可以應(yīng)用鍵盤掃描掃描軟件,還可以應(yīng)用鍵盤掃描IC,如如NS公司的公司的MM74C922/MM74C923,其中,其中MM74C922為為44鍵盤掃描鍵盤掃描IC,MM74C923為為45鍵盤掃描鍵盤掃描IC,如圖。各引腳定義如下:,如

45、圖。各引腳定義如下:DataA-DataE:輸出檢測鍵盤的結(jié)果,連接到輸出檢測鍵盤的結(jié)果,連接到處理器的輸入口。處理器的輸入口。ColumnX0-ColumnX3:連接鍵盤的連接鍵盤的x0-x3。RowY0-RowY4:連接鍵盤的連接鍵盤的Y0-Y4行。行。Oscillator:振蕩引腳,接:振蕩引腳,接0.1F電容到地。電容到地。Keyboard Mask:按鍵屏蔽引腳(:按鍵屏蔽引腳(KBM),功能是提供屏蔽按鍵抖動(dòng)的周期,即,功能是提供屏蔽按鍵抖動(dòng)的周期,即硬件去抖動(dòng)。當(dāng)按鍵按下時(shí),進(jìn)入屏蔽硬件去抖動(dòng)。當(dāng)按鍵按下時(shí),進(jìn)入屏蔽周期,首先將暫停周期,首先將暫停IC內(nèi)部的計(jì)數(shù),同時(shí)內(nèi)部的計(jì)數(shù),

46、同時(shí)DA引腳變?yōu)楦唠娖?,直到按鍵釋放才恢引腳變?yōu)楦唠娖剑钡桨存I釋放才恢復(fù)低電平。復(fù)低電平。Data Available:允許數(shù)據(jù)輸出(:允許數(shù)據(jù)輸出(DA),無),無鍵時(shí)為低電平,有按鍵時(shí)為高電平,允鍵時(shí)為低電平,有按鍵時(shí)為高電平,允許鍵盤狀態(tài)由許鍵盤狀態(tài)由DataA-DataE輸出。輸出。Output Enable:輸出使能(:輸出使能(OE),通過邏輯門或反相器設(shè)置數(shù)據(jù)輸出引腳),通過邏輯門或反相器設(shè)置數(shù)據(jù)輸出引腳DataA-DataE與微處理器之間的傳輸方式(同步交互式、同步數(shù)據(jù)傳輸及異步數(shù)據(jù)傳輸?shù)龋┡c微處理器之間的傳輸方式(同步交互式、同步數(shù)據(jù)傳輸及異步數(shù)據(jù)傳輸?shù)龋?,如圖所示。,如圖

47、所示。上圖上圖C中,中,MM74C922的的ABCD連接到連接到89S51的的P2.4到到P2.7,DA腳連接腳連接89S51的的P3.2,89S51的的P2.0-P2.3連接連接7447,按下鍵盤的任意鍵其數(shù)值將顯示在數(shù)碼管上。,按下鍵盤的任意鍵其數(shù)值將顯示在數(shù)碼管上。程序如下:程序如下:/-MM74C922-#include Sbit IRQ=P32;char code disp=8,0,5,1;unsigned char scan;main() P2=0 xff; while(1) if(IRQ=1) P2=(P24)|0 xf0; 2、七段、七段LED數(shù)碼管掃描數(shù)碼管掃描 前面討論了單

48、個(gè)數(shù)碼管的顯示,如果有多個(gè)數(shù)碼管顯示時(shí),若還是與單前面討論了單個(gè)數(shù)碼管的顯示,如果有多個(gè)數(shù)碼管顯示時(shí),若還是與單個(gè)數(shù)碼管一樣采用個(gè)別(獨(dú)立)的驅(qū)動(dòng)方式就很沒效率,也將占用較多個(gè)數(shù)碼管一樣采用個(gè)別(獨(dú)立)的驅(qū)動(dòng)方式就很沒效率,也將占用較多的硬件資源。在此將討論將多個(gè)七段的硬件資源。在此將討論將多個(gè)七段LED數(shù)碼管封裝在一起的七段數(shù)碼數(shù)碼管封裝在一起的七段數(shù)碼管模塊,以及利用視覺暫留現(xiàn)象的快速掃描的驅(qū)動(dòng)方式。管模塊,以及利用視覺暫留現(xiàn)象的快速掃描的驅(qū)動(dòng)方式。l 七段七段LED數(shù)碼管模塊數(shù)碼管模塊 多個(gè)數(shù)碼管同時(shí)使用時(shí),首先將每個(gè)七段多個(gè)數(shù)碼管同時(shí)使用時(shí),首先將每個(gè)七段LED數(shù)碼管的數(shù)碼管的a,b,

49、g引腳都引腳都連在一起,再使用晶體管分別驅(qū)動(dòng)每個(gè)數(shù)碼管的連在一起,再使用晶體管分別驅(qū)動(dòng)每個(gè)數(shù)碼管的com端。如圖:端。如圖: 這種數(shù)碼管模塊顯示時(shí)必須采用動(dòng)態(tài)掃描的方式,但要求掃描時(shí)間第一這種數(shù)碼管模塊顯示時(shí)必須采用動(dòng)態(tài)掃描的方式,但要求掃描時(shí)間第一個(gè)到最后一個(gè)不超過個(gè)到最后一個(gè)不超過16ms,即,即60Hz,這樣才不會有閃爍的感覺。,這樣才不會有閃爍的感覺。 以掃描方式驅(qū)動(dòng)多個(gè)數(shù)碼管時(shí),驅(qū)動(dòng)信號包括顯示數(shù)據(jù)與掃描信號,以掃描方式驅(qū)動(dòng)多個(gè)數(shù)碼管時(shí),驅(qū)動(dòng)信號包括顯示數(shù)據(jù)與掃描信號,“顯示數(shù)據(jù)顯示數(shù)據(jù)”是所要顯示的驅(qū)動(dòng)信號編碼,與驅(qū)動(dòng)單個(gè)數(shù)碼管一樣;是所要顯示的驅(qū)動(dòng)信號編碼,與驅(qū)動(dòng)單個(gè)數(shù)碼管一樣;

50、“掃描掃描信號信號”就是開關(guān),以決定驅(qū)動(dòng)哪一數(shù)碼管,它分為高電平與低電平兩種,就是開關(guān),以決定驅(qū)動(dòng)哪一數(shù)碼管,它分為高電平與低電平兩種,與電路結(jié)構(gòu)有關(guān),上圖中的掃描就是低電平掃描。與電路結(jié)構(gòu)有關(guān),上圖中的掃描就是低電平掃描。 數(shù)碼管模塊就是將多個(gè)位數(shù)的數(shù)碼管封裝在一起,其中各個(gè)數(shù)碼管的數(shù)碼管模塊就是將多個(gè)位數(shù)的數(shù)碼管封裝在一起,其中各個(gè)數(shù)碼管的a,bg是連接在一起的,而是連接在一起的,而com端獨(dú)立。端獨(dú)立。 對于掃描方式(動(dòng)態(tài))驅(qū)動(dòng)的數(shù)碼管,其亮度和穩(wěn)定性是一對矛盾。建對于掃描方式(動(dòng)態(tài))驅(qū)動(dòng)的數(shù)碼管,其亮度和穩(wěn)定性是一對矛盾。建議掃描頻率限制在議掃描頻率限制在60Hz以上,即在以上,即在1

51、6ms之內(nèi)完成一次掃描不會閃爍。即之內(nèi)完成一次掃描不會閃爍。即對于對于4位模塊的掃描,其每位數(shù)的工作周期為固定式負(fù)載的位模塊的掃描,其每位數(shù)的工作周期為固定式負(fù)載的1/4,其亮度約,其亮度約為固定式負(fù)載的為固定式負(fù)載的1/4;對;對8位模塊,則為位模塊,則為1/8,其亮度更低。如何提高亮度,其亮度更低。如何提高亮度: a.降低限流電阻值降低限流電阻值 4位數(shù)碼管使用位數(shù)碼管使用50-100;8位則位則25-50。這個(gè)方法在在線仿真時(shí)要注意。這個(gè)方法在在線仿真時(shí)要注意,程序停止或暫停時(shí),其電流值會很大,容易燒數(shù)碼管。,程序停止或暫停時(shí),其電流值會很大,容易燒數(shù)碼管。 b.選用高亮度數(shù)碼管模塊選用

52、高亮度數(shù)碼管模塊l 7447/7448 對于對于BCD碼轉(zhuǎn)換成七段顯示的譯碼驅(qū)動(dòng)碼轉(zhuǎn)換成七段顯示的譯碼驅(qū)動(dòng)IC,首推,首推7447系列,包括系列,包括7446、7447、7448與與7449。其中。其中7446/7447輸出低電平,用以驅(qū)動(dòng)共陽極數(shù)碼輸出低電平,用以驅(qū)動(dòng)共陽極數(shù)碼管;管;7448/7449則驅(qū)動(dòng)共陰極數(shù)碼管。其引腳說明如下:則驅(qū)動(dòng)共陰極數(shù)碼管。其引腳說明如下:D、C、B、A:BCD碼輸入腳。碼輸入腳。a-g:七段數(shù)碼管段驅(qū)動(dòng)引腳。:七段數(shù)碼管段驅(qū)動(dòng)引腳。Lamp Test(LT):測試引腳,輸入低電平時(shí)所):測試引腳,輸入低電平時(shí)所 有的段亮。有的段亮。RBI:消隱(滅燈)輸入

53、引腳。:消隱(滅燈)輸入引腳。BI/RBO:消隱輸入或動(dòng)態(tài)消隱輸出引腳。:消隱輸入或動(dòng)態(tài)消隱輸出引腳。 消除前置消除前置0 是指若數(shù)字整數(shù)部分靠左邊的數(shù)若為是指若數(shù)字整數(shù)部分靠左邊的數(shù)若為0,則不顯示該位數(shù)。,則不顯示該位數(shù)。若使用若使用7446、7447、7448所提供的消除前置所提供的消除前置0功能,則可將整數(shù)部分最左功能,則可將整數(shù)部分最左邊位數(shù)的邊位數(shù)的RBI引腳接地,引腳接地,BI/RBO引腳連接到其右邊位數(shù)的引腳連接到其右邊位數(shù)的RBI引腳,個(gè)位引腳,個(gè)位的的RBI不接前左邊的不接前左邊的BI/RBO,以避免全部的整數(shù)不顯示;同時(shí),將其,以避免全部的整數(shù)不顯示;同時(shí),將其dp引引腳

54、連接限流電阻后接地,以顯示小數(shù)點(diǎn)。如圖例輸入腳連接限流電阻后接地,以顯示小數(shù)點(diǎn)。如圖例輸入“0000 0001 0001”顯示顯示“11.”。 消除尾端消除尾端0 若使用若使用7446、7447、7448所提供的消除尾端所提供的消除尾端0功能,則可功能,則可將小數(shù)部分最右邊位數(shù)的將小數(shù)部分最右邊位數(shù)的RBI引腳接地,引腳接地,BI/RBO引腳連接到其左邊位數(shù)的引腳連接到其左邊位數(shù)的RBI引腳,以此類推。如圖顯示引腳,以此類推。如圖顯示“5” l 74138/74139 鍵盤掃描和多個(gè)數(shù)碼管掃描,都需要掃描信號,可以利用微處理器程序鍵盤掃描和多個(gè)數(shù)碼管掃描,都需要掃描信號,可以利用微處理器程序產(chǎn)

55、生,這樣需要占用微處理器的輸出端口,在本節(jié)利用產(chǎn)生,這樣需要占用微處理器的輸出端口,在本節(jié)利用2-4譯碼器或譯碼器或3-8譯譯碼器來產(chǎn)生碼器來產(chǎn)生4位或位或8位掃描信號,達(dá)到節(jié)省微處理器本身輸出口的目的。位掃描信號,達(dá)到節(jié)省微處理器本身輸出口的目的。74139是具有雙是具有雙2-4譯碼器的譯碼器的IC,74138則是則是3-8譯碼器譯碼器IC。3、靜態(tài)顯示與動(dòng)態(tài)顯示、靜態(tài)顯示與動(dòng)態(tài)顯示l 使用使用BCD碼譯碼器碼譯碼器 如圖:掃描信號通過如圖:掃描信號通過P1.3-P1.0送至送至Q3-Q0的基極,以低電平驅(qū)動(dòng)數(shù)碼的基極,以低電平驅(qū)動(dòng)數(shù)碼管模塊的四位數(shù)碼。顯示信號由管模塊的四位數(shù)碼。顯示信號由

56、P1.7-P1.4輸出輸出BCD碼至碼至7447譯碼,譯碼,7447的的LT、BI/RBO及及RBI引腳接引腳接VCC或懸空,對于或懸空,對于TTL,輸入腳懸空,輸入腳懸空等同于輸入高電平,到容易受到干擾,要養(yǎng)成習(xí)慣,不用的腳盡量不要等同于輸入高電平,到容易受到干擾,要養(yǎng)成習(xí)慣,不用的腳盡量不要懸空。懸空。程序如下:程序如下:main() while(1) P1=0 x1e; /dig.0顯示顯示1 delay1ms(4); P1=0 x5d; /dig.1顯示顯示5 delay1ms(4); P1=0 x0b; /dig.2顯示顯示0 delay1ms(4); P1=0 x87; /dig.

57、3顯示顯示8 delay1ms(4); 這種方式優(yōu)點(diǎn)是只要一個(gè)端口,這種方式優(yōu)點(diǎn)是只要一個(gè)端口,程序設(shè)計(jì)簡單。但要改變顯示數(shù)字程序設(shè)計(jì)簡單。但要改變顯示數(shù)字,程序設(shè)計(jì)靈活性差。,程序設(shè)計(jì)靈活性差。 若把顯示信號與驅(qū)動(dòng)信號分開由若把顯示信號與驅(qū)動(dòng)信號分開由兩個(gè)端口輸出,則可利用數(shù)組存儲兩個(gè)端口輸出,則可利用數(shù)組存儲所要顯示的數(shù)據(jù),而以移位的方式所要顯示的數(shù)據(jù),而以移位的方式產(chǎn)生掃描信號,如圖。產(chǎn)生掃描信號,如圖。程序如下:程序如下:char code disp=8,0,5,1;unsigned char scan;main() while(1) scan=1; for(i=0;i4;i+) P2

58、=dispi; P1=scan; delay1ms(4); scan=1; 對于對于8個(gè)位的數(shù)碼管顯示,采用上述個(gè)位的數(shù)碼管顯示,采用上述電路,對程序只做少量修改即可。電路,對程序只做少量修改即可。l 直接驅(qū)動(dòng)直接驅(qū)動(dòng) 如圖:直接以如圖:直接以P1輸出掃描信號、輸出掃描信號、P2輸出顯示驅(qū)動(dòng)信號,不使用其輸出顯示驅(qū)動(dòng)信號,不使用其他他IC。程序設(shè)計(jì)如下:。程序設(shè)計(jì)如下:char code TAB=0XC0,;char code disp=8,0,5,1;unsigned char scan;char i,j;main() while(1) scan=1; for(i=0;i4;i+) j=di

59、sp3-i; P2=TABj; P1=scan; delay1ms(4); scan=1; l 使用掃描譯碼器使用掃描譯碼器 如圖:以如圖:以P1輸出輸出BCD信號經(jīng)信號經(jīng)74138輸出掃描信號,輸出掃描信號,P2輸出顯示驅(qū)動(dòng)信號。輸出顯示驅(qū)動(dòng)信號。程序設(shè)計(jì)如下:程序設(shè)計(jì)如下:char code TAB=0XC0,;char code disp=2,0,0,8, 1,2,2,5;unsigned char scan;char i,j;main() while(1) for(i=0;i8;i+) j=disp7-i; P2=TABj; P1=i; delay1ms(2); l 閃爍閃爍 就是時(shí)亮

60、時(shí)不亮,以直接驅(qū)動(dòng)就是時(shí)亮?xí)r不亮,以直接驅(qū)動(dòng)4位數(shù)碼管模塊位數(shù)碼管模塊為例,若要顯示為例,若要顯示“8051”,掃描一次,掃描一次16ms,希望這四個(gè)數(shù)字顯示約希望這四個(gè)數(shù)字顯示約0.48s,熄滅,熄滅0.48S,交,交替循環(huán)。程序如下:替循環(huán)。程序如下:char code TAB=0XC0,;char code disp=8,0,5,1;char scan;char i,j,k;main() while(1) for(k=0;k30;k+) scan=1 for(i=0;i4;i+) j=disp3-i; P2=TABj; P1=scan; delay1ms(4); scan=1; P2=0 xff; delay1ms(48)

溫馨提示

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

評論

0/150

提交評論