單片機(jī)原理及應(yīng)用 第3版 課件第5章 并行口及應(yīng)用_第1頁
單片機(jī)原理及應(yīng)用 第3版 課件第5章 并行口及應(yīng)用_第2頁
單片機(jī)原理及應(yīng)用 第3版 課件第5章 并行口及應(yīng)用_第3頁
單片機(jī)原理及應(yīng)用 第3版 課件第5章 并行口及應(yīng)用_第4頁
單片機(jī)原理及應(yīng)用 第3版 課件第5章 并行口及應(yīng)用_第5頁
已閱讀5頁,還剩32頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

17:441第5章并行口及應(yīng)用3.7

80C51系列單片機(jī)內(nèi)部并行口的結(jié)構(gòu)5.180C51系列單片機(jī)并行口的應(yīng)用5.2七段數(shù)碼管顯示器接口5.317:4425.180C51系列單片機(jī)內(nèi)部并行口的結(jié)構(gòu)

80C51系列單片機(jī)內(nèi)部有4個8位雙向的輸入/輸出口,分別為P0、Pl、P2和P3口。這4個端口的每一位都可以作為雙向通用I/O口使用。在具有片外擴(kuò)展存儲器的系統(tǒng)中,P2口作為高8位地址線,P0口分時作為低8位地址線和雙向數(shù)據(jù)總線。80C51單片機(jī)4個I/O口在結(jié)構(gòu)上是基本相同的,但又各有特點。17:443多路開關(guān)功能:用于控制選通I/O方式還是地址/數(shù)據(jù)輸出方式方式控制:由內(nèi)部控制信號產(chǎn)生數(shù)據(jù)輸出鎖存器,用于數(shù)據(jù)位的鎖存兩個三態(tài)的數(shù)據(jù)輸入緩沖器(BUF1和BUF2)。推拉式I/O驅(qū)動器:由兩只場效應(yīng)管(FET)組成,上面的場效應(yīng)管構(gòu)成上拉電路。5.5.1P0端口BUF2BUF1QQDCVcc控制AD0P0R1

P0R2D0P0WP0口1位的內(nèi)部結(jié)構(gòu)讀鎖存器讀引腳鎖存器內(nèi)部總線寫鎖存器地址/數(shù)據(jù)P0.0多路開關(guān)10字節(jié)地址80H,位地址80H~87H。17:444BUF2BUF1QQDCVcc控制AD0P0R1

P0R2D0P0WP0口內(nèi)部結(jié)構(gòu)讀鎖存器讀引腳鎖存器內(nèi)部總線寫鎖存器地址/數(shù)據(jù)P00多路開關(guān)10說明:1、當(dāng)CPU發(fā)出的控制信號為0時,P0口做雙向I/O口,為漏極開路(三態(tài))2、當(dāng)CPU發(fā)出的控制信號為1時,P0口為地址/數(shù)據(jù)復(fù)用總線(用于口擴(kuò)展)5.5.1P0端口17:4455.5.1P0端口BUF2BUF1QQDCVcc控制AD0P0R1

P0R2D0P0WP0口內(nèi)部結(jié)構(gòu)讀引腳鎖存器內(nèi)部總線寫鎖存器地址/數(shù)據(jù)P00多路開關(guān)103、P0作輸入/輸出口的使用(1)P0作輸出口使用來自CPU的“寫入”脈沖加在D鎖存器的C端,內(nèi)部總線上的數(shù)據(jù)寫入D鎖存器,并向端口引腳P0.x輸出。注意:由于輸出電路是漏極開路(因為這時上拉場效應(yīng)管截止),必須外接上拉電阻才能有高電平輸出。讀鎖存器17:4465.5.1P0端口BUF2BUF1QQDCVcc控制AD0P0R1

P0R2D0P0WP0口內(nèi)部結(jié)構(gòu)讀引腳鎖存器內(nèi)部總線寫鎖存器地址/數(shù)據(jù)P00多路開關(guān)103、P0作輸入/輸出口的使用(2)P0作輸入口使用區(qū)分“讀引腳”和“讀鎖存器”?!白x引腳”信號把下方緩沖器打開,引腳上的狀態(tài)經(jīng)緩沖器讀入內(nèi)部總線;

讀鎖存器執(zhí)行“MOVA,P0”時讀引腳信號有效。說明:在執(zhí)行輸入操作時,如果鎖存器原來寄存的數(shù)據(jù)Q=0。那么由于Q=1將使T1導(dǎo)通,引腳被始終箝拉在低電平上,不可能輸入高電平。為此,用作輸入前,必須先用輸出指令置Q=1,使T1截止。單片機(jī)復(fù)位后,P0口線的狀態(tài)都是高電平,可以直接用作輸入。17:4475.5.1P0端口BUF2BUF1QQDCVcc控制AD0P0R1

P0R2D0P0WP0口內(nèi)部結(jié)構(gòu)讀引腳鎖存器內(nèi)部總線寫鎖存器地址/數(shù)據(jù)P00多路開關(guān)103、

P0作輸入/輸出口的使用(2)P0作輸入口使用區(qū)分“讀引腳”和“讀鎖存器”?!白x引腳”信號把下方緩沖器打開,引腳上的狀態(tài)經(jīng)緩沖器讀入內(nèi)部總線;“讀鎖存器”信號打開上面的緩沖器把鎖存器Q端的狀態(tài)讀入內(nèi)部總線。讀鎖存器執(zhí)行下列指令時均為讀鎖存器操作。ANLP0,#data;(P0)←(P0)∧dataORLP0,#data;(P0)←(P0)∨data;XRLP0,A;(P0)←(P0)⊕(A)INCP0;(P0)←(P0)+117:4485.1.2P1端口P1口內(nèi)部結(jié)構(gòu)如下圖所示。輸出部分有內(nèi)部上拉電阻R*約為20K。其他部分與P0端口使用相類似(讀引腳時先寫入1)。寫數(shù)據(jù)讀端口字節(jié)地址90H,位地址90H~97H。17:449P1口只作通用的I/O口使用,在電路結(jié)構(gòu)上與P0口有兩點區(qū)別:(1)因為只傳送數(shù)據(jù),不再需要多路轉(zhuǎn)接開關(guān)MUX。(2)由于P1口用來傳送數(shù)據(jù),因此輸出電路中有上拉電阻,這樣電路的輸出不是三態(tài)的,所以P1口是準(zhǔn)雙向口。注意:(1)P1口作為輸出口使用時,外電路無需再接上拉電阻。(2)P1口作為輸入口使用時,應(yīng)先向其鎖存器先寫入“1”,使輸出驅(qū)動電路的FET截止。17:4410字節(jié)地址為A0H,位地址A0H~A7H。

5.1.3P2端口P2口的位結(jié)構(gòu)的電路原理圖說明:1、P2可以作為通用的I/O,也可以作為高8位地址輸出輸出。2、當(dāng)控制信號為1時P2口輸出地址信息,此時單片機(jī)完成外部的取指操作或?qū)ν獠繑?shù)據(jù)存儲器16位地址的讀寫操作。3、當(dāng)控制信號為0時,作為普通I/O口使用時用法和P1口類似。1017:4411P3口的字節(jié)地址為B0H,位地址為B0H~B7H

。5.1.4P3端口圖5-4P3口的位結(jié)構(gòu)的電路原理P3口有第二功能信號,且有輸出和輸入兩類:(1)作通用的I/O輸出,“第二輸出功能”線應(yīng)保持高電平,與非門開通,使鎖存器Q端輸出暢通。(2)作第二功能信號輸出,鎖存器預(yù)先置“1”,使與非門對“第二輸出功能”信號的輸出是暢通的。17:4412P3口的字節(jié)地址為B0H,位地址為B0H~B7H

。5.1.4P3端口圖5-4P3口的位結(jié)構(gòu)的電路原理(3)作第二功能信號輸入,在口線引腳的內(nèi)部增加了一個緩沖器,輸入的信號就從這個緩沖器的輸出端取得。而作為通用I/O輸入,仍取自三態(tài)緩沖器的輸出端。

P3口無論作哪種輸入,鎖存器輸出和“第二輸出功能”線都應(yīng)保持高電平。17:4413表3-4P3口的第二功能定義

口引腳第二功能

P3.0 RXD(串行輸入口)

P3.1 TXD(串行輸出口)

P3.2 INT0*

(外部中斷0)

P3.3 INT1*

(外部中斷1)

P3.4 T0(定時器0外部計數(shù)輸入)

P3.5 T1(定時器1外部計數(shù)輸入)

P3.6 WR*

(外部數(shù)據(jù)存儲器寫選通)

P3.7 RD*

(外部數(shù)據(jù)存儲器讀選通)

17:4414使用中應(yīng)注意的問題:(1)P0~P3口都是并行I/O口,但P0口和P2口,還可用來構(gòu)建系統(tǒng)的數(shù)據(jù)總線和地址總線,所以在電路中有一個MUX,以進(jìn)行轉(zhuǎn)換。

而P1口和P3口無構(gòu)建系統(tǒng)的數(shù)據(jù)總線和地址總線的功能,因此,無需轉(zhuǎn)接開關(guān)MUX。

由于P0口可作為地址/數(shù)據(jù)復(fù)用線使用,需傳送系統(tǒng)的低8位地址和8位數(shù)據(jù),因此MUX的一個輸入端為“地址/數(shù)據(jù)”信號。而P2口僅作為高位地址線使用,不涉及數(shù)據(jù),所以MUX的一個輸入信號為“地址”。5.1.5P0~P3端口功能總結(jié)17:4415(2)在4個口中只有P0口是一個真正的雙向口,P1~P3口都是準(zhǔn)雙向口。

原因:P0口作數(shù)據(jù)總線使用時,為保證數(shù)據(jù)正確傳送,需解決芯片內(nèi)外的隔離問題,即只有在數(shù)據(jù)傳送時芯片內(nèi)外才接通;不進(jìn)行數(shù)據(jù)傳送時,芯片內(nèi)外應(yīng)處于隔離狀態(tài)。為此,P0口的輸出緩沖器應(yīng)為三態(tài)門。

在P0口中輸出三態(tài)門是由兩只場效應(yīng)管(FET)組成,所以是一個真正的雙向口。而P1~P3口,上拉電阻代替P0口中的場效應(yīng)管,輸出緩沖器不是三態(tài)的—準(zhǔn)雙向口。(3)P3口的口線具有第二功能,為系統(tǒng)提供一些控制信號。因此在P3口電路增加了第二功能控制邏輯。這是P3口與其它各口的不同之處。17:4416圖3-880C51單片機(jī)對外三總線構(gòu)成17:44175.280C51系列單片機(jī)并行口的應(yīng)用

在單片機(jī)不外擴(kuò)任何芯片的情況下,80C51系列單片機(jī)內(nèi)部并行口可以作為輸出口,直接與輸出外設(shè)連接,常用的輸出外設(shè)是發(fā)光二極管;80C51系列單片機(jī)內(nèi)部并行口也可以作為輸入口,直接與輸入外設(shè)連接,常用的輸入外設(shè)是開關(guān)。17:4418例5-1第二章2.3.2節(jié)對圖2-30所示電路,已經(jīng)編寫了程序?qū)崿F(xiàn)8個發(fā)光二極管單方向輪流點亮。但程序是采用順序結(jié)構(gòu)編寫的,比較長,要求采用模塊化的方式重新編寫。解:將延時程序編成子函數(shù)的形式。用本征庫函數(shù)_crol_來實現(xiàn)P1口數(shù)據(jù)的循環(huán)左移,實現(xiàn)發(fā)光二極管的輪流點亮。程序流程圖如圖5-5所示:圖5-5流水燈單方向點亮的流程圖

程序設(shè)計如下:#include<reg52.h>#include<intrins.h>#defineucharunsignedcharvoiddelay_ms(ucharms);

voidmain(){ucharled;//設(shè)置變量led,作為P1口賦值的變量

led=0xfe;//初值為11111110while(1){P1=led;//led值送入P1口

delay_ms(200);//延時200msled=_crol_(led,1);//led值循環(huán)左移1位

}}voiddelay_ms(ucharms)//延時子程序,最長255ms{uchari;while(ms--)for(i=0;i<124;i++);}17:4419例5-2對圖2-30所示電路,編寫程序?qū)崿F(xiàn)8個發(fā)光二極管左右來回循環(huán)滾動點亮。解:流水燈左右來回循環(huán)滾動點亮的流程圖如圖5-6所示。圖5-6流水燈左右來回循環(huán)滾動點亮的流程圖17:4420例5-2程序設(shè)計如下:#include<reg51.h>#include<intrins.h>#defineucharunsignedcharoiddelay_ms(ucharms);//延時子程序voidmain(){ucharled,i;//設(shè)置變量

led=0xfe;//初值為11111110for(i=0;i<7;i++){P1=led;//led值送入P1口

delay_ms(100);//延時100msled=_crol_(led,1);//led值循環(huán)左移1位

}for(i=0;i<7;i++){P1=led;//led值送入P1口

delay_ms(100);//延時100msled=_cror_(led,1);//led值循環(huán)右移1位

}}

voiddelay_ms(ucharms)//延時子程序{uchari;while(ms--)for(i=0;i<124;i++);}17:4421例5-3用AT89C51單片機(jī)控制四個按鍵K1到K4和四個發(fā)光二極管D1到D4,要求當(dāng)按下K1或K2鍵時D1或D2點亮,松開時對應(yīng)的發(fā)光二極管熄滅,當(dāng)按下K3或K4后按下時,D3或D4不停地閃爍。設(shè)計Proteus仿真電路,編寫程序?qū)崿F(xiàn)所要求的功能。解:Proteus仿真電路如圖5-7所示。圖5-7

Proteus仿真電路17:4422程序設(shè)計如下:#include<reg52.h>#defineucharunsignedchar#defineuintunsignedintsbitD1=P1^0;sbitD2=P1^1;sbitD3=P1^2;sbitD4=P1^3;sbitK1=P3^4;sbitK2=P3^5;sbitK3=P3^6;sbitK4=P3^7;voidDelayMS(uintx)//延時子程序{ uchart; while(x--) { for(t=120;t>0;t--); }}voidmain()//主程序{P1=0xff;//四個二極管暗while(1){D1=K1;//D1反映K1開關(guān)的狀態(tài)D2=K2;//D2反映K2開關(guān)的狀態(tài)if(K3==0)//K3按下時,D3的狀態(tài)不停地變反{while(K3==0){D3=~D3;}}if(K4==0)//K4按下時,D4的狀態(tài)不停地變反{while(K4==0){D4=~D4;}}DelayMS(10);}}17:44235.3七段數(shù)碼管顯示器接口

七段數(shù)碼管是一種常用的數(shù)字顯示元件,可以用來顯示數(shù)字0~9及相關(guān)符號,它具有功耗低、亮度高、壽命長、尺寸小等優(yōu)點,在家電及工業(yè)控制中有著廣泛的應(yīng)用。17:44245.3.1七段數(shù)碼管簡介外形:由7個條狀的發(fā)光二極管排列而成,可實現(xiàn)數(shù)字“0~9”及少量字符的顯示。為了顯示小數(shù)點,增加了1個點狀的發(fā)光二極管,因此數(shù)碼管實際由8個LED組成,分別把這些發(fā)光二極管命名為“a、b、c、d、e、f、g、dp”,

圖5-87段數(shù)碼管的外形與結(jié)構(gòu)(a)7段數(shù)碼管的外形(b)數(shù)碼管引腳圖(c)共陽極數(shù)碼管結(jié)構(gòu)圖(d)共陰極數(shù)碼管結(jié)構(gòu)圖17:4425共陽極數(shù)碼管是指將所有發(fā)光二極管的陽極接到一起,應(yīng)用時,公共極COM應(yīng)該接到+5V。當(dāng)某一字段發(fā)光二極管的陰極為低電平時,相應(yīng)字段就點亮;當(dāng)某一字段的陰極為高電平時,相應(yīng)字段就不亮。共陽極數(shù)碼管的結(jié)構(gòu)圖如圖5-8(c)所示。圖5-87段數(shù)碼管的外形與結(jié)構(gòu)(b)數(shù)碼管引腳圖(c)共陽極數(shù)碼管結(jié)構(gòu)圖17:4426

圖5-87段數(shù)碼管的外形與結(jié)構(gòu)(b)數(shù)碼管引腳圖

(d)共陰極數(shù)碼管結(jié)構(gòu)圖共陰極數(shù)碼管是指將所有發(fā)光二極管的陰極接到一起,在應(yīng)用時,公共極COM應(yīng)該接到地線GND上,當(dāng)某一字段發(fā)光二極管的陽極為高電平時,相應(yīng)字段就點亮;當(dāng)某一字段的陽極為低電平時,相應(yīng)字段就不亮。共陰極數(shù)碼管的結(jié)構(gòu)圖如圖5-8(d)所示。17:4427一般稱a~g端電平的組合值為段碼,也稱字形碼。

a字段與單片機(jī)數(shù)據(jù)線P0.0對應(yīng),b字段與P0.1對應(yīng)……依此類推。如使用共陽極數(shù)碼管,則某根數(shù)據(jù)線為1表示對應(yīng)字段暗,數(shù)據(jù)為0表示對應(yīng)字段亮;

如使用共陰極數(shù)碼管,某根數(shù)據(jù)線為1,則表示對應(yīng)字段亮,數(shù)據(jù)為0表示對應(yīng)字段暗。如要顯示“0”,共陽極數(shù)碼管的字型編碼應(yīng)為:11000000B(即C0H);共陰極數(shù)碼管的字型編碼應(yīng)為:00111111B(即3FH)。依此類推,可求得數(shù)碼管字形編碼如表5-1所示。(c)共陽極數(shù)碼管(d)共陰極數(shù)碼管數(shù)碼管要正常顯示,就要用驅(qū)動電路來驅(qū)動數(shù)碼管的各個字段,從而顯示出要求的數(shù)字。17:4428表5-1LED顯示器的字形編碼表(段碼表)17:44295.3.2LED顯示器工作原理N個LED顯示塊有N位位選線和8×N根段碼線。4位LED顯示器的結(jié)構(gòu)原理圖如圖5-9所示。

圖5-94位LED顯示器的結(jié)構(gòu)原理圖根據(jù)對段選線和位選線的控制方法的不同,LED顯示器的顯示方法有靜態(tài)顯示和動態(tài)顯示兩種??刂骑@示的字型控制該顯示位的亮或暗17:44301.靜態(tài)顯示方式各位的公共端(位選端)連接在一起(接地或+5V),每位的段碼線(a~dp)分別與一個8位的鎖存器輸出相連,顯示字符一確定,相應(yīng)鎖存器的段碼輸出將維持不變,直到送入另一個段碼為止。4位LED靜態(tài)顯示電路如圖5-10所示。圖5-104位LED靜態(tài)顯示電路17:44312.動態(tài)顯示方式動態(tài)顯示是將所有數(shù)碼管的8個段選碼“a、b、c、d、e、f、g、dp”的同名端連在一起,另外為每個數(shù)碼管的公共端COM增加位選通控制電路,位選通由各自獨立的I/O線控制。4位LED動態(tài)顯示電路如圖5-11所示。圖5-114位LED動態(tài)顯示電路17:4432例5-4用AT89C51單片機(jī)驅(qū)動1個數(shù)碼管,開始時顯示0;以后每過1s,顯示內(nèi)容加1,顯示內(nèi)容從0~9不斷循環(huán),即實現(xiàn)1位秒表的功能。試設(shè)計Proteus仿真電路,編寫程序,并在Proteus仿真電路中驗證。解:Proteus仿真電路如圖5-12所示。圖5-121位秒表的仿真電路與效果圖分析:1個數(shù)碼管與單片機(jī)連接時,可以采用靜態(tài)驅(qū)動方式,即將數(shù)碼管的a、b、c、d、e、f、g端分別與一條I/O口線連接;也可以將它們與BCD碼—七段碼譯碼器的輸出端連接,而BCD碼—七段碼譯碼器的輸入端分別與一條I/O口線連接。這里選擇第一種方法??紤]到單片機(jī)I/O口線的驅(qū)動能力,用74HC573作為驅(qū)動器。圖中的數(shù)碼管為共陰極數(shù)碼管,它與單片機(jī)P0口相連。數(shù)碼管的公共端接地,段碼線分別接P1口的8個端口,P1口用470Ω×7的上拉排電阻接+5V。17:4433程序設(shè)計如下:#include<reg52.h>#include<intrins.h>#defineucharunsignedchar#defineuintunsignedintucharcodeDSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共陰極段碼voidDelayMS(uintxms)//延時子程序{ uinti,j; for(i=xms;i>0;i--) for(j=110;j>0;j--);}voidmain()//主程序{uchari=0;P0=0x00;//P0口開始輸出00H,數(shù)碼管暗while(1){ P0=DSY_CODE[i]; i=(i+1)%10;/*顯示0-9*/ DelayMS(880);//延時1s}}為了實現(xiàn)0~9的循環(huán)顯示,可以通過查表的方式,得到段碼,然后再通過P1口送出,每隔1s循環(huán)一次,周而復(fù)始。17:4434例5-5用單片機(jī)設(shè)計0~99計數(shù)器,具體說,就是用手按動按鍵,每按一次,單片機(jī)計數(shù)一次,并實時將按鍵次數(shù)在兩位數(shù)碼管上顯示出來。試設(shè)計Proteus仿真電路,編寫程序,并在Proteus仿真電路中驗證。解:Proteus仿真電路如圖5-13所示。分析:兩位數(shù)碼管與單片機(jī)相連時,可以采用靜態(tài)顯示方式,也可以采用動態(tài)顯示方式。這里采用動態(tài)顯示方式,將兩個數(shù)

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論