版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第4章并行I/O端口的C51編程C51的并行I/O口結(jié)構(gòu)4.1C51的并行I/O口編程4.2LED數(shù)碼管原理與編程4.3數(shù)碼管動態(tài)顯示原理與編程4.4行列式鍵盤原理與編程4.54.6AT89S51共有4個雙向的8位并行I/O端口:P0、P1、P2和P3,它們的輸出鎖存器屬于特殊功能寄存器。4個端口除了按字節(jié)輸入/輸出外,還可位尋址,便于實(shí)現(xiàn)位控功能。(1)P0口用作地址/數(shù)據(jù)總線當(dāng)AT89S51外擴(kuò)存儲器或I/O時,P0口作為單片機(jī)系統(tǒng)復(fù)用的地址/數(shù)據(jù)總線使用。真正的雙向口,應(yīng)該是具有高電平、低電平和高阻抗輸入3種狀態(tài)的端口。因此,P0口作為地址/數(shù)據(jù)總線使用時是一個真正的雙向端口,簡稱雙向口。4.1AT89S51的并行I/O端口的結(jié)構(gòu)及工作原理當(dāng)P0口不作為系統(tǒng)的地址/數(shù)據(jù)總線使用時,也可作為通用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ù)用口時,是一個真正的雙向口,用作與外部存儲器的連接,輸出低8位地址和輸出/輸入8位數(shù)據(jù)。當(dāng)P0口用作通用I/O口時,由于需在片外接上拉電阻,端口不存在高阻抗(懸浮)狀態(tài),因此是一個準(zhǔn)雙向口。P1口只能作為通用的I/O口使用。P1口由于有內(nèi)部上拉電阻,沒有高阻抗輸入狀態(tài),故為準(zhǔn)雙向口。作為輸出口時,不需要在片外接上拉電阻。P2口是一個雙功能口,作為地址輸出線使用時,P2口可以輸出外部存儲器的高8位地址,與P0口輸出的低8位地址一起構(gòu)成16位地址,可以尋址64KB的地址空間。當(dāng)P2口作為高8位地址輸出口時,輸出鎖存器的內(nèi)容保持不變。P2口作為通用I/O口使用時,P2口為一個準(zhǔn)雙向口。功能與P1口一樣。由于AT89S51的引腳數(shù)目有限,因此在P3口電路中增加了引腳的第二功能P3口內(nèi)部有上拉電阻,不存在高阻抗輸入狀態(tài),為準(zhǔn)雙向口。P1~P3口驅(qū)動LED發(fā)光二極管的問題在實(shí)際應(yīng)用中,常用P1~P3端口驅(qū)動LED發(fā)光二極管,下面來討論P(yáng)1~P3端口與LED發(fā)光二極管的驅(qū)動連接問題。P0口與P1、P2、P3口相比,P0口的驅(qū)動能力較大,每位可驅(qū)動8個LSTTL輸入,而P1、P2、P3口的每一位的驅(qū)動能力,只有P0口的一半。當(dāng)P0口的某位為高電平時,可提供400A的電流;當(dāng)P0口的某位為低電平(0.45V)時,可提供3.2mA的灌電流,如低電平允許提高,灌電流可相應(yīng)加所以,任一個口要想獲得較大的驅(qū)動能力,只能用低電平輸出。例如,使用單片機(jī)的并行端口P1~P3直接驅(qū)動發(fā)光二極管,電路如圖所示。
5(a)不恰當(dāng)?shù)倪B接:高電平驅(qū)動(b)恰當(dāng)?shù)倪B接:低電平驅(qū)動發(fā)光二極管與AT89S51并行口的直接連接由于P1~P3口內(nèi)部有30kΩ左右的上拉電阻,如果高電平輸出,則強(qiáng)行從P1、P2和P3口輸出的電流Id會造成單片機(jī)端口的損壞,如圖(a)所示。如果端口引腳為低電平,能使電流Id從單片機(jī)的外部流入內(nèi)部,則將大大增加流過的電流值,如圖(b)所示。所以,當(dāng)P1~P3端口驅(qū)動LED發(fā)光二極管時,應(yīng)該采用低電平驅(qū)動。7輸出單元:
發(fā)光二極管(LightEmittingDiode)——基本輸出元件低電平驅(qū)動限流電阻R=100Ω~1kΩ高電平驅(qū)動灌電流拉電流基本輸入輸出單元輸入單元:
按鈕(Button)或開關(guān)(Switch)——基本輸入元件
P0口為漏極開路結(jié)構(gòu)——需要外接上拉電阻當(dāng)按鍵未按下壓時,Px.n端口為高電平;按壓按鍵后為低電平。4.2.1從左到右的流水燈的制作片內(nèi)I/O端口作為輸出使用時,最常用的應(yīng)用是控制相應(yīng)的I/O引腳上的LED點(diǎn)亮與熄滅。【例4-1】
如圖所示,8個發(fā)光二極管LED0~LED7經(jīng)限流電阻分別接至P1口的P2.0~P2.7引腳上,陽極共同接高電平。編程來實(shí)現(xiàn)發(fā)光二極管的從左到右的流水點(diǎn)亮,即按照LED0→LED1→┉→LED7的順序,每次點(diǎn)亮一個發(fā)光二極管,延時一段時間后熄滅這個發(fā)光二極管,然后點(diǎn)亮下一個發(fā)光二極管,重復(fù)循環(huán)。參考程序如下:
104.2并行I/O端口的C51編程舉例8個發(fā)光二極管與并行口P2的連接#include<reg51.h>#include<intrins.h> /*包含移位函數(shù)的頭文件*/#defineucharunsignedchar #defineuintunsignedint
voiddelay(uinti) /*延時函數(shù)*/{ uintt; while(i--); { for(t=50000;t>0;t--);//循環(huán)延時
}}voidmain() /*主程序*/{ P2=0xfe; while(1) { P2=_crol_(P2,1);/*C51函數(shù)庫中的左移函數(shù),P2中的數(shù)據(jù)循環(huán)左移1位*/ delay(2000);/*500為延時參數(shù),可根據(jù)實(shí)際需要調(diào)整*/ }}8個發(fā)光二極管與并行口P2的連接實(shí)例2獨(dú)立按鍵識別【要求】采用獨(dú)立按鍵方式實(shí)現(xiàn)下述功能:開機(jī)時LED全熄,然后根據(jù)按鍵動作使相應(yīng)燈亮,并將亮燈狀態(tài)保持到按壓其它鍵時為止。獨(dú)立按鍵——每個按鍵都彼此獨(dú)立地各占有一位I/O口線。特點(diǎn)是電路簡單,但占用I/O口線較多。①按鍵的閉合電平為0,但LED的驅(qū)動電平為1,故不能直接將P0口的狀態(tài)送到P1口,而應(yīng)使其先取反再送出;②為使按鍵抬起后LED能保持先前的點(diǎn)亮狀態(tài),需要在按鍵未壓下期間禁止向P2輸出P0狀態(tài)值?!痉治觥繀⒖汲绦蛉缦拢?/p>
“取反”操作的優(yōu)先級高于“與”操作voidmain(){charkey=0; //定義按鍵變量P2=0; //初始狀態(tài)為燈全滅while(1){key=~P0&0x0f; //讀取按鍵狀態(tài),高4位清零if(key!=0)P2=key;//有按鍵動作時,P0狀態(tài)值送P2}}編程界面和運(yùn)行界面分別如下圖實(shí)例1X運(yùn)行效果實(shí)例2鍵控流水燈
【要求】K1為“啟動鍵”,首次按壓K1可產(chǎn)生“自下向上”的流水燈運(yùn)動;K2為“停止鍵”,按壓K2可終止流水燈的運(yùn)動;
K3和K4為“方向鍵”,分別產(chǎn)生“自上向下”和“自下向上”運(yùn)動。K1K2K3K4思路分析:根據(jù)鍵值修改標(biāo)志位,根據(jù)標(biāo)志位控制燈狀態(tài)總體關(guān)系流程圖鍵值:按壓K1——xxxx1110B按壓K2——xxxx1101B按壓K3——xxxx1011B按壓K4——xxxx0111B無按鍵——xxxx1111B按鍵動作判斷——(P0&0x0f)是否等于0x0f?若是,說明無按鍵動作,反之則有按鍵動作?!?x0e→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];}//↓移動for(i=3;i>=0;i--){P2=led[i];}//↑移動實(shí)例2原理圖與程序界面圖程序運(yùn)行效果4.3LED數(shù)碼管原理與編程
LED顯示元件——人機(jī)交互輸出設(shè)備,其作用是指示中間運(yùn)行結(jié)果與運(yùn)行狀態(tài)。點(diǎn)式字段式LED光柱式LED的類型com為公共端共陽極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口連接一個共陰極數(shù)碼管,使之循環(huán)顯示0~9數(shù)字。分析:將顯示碼循環(huán)輸出到P0口即可實(shí)現(xiàn)循環(huán)顯示。但由于數(shù)字0~9的顯示段碼沒有規(guī)律可循,需要采取查表方式進(jìn)行操作:循環(huán)10次?N
延時循環(huán)指針i賦值(10)P0←數(shù)組[i]Y①將顯示碼按序存放在一個數(shù)組中,順序號與代表的顯示字符相對應(yīng)。(如,charled_mod[]={x1,x2,….,xn)②通過循環(huán)變量指定待送出的數(shù)組元素參考程序運(yùn)行結(jié)果實(shí)例5計數(shù)顯示器統(tǒng)計按鍵次數(shù)并以十進(jìn)制形式顯示,按鍵次數(shù)大于99后重新由0開始計數(shù)。個位LED接P2口,十位LED接P0口(共陰型)按鈕接P3.7口線,按壓時為0電平編程分析:問題:按鍵壓下時可能被連續(xù)計數(shù)如何避免連續(xù)計數(shù)?初始化:P2=P0=table[0];解決辦法:取模運(yùn)算(%10)→個位整除10運(yùn)算(/10)→十位P2=table[count%10];P
0=table[count/10];顯示輸出:如何將計數(shù)值拆成兩個獨(dú)立的數(shù)?參考程序程序運(yùn)行效果
4.4數(shù)碼管動態(tài)顯示原理與編程
兩種顯示接口:靜態(tài)顯示接口和動態(tài)顯示接口靜態(tài)顯示接口:一個數(shù)碼管的引腳獨(dú)立占據(jù)一根I/O口線。優(yōu)點(diǎn):被顯示數(shù)據(jù)只要送入并行口后就不再需要CPU干預(yù),因而顯示效果穩(wěn)定。缺點(diǎn):占用資源較多動態(tài)顯示接口:所有數(shù)碼管的段碼線對應(yīng)并聯(lián)接在一個并行口上,而每位數(shù)碼管的公共端分別由一位I/O線控制;由并口輸出的顯示碼可被所有數(shù)碼管收到,但只有滿足導(dǎo)通條件的數(shù)碼管可以被驅(qū)動。工作原理:采用快速切換方式(如10ms),每一時刻只有一只數(shù)碼管導(dǎo)通工作。利用視力暫留特性,可獲得連續(xù)顯示效果。優(yōu)點(diǎn):占用資源較少缺點(diǎn):占用機(jī)時較多(需要CPU隨時刷新顯示值)實(shí)例6數(shù)碼管動態(tài)顯示采用共陰極動態(tài)LED顯示原理,實(shí)現(xiàn)如下功能:SW1向下?lián)軙r顯示字符“L2”,向上撥時顯示字符“H3”。分析:Proteus中的雙聯(lián)LED數(shù)碼管相當(dāng)于兩個并聯(lián)的數(shù)碼管。7SEG-MPX2-CC-BLUEBlue,2Digit,7-segmentCathodeDisplayA-G→“0x38”,1#→“0”,2#→“1”A-G→“0x5b”,1#→“1”,2#→“0”P2←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如果不考慮開關(guān)switch,動態(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}開關(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行列式鍵盤原理與編程
獨(dú)立式鍵盤的電路簡單,易于編程,但占用的I/O口線較多,當(dāng)需要較多按鍵時可能產(chǎn)生I/O資源緊張問題。獨(dú)立式鍵盤電路行列式鍵盤——將I/O口分為行線和列線,按鍵跨接在行線和列線上,列線通過上拉電阻接正電源。4×4行列式鍵盤7407——六高壓輸出緩沖器/驅(qū)動器行列式鍵盤的特點(diǎn):占用I/O口線少,但軟件過程復(fù)雜。①鍵盤掃描
同時將各行電平置1,分別將各列電平置0。掃描碼:key_scan[]={0xef,0xdf,0xbf,0x7f};寫P3: P3=key_scan[i];鍵盤掃描原理(以P3口接4×4鍵盤為例)第一次11101111B第二次11011111B第三次10111111B第四次01111111B=0xef=0xdf=0xbf=0x7f(P3&0x0f)=0x0f
→無鍵壓下
(P3&0x0f)≠0x0f
→有鍵壓下
②
按鍵閉合狀態(tài)判斷0#:11101110B——0xee1#:
11011110B——0xdeF#:
01110111B——0x77按鍵閉合前后,所在行線端口電平反轉(zhuǎn);讀P3后,若發(fā)現(xiàn)其低4位為f,說明無鍵壓下;反之則相反。鍵值——
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 工商合同規(guī)范管理科工作職責(zé)
- 杭州市事業(yè)單位聘用合同管理辦法
- 《氬弧管管水平固定》課件
- 《母親節(jié)促銷方案》課件
- 2025年長春貨運(yùn)從業(yè)資格證考試題及答案大全
- 2025年哈爾濱貨運(yùn)從業(yè)資格考試題庫答案大全
- 2025年和田貨運(yùn)上崗證考試題庫答案
- 第25課《活板》知識點(diǎn)梳理及練習(xí)-2022-2023學(xué)年七年級語文下冊古詩文專題期中期末復(fù)習(xí)(部編版)教師版
- 精密制造防火封堵
- 蘇科版九年級物理上冊一課一測-14.1電阻
- 自動控制原理全套ppt課件(完整版)
- GB 38508-2020 清洗劑揮發(fā)性有機(jī)化合物含量限值
- 吊裝作業(yè)施工方案(模板)
- 初中綜合實(shí)踐課程標(biāo)準(zhǔn)
- 日本江崎格力高歷史
- 初物管理辦法及規(guī)定
- 代扣服務(wù)協(xié)議
- SPSS統(tǒng)計軟件在考試成績分析中的應(yīng)用
- 某燃煤采暖鍋爐煙氣除塵系統(tǒng)設(shè)計1
- 中心試驗(yàn)室標(biāo)準(zhǔn)化管理辦法
- 龍王廟煤礦消防工作匯報
評論
0/150
提交評論