第4章并行IO口編程_第1頁(yè)
第4章并行IO口編程_第2頁(yè)
第4章并行IO口編程_第3頁(yè)
第4章并行IO口編程_第4頁(yè)
第4章并行IO口編程_第5頁(yè)
已閱讀5頁(yè),還剩56頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第4章并行I/O端口的C51編程C51的并行I/O口結(jié)構(gòu)4.1C51的并行I/O口編程4.2LED數(shù)碼管原理與編程4.3數(shù)碼管動(dòng)態(tài)顯示原理與編程4.4行列式鍵盤(pán)原理與編程4.54.6AT89S51共有4個(gè)雙向的8位并行I/O端口:P0、P1、P2和P3,它們的輸出鎖存器屬于特殊功能寄存器。4個(gè)端口除了按字節(jié)輸入/輸出外,還可位尋址,便于實(shí)現(xiàn)位控功能。(1)P0口用作地址/數(shù)據(jù)總線(xiàn)當(dāng)AT89S51外擴(kuò)存儲(chǔ)器或I/O時(shí),P0口作為單片機(jī)系統(tǒng)復(fù)用的地址/數(shù)據(jù)總線(xiàn)使用。真正的雙向口,應(yīng)該是具有高電平、低電平和高阻抗輸入3種狀態(tài)的端口。因此,P0口作為地址/數(shù)據(jù)總線(xiàn)使用時(shí)是一個(gè)真正的雙向端口,簡(jiǎn)稱(chēng)雙向口。4.1AT89S51的并行I/O端口的結(jié)構(gòu)及工作原理當(dāng)P0口不作為系統(tǒng)的地址/數(shù)據(jù)總線(xiàn)使用時(shí),也可作為通用I/O使用。須外接上拉電阻才能有高電平輸出;(2)P0口用作通用I/O口(3)P0口的特點(diǎn)P0口有如下特點(diǎn):P0口為雙功能口——地址/數(shù)據(jù)復(fù)用口和通用I/O口。當(dāng)P0口用作地址/數(shù)據(jù)復(fù)用口時(shí),是一個(gè)真正的雙向口,用作與外部存儲(chǔ)器的連接,輸出低8位地址和輸出/輸入8位數(shù)據(jù)。當(dāng)P0口用作通用I/O口時(shí),由于需在片外接上拉電阻,端口不存在高阻抗(懸?。顟B(tài),因此是一個(gè)準(zhǔn)雙向口。P1口只能作為通用的I/O口使用。P1口由于有內(nèi)部上拉電阻,沒(méi)有高阻抗輸入狀態(tài),故為準(zhǔn)雙向口。作為輸出口時(shí),不需要在片外接上拉電阻。P2口是一個(gè)雙功能口,作為地址輸出線(xiàn)使用時(shí),P2口可以輸出外部存儲(chǔ)器的高8位地址,與P0口輸出的低8位地址一起構(gòu)成16位地址,可以尋址64KB的地址空間。當(dāng)P2口作為高8位地址輸出口時(shí),輸出鎖存器的內(nèi)容保持不變。P2口作為通用I/O口使用時(shí),P2口為一個(gè)準(zhǔn)雙向口。功能與P1口一樣。由于AT89S51的引腳數(shù)目有限,因此在P3口電路中增加了引腳的第二功能P3口內(nèi)部有上拉電阻,不存在高阻抗輸入狀態(tài),為準(zhǔn)雙向口。P1~P3口驅(qū)動(dòng)LED發(fā)光二極管的問(wèn)題在實(shí)際應(yīng)用中,常用P1~P3端口驅(qū)動(dòng)LED發(fā)光二極管,下面來(lái)討論P(yáng)1~P3端口與LED發(fā)光二極管的驅(qū)動(dòng)連接問(wèn)題。P0口與P1、P2、P3口相比,P0口的驅(qū)動(dòng)能力較大,每位可驅(qū)動(dòng)8個(gè)LSTTL輸入,而P1、P2、P3口的每一位的驅(qū)動(dòng)能力,只有P0口的一半。當(dāng)P0口的某位為高電平時(shí),可提供400A的電流;當(dāng)P0口的某位為低電平(0.45V)時(shí),可提供3.2mA的灌電流,如低電平允許提高,灌電流可相應(yīng)加所以,任一個(gè)口要想獲得較大的驅(qū)動(dòng)能力,只能用低電平輸出。例如,使用單片機(jī)的并行端口P1~P3直接驅(qū)動(dòng)發(fā)光二極管,電路如圖所示。

5(a)不恰當(dāng)?shù)倪B接:高電平驅(qū)動(dòng)(b)恰當(dāng)?shù)倪B接:低電平驅(qū)動(dòng)發(fā)光二極管與AT89S51并行口的直接連接由于P1~P3口內(nèi)部有30kΩ左右的上拉電阻,如果高電平輸出,則強(qiáng)行從P1、P2和P3口輸出的電流Id會(huì)造成單片機(jī)端口的損壞,如圖(a)所示。如果端口引腳為低電平,能使電流Id從單片機(jī)的外部流入內(nèi)部,則將大大增加流過(guò)的電流值,如圖(b)所示。所以,當(dāng)P1~P3端口驅(qū)動(dòng)LED發(fā)光二極管時(shí),應(yīng)該采用低電平驅(qū)動(dòng)。7輸出單元:

發(fā)光二極管(LightEmittingDiode)——基本輸出元件低電平驅(qū)動(dòng)限流電阻R=100Ω~1kΩ高電平驅(qū)動(dòng)灌電流拉電流基本輸入輸出單元輸入單元:

按鈕(Button)或開(kāi)關(guān)(Switch)——基本輸入元件

P0口為漏極開(kāi)路結(jié)構(gòu)——需要外接上拉電阻當(dāng)按鍵未按下壓時(shí),Px.n端口為高電平;按壓按鍵后為低電平。4.2.1從左到右的流水燈的制作片內(nèi)I/O端口作為輸出使用時(shí),最常用的應(yīng)用是控制相應(yīng)的I/O引腳上的LED點(diǎn)亮與熄滅。【例4-1】

如圖所示,8個(gè)發(fā)光二極管LED0~LED7經(jīng)限流電阻分別接至P1口的P2.0~P2.7引腳上,陽(yáng)極共同接高電平。編程來(lái)實(shí)現(xiàn)發(fā)光二極管的從左到右的流水點(diǎn)亮,即按照LED0→LED1→┉→LED7的順序,每次點(diǎn)亮一個(gè)發(fā)光二極管,延時(shí)一段時(shí)間后熄滅這個(gè)發(fā)光二極管,然后點(diǎn)亮下一個(gè)發(fā)光二極管,重復(fù)循環(huán)。參考程序如下:

104.2并行I/O端口的C51編程舉例8個(gè)發(fā)光二極管與并行口P2的連接#include<reg51.h>#include<intrins.h> /*包含移位函數(shù)的頭文件*/#defineucharunsignedchar #defineuintunsignedint

voiddelay(uinti) /*延時(shí)函數(shù)*/{ uintt; while(i--); { for(t=50000;t>0;t--);//循環(huán)延時(shí)

}}voidmain() /*主程序*/{ P2=0xfe; while(1) { P2=_crol_(P2,1);/*C51函數(shù)庫(kù)中的左移函數(shù),P2中的數(shù)據(jù)循環(huán)左移1位*/ delay(2000);/*500為延時(shí)參數(shù),可根據(jù)實(shí)際需要調(diào)整*/ }}8個(gè)發(fā)光二極管與并行口P2的連接實(shí)例2獨(dú)立按鍵識(shí)別【要求】采用獨(dú)立按鍵方式實(shí)現(xiàn)下述功能:開(kāi)機(jī)時(shí)LED全熄,然后根據(jù)按鍵動(dòng)作使相應(yīng)燈亮,并將亮燈狀態(tài)保持到按壓其它鍵時(shí)為止。獨(dú)立按鍵——每個(gè)按鍵都彼此獨(dú)立地各占有一位I/O口線(xiàn)。特點(diǎn)是電路簡(jiǎn)單,但占用I/O口線(xiàn)較多。①按鍵的閉合電平為0,但LED的驅(qū)動(dòng)電平為1,故不能直接將P0口的狀態(tài)送到P1口,而應(yīng)使其先取反再送出;②為使按鍵抬起后LED能保持先前的點(diǎn)亮狀態(tài),需要在按鍵未壓下期間禁止向P2輸出P0狀態(tài)值?!痉治觥繀⒖汲绦蛉缦拢?/p>

“取反”操作的優(yōu)先級(jí)高于“與”操作voidmain(){charkey=0; //定義按鍵變量P2=0; //初始狀態(tài)為燈全滅while(1){key=~P0&0x0f; //讀取按鍵狀態(tài),高4位清零if(key!=0)P2=key;//有按鍵動(dòng)作時(shí),P0狀態(tài)值送P2}}編程界面和運(yùn)行界面分別如下圖實(shí)例1X運(yùn)行效果實(shí)例2鍵控流水燈

【要求】K1為“啟動(dòng)鍵”,首次按壓K1可產(chǎn)生“自下向上”的流水燈運(yùn)動(dòng);K2為“停止鍵”,按壓K2可終止流水燈的運(yùn)動(dòng);

K3和K4為“方向鍵”,分別產(chǎn)生“自上向下”和“自下向上”運(yùn)動(dòng)。K1K2K3K4思路分析:根據(jù)鍵值修改標(biāo)志位,根據(jù)標(biāo)志位控制燈狀態(tài)總體關(guān)系流程圖鍵值:按壓K1——xxxx1110B按壓K2——xxxx1101B按壓K3——xxxx1011B按壓K4——xxxx0111B無(wú)按鍵——xxxx1111B按鍵動(dòng)作判斷——(P0&0x0f)是否等于0x0f?若是,說(shuō)明無(wú)按鍵動(dòng)作,反之則有按鍵動(dòng)作。→0x0e→0x0d→0x0b→0x07→0x0f獲取按鍵狀態(tài)修改方向和啟停標(biāo)志值亮燈P2輸出碼:xxxx0001xxxx0010xxxx0100xxxx1000D1~D4循環(huán)方向控制charled[]={0x01,0x02,0x04,0x08};for(i=0;i<=3;i++){P2=led[i];}//↓移動(dòng)for(i=3;i>=0;i--){P2=led[i];}//↑移動(dòng)實(shí)例2原理圖與程序界面圖程序運(yùn)行效果4.3LED數(shù)碼管原理與編程

LED顯示元件——人機(jī)交互輸出設(shè)備,其作用是指示中間運(yùn)行結(jié)果與運(yùn)行狀態(tài)。點(diǎn)式字段式LED光柱式LED的類(lèi)型com為公共端共陽(yáng)極LED共陰極LED引腳配置七段式LED顯示器(7-SegmentDisplay)不同顯示字符采需用不同LED組合關(guān)系實(shí)現(xiàn)(顯示碼,字模)以共陰極為例,部分字符的顯示碼(字模)為:七段LED數(shù)碼管的標(biāo)準(zhǔn)顯示字符為0~9,A~F顯示字符顯示碼(共陰)其它字符:——00111000B=0x38“L”字符的顯示碼“H”字符的顯示碼——01110110B=0x76實(shí)例4LED數(shù)碼管顯示在P0口連接一個(gè)共陰極數(shù)碼管,使之循環(huán)顯示0~9數(shù)字。分析:將顯示碼循環(huán)輸出到P0口即可實(shí)現(xiàn)循環(huán)顯示。但由于數(shù)字0~9的顯示段碼沒(méi)有規(guī)律可循,需要采取查表方式進(jìn)行操作:循環(huán)10次?N

延時(shí)循環(huán)指針i賦值(10)P0←數(shù)組[i]Y①將顯示碼按序存放在一個(gè)數(shù)組中,順序號(hào)與代表的顯示字符相對(duì)應(yīng)。(如,charled_mod[]={x1,x2,….,xn)②通過(guò)循環(huán)變量指定待送出的數(shù)組元素參考程序運(yùn)行結(jié)果實(shí)例5計(jì)數(shù)顯示器統(tǒng)計(jì)按鍵次數(shù)并以十進(jìn)制形式顯示,按鍵次數(shù)大于99后重新由0開(kāi)始計(jì)數(shù)。個(gè)位LED接P2口,十位LED接P0口(共陰型)按鈕接P3.7口線(xiàn),按壓時(shí)為0電平編程分析:?jiǎn)栴}:按鍵壓下時(shí)可能被連續(xù)計(jì)數(shù)如何避免連續(xù)計(jì)數(shù)?初始化:P2=P0=table[0];解決辦法:取模運(yùn)算(%10)→個(gè)位整除10運(yùn)算(/10)→十位P2=table[count%10];P

0=table[count/10];顯示輸出:如何將計(jì)數(shù)值拆成兩個(gè)獨(dú)立的數(shù)?參考程序程序運(yùn)行效果

4.4數(shù)碼管動(dòng)態(tài)顯示原理與編程

兩種顯示接口:靜態(tài)顯示接口和動(dòng)態(tài)顯示接口靜態(tài)顯示接口:一個(gè)數(shù)碼管的引腳獨(dú)立占據(jù)一根I/O口線(xiàn)。優(yōu)點(diǎn):被顯示數(shù)據(jù)只要送入并行口后就不再需要CPU干預(yù),因而顯示效果穩(wěn)定。缺點(diǎn):占用資源較多動(dòng)態(tài)顯示接口:所有數(shù)碼管的段碼線(xiàn)對(duì)應(yīng)并聯(lián)接在一個(gè)并行口上,而每位數(shù)碼管的公共端分別由一位I/O線(xiàn)控制;由并口輸出的顯示碼可被所有數(shù)碼管收到,但只有滿(mǎn)足導(dǎo)通條件的數(shù)碼管可以被驅(qū)動(dòng)。工作原理:采用快速切換方式(如10ms),每一時(shí)刻只有一只數(shù)碼管導(dǎo)通工作。利用視力暫留特性,可獲得連續(xù)顯示效果。優(yōu)點(diǎn):占用資源較少缺點(diǎn):占用機(jī)時(shí)較多(需要CPU隨時(shí)刷新顯示值)實(shí)例6數(shù)碼管動(dòng)態(tài)顯示采用共陰極動(dòng)態(tài)LED顯示原理,實(shí)現(xiàn)如下功能:SW1向下?lián)軙r(shí)顯示字符“L2”,向上撥時(shí)顯示字符“H3”。分析:Proteus中的雙聯(lián)LED數(shù)碼管相當(dāng)于兩個(gè)并聯(lián)的數(shù)碼管。7SEG-MPX2-CC-BLUEBlue,2Digit,7-segmentCathodeDisplayA-G→“0x38”,1#→“0”,2#→“1”A-G→“0x5b”,1#→“1”,2#→“0”P(pán)2←led_mode[0],P3←xxxxxx10B=2P2←led_mode[1],P3←xxxxxx01B=1led_mode[]={0x38,0x5b}led_point=0P2=led_mode[led_point]led_point=1-led_pointP3=2-led_point如果不考慮開(kāi)關(guān)switch,動(dòng)態(tài)顯示“L2”的程序可以如下:;//LED“指針”//顯示字模led_point=0P2=led_mode[led_point]led_point=1-led_pointP3=2-led_pointA-G→“0x76”,1#→“0”,2#→“1”A-G→“0x4f”,1#→“1”,2#→“0”字符數(shù)組led_mode[]={0x38,0x5b,0x76,0x4f}開(kāi)關(guān)狀態(tài)變量

switch_sta復(fù)合指針變量led_point+switch_sta顯示字符L2H3switch_sta+led_point0123led_point

0101switch_sta0022P3=2-led_point2121led_point=0P2=led_mode[led_point+switch_sta]led_point=1-led_pointP3=2-led_pointswitch_sta=0,2完整的主函數(shù)#include<REG51.H>charled_mod[]={0x38,0x5B,0x76,0x4F}; voiddelay(unsigned

inttime);sbitP17=P1^7;voidmain(){charled_point=0,switch_sta=0;while(1){ if(P17==1)switch_sta=2;

elseswitch_sta=0;

P3=2-led_point;

P2=led_mod[switch_sta+led_point];

led_point=1-led_point;

delay(30); }}led_point=0P2=led_mode[led_point+switch_sta]led_point=1-led_pointP3=2-led_pointswitch_sta=0,2編程界面運(yùn)行效果圖4.5行列式鍵盤(pán)原理與編程

獨(dú)立式鍵盤(pán)的電路簡(jiǎn)單,易于編程,但占用的I/O口線(xiàn)較多,當(dāng)需要較多按鍵時(shí)可能產(chǎn)生I/O資源緊張問(wèn)題。獨(dú)立式鍵盤(pán)電路行列式鍵盤(pán)——將I/O口分為行線(xiàn)和列線(xiàn),按鍵跨接在行線(xiàn)和列線(xiàn)上,列線(xiàn)通過(guò)上拉電阻接正電源。4×4行列式鍵盤(pán)7407——六高壓輸出緩沖器/驅(qū)動(dòng)器行列式鍵盤(pán)的特點(diǎn):占用I/O口線(xiàn)少,但軟件過(guò)程復(fù)雜。①鍵盤(pán)掃描

同時(shí)將各行電平置1,分別將各列電平置0。掃描碼:key_scan[]={0xef,0xdf,0xbf,0x7f};寫(xiě)P3: P3=key_scan[i];鍵盤(pán)掃描原理(以P3口接4×4鍵盤(pán)為例)第一次11101111B第二次11011111B第三次10111111B第四次01111111B=0xef=0xdf=0xbf=0x7f(P3&0x0f)=0x0f

→無(wú)鍵壓下

(P3&0x0f)≠0x0f

→有鍵壓下

按鍵閉合狀態(tài)判斷0#:11101110B——0xee1#:

11011110B——0xdeF#:

01110111B——0x77按鍵閉合前后,所在行線(xiàn)端口電平反轉(zhuǎn);讀P3后,若發(fā)現(xiàn)其低4位為f,說(shuō)明無(wú)鍵壓下;反之則相反。鍵值——

溫馨提示

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

評(píng)論

0/150

提交評(píng)論