51單片機(jī)實(shí)戰(zhàn)指南-51單片機(jī)IO口簡單應(yīng)用_第1頁
51單片機(jī)實(shí)戰(zhàn)指南-51單片機(jī)IO口簡單應(yīng)用_第2頁
51單片機(jī)實(shí)戰(zhàn)指南-51單片機(jī)IO口簡單應(yīng)用_第3頁
51單片機(jī)實(shí)戰(zhàn)指南-51單片機(jī)IO口簡單應(yīng)用_第4頁
51單片機(jī)實(shí)戰(zhàn)指南-51單片機(jī)IO口簡單應(yīng)用_第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

51單片機(jī)I/O口簡單應(yīng)用51單片機(jī)實(shí)戰(zhàn)指南本章內(nèi)容:2單片機(jī)最小應(yīng)用系統(tǒng)1閃爍燈的制作2廣告燈的制作3單片機(jī)I/O口控制電路是單片機(jī)應(yīng)用系統(tǒng)中最基本、最簡單的應(yīng)用。制作單片機(jī)輸出控制電路是學(xué)習(xí)單片機(jī)的重要一步,掌握單片機(jī)I/O口應(yīng)用將對單片機(jī)的學(xué)習(xí)有重要意義。通過對單片機(jī)引腳和C51編程基礎(chǔ)有了一定的認(rèn)識,那么如何讓一個單片機(jī)“跑”起來呢?2.1單片機(jī)最小應(yīng)用系統(tǒng)單片機(jī)最小系統(tǒng)是指維持單片機(jī)正常工作所必需的電路連接。對于51單片機(jī),將時鐘電路(晶振電路)和復(fù)位電路接入即可構(gòu)成單片機(jī)最小應(yīng)用系統(tǒng),該系統(tǒng)接+5V電源,配以相應(yīng)的程序就能夠獨(dú)立工作,完成一定的功能。圖2-1單片機(jī)最小應(yīng)用系統(tǒng)2.1單片機(jī)最小應(yīng)用系統(tǒng)1.電源單片機(jī)的38腳接電源+5V端,16腳(GND)接電源地端。跨接在電源和地之間的0.1uF電容C13稱為濾波電容,主要是濾除電源中的雜波及交流成分。2.時鐘電路單片機(jī)時鐘電路是單片機(jī)的核心部分,為單片機(jī)內(nèi)部各功能部件提供一個高穩(wěn)定性的時鐘脈沖信號,以便為單片機(jī)執(zhí)行各種動作和指令提供基準(zhǔn)脈沖信號。圖2-1中的晶振Y3(其值為11.0592MHz)和瓷片電容C12、C15(其值為22uF)與單片機(jī)內(nèi)部電路構(gòu)成單片機(jī)的時鐘電路。2.1單片機(jī)最小應(yīng)用系統(tǒng)3.復(fù)位電路使單片機(jī)內(nèi)各寄存器的值變?yōu)槌跏紶顟B(tài)的操作稱為復(fù)位。例如,復(fù)位后單片機(jī)會從程序的第一條指令運(yùn)行,避免出現(xiàn)混亂。單片機(jī)復(fù)位的條件:當(dāng)9腳(RST)出現(xiàn)高電平并保持兩個機(jī)器周期以上時,單片機(jī)內(nèi)部就會執(zhí)行復(fù)位操作。圖2-1中采用了上電與按鍵均有效的復(fù)位,電容C14為電解電容,取值為10uF;電阻R22阻值為10kΩ。2.1單片機(jī)最小應(yīng)用系統(tǒng)2.2閃爍燈的制作在日常生活中,有各種各樣的閃爍燈,有的應(yīng)用于娛樂場所,有的應(yīng)用于店面等的裝飾,有的起警示作用。如舞臺燈、汽車轉(zhuǎn)向燈、十字路口的黃閃燈等。在單片機(jī)控制系統(tǒng)中,通過I/O口進(jìn)行開關(guān)量的控制占用較大的比重,如LED發(fā)光二極管的亮滅、電動機(jī)的啟停等控制都屬于單片機(jī)的開關(guān)量輸出控制。LED發(fā)光二極管是幾乎所有的單片機(jī)系統(tǒng)都要用到的顯示器件,常見的發(fā)光二極管主要有紅色、綠色、黃色等單色發(fā)光二極管,另外還有雙色的二極管。2.2閃爍燈的制作驅(qū)動LED可分為低電平點(diǎn)亮和高電平點(diǎn)亮兩種。由于P1~P3口的內(nèi)部上拉電阻較大,為20~40k,屬于“弱上拉”,因此P1~P3口輸出高電平電流很小(為30~60uA)。而輸出低電平時,下拉MOS管導(dǎo)通,可吸收1.6~15mA的灌電流,負(fù)載能力強(qiáng)。因此在設(shè)計(jì)中,一般采用低電平驅(qū)動方式。2.2.1硬件電路設(shè)計(jì)在設(shè)計(jì)單片機(jī)電路的時候,單片機(jī)的IO口數(shù)量是有限的,有時并滿足不了設(shè)計(jì)需求,比如STC89C52一共有32個IO口,但為了控制更多的器件,就要使用一些外圍的數(shù)字芯片,這種數(shù)字芯片由簡單的輸入邏輯來控制輸出邏輯,比如74HC138(三八譯碼器),在如圖2-2的LED電路圖設(shè)計(jì)中就使用了74HC138芯片。2.2.1硬件電路設(shè)計(jì)圖2-2發(fā)光二極管控制電路2.2.2單片機(jī)C語言編程的基本方法#include<reg52.h>//52系列單片機(jī)頭文件sbit A0=P1^5;//將P1.5定義為74HC138的A0引腳sbit A1=P1^6;//將P1.6定義為74HC138的A1引腳sbit A2=P1^7;//將P1.7定義為74HC138的A2引腳intmain(void) //主程序main函數(shù){

while(1)

//主程序中設(shè)置死循環(huán)程序,保證周而復(fù)始運(yùn)行 { /*所有控制程序?qū)懺诖藚^(qū)域(while循環(huán)內(nèi))*/A2=A1=A0=0;//使LED燈的總開關(guān)三極管Q6導(dǎo)通,+5V加到LED燈組 P0=0xfe;//點(diǎn)亮一個發(fā)光二極管 }}注釋2.2.3程序設(shè)計(jì)點(diǎn)亮發(fā)光二極管欲點(diǎn)亮某只二極管,只需使與其相連的口線輸出低電平即可。點(diǎn)亮從高位到低位的LED10、LED8、LED6、LED4,實(shí)現(xiàn)的方法有字節(jié)操作和位操作兩種。方法一(字節(jié)操作)#include<reg52.h> //52單片機(jī)頭文件#defineledP0 //將P0口定義為led后面就可以使用led代替P0口sbit A0=P1^5; //將P1.5定義為74HC138的A0引腳sbit A1=P1^6; //將P1.6定義為74HC138的A1引腳sbit A2=P1^7; //將P1.7定義為74HC138的A2引腳intmain(void) 主程序main函數(shù){ while(1) //主程序中設(shè)置死循環(huán)程序,保證周而復(fù)始運(yùn)行 {

A2=A1=A0=0;//使LED燈的總開關(guān)三極管Q6導(dǎo)通,+5V加到LED燈組 led=0x55;//即將二進(jìn)制數(shù)01010101賦給P0 }}注釋2.2.3程序設(shè)計(jì)方法二(位操作)#include<reg52.h>//52單片機(jī)頭文件#defineledP0 //將P0口定義為led后面就可以使用led代替P0口sbit A0=P1^5;//將P1.5定義為74HC138的A0引腳sbit A1=P1^6;//將P1.6定義為74HC138的A1引腳sbit A2=P1^7;//將P1.7定義為74HC138的A2引腳sbitLed10=P0^7;//定義P0.7名字為led7sbitLed8=P0^5;sbitLed6=P0^3;sbitLed4=P0^1;intmain(void) //主程序main函數(shù){while(1) //主程序中設(shè)置死循環(huán)程序,保證周而復(fù)始運(yùn)行{ A2=A1=A0=0;//使LED燈的總開關(guān)三極管Q6導(dǎo)通,+5V加到LED燈組P0=0xff;//全滅。此語句可省略,因復(fù)位后P0即為0xffLed10=0;//點(diǎn)亮一個LEDLed8=0;Led6=0;Led4=0;}}注釋2.讓LED燈閃起來2.2.3程序設(shè)計(jì)欲使某位二極管閃爍,可先點(diǎn)亮該位,再熄滅,然后循環(huán)。#include<reg52.h>//52單片機(jī)頭文件sbit A0=P1^5;//將P1.5定義為74HC138的A0引腳sbit A1=P1^6;//將P1.6定義為74HC138的A1引腳sbit A2=P1^7;//將P1.7定義為74HC138的A2引腳sbitLed10=P0^7;//定義P0.7名字為led7intmain(void) //主程序main函數(shù){while(1) //主程序中設(shè)置死循環(huán)程序,保證周而復(fù)始運(yùn)行{ A2=A1=A0=0; P0=0xff;//全滅。此語句可省略,因復(fù)位后P0即為0xff Led10=0;//點(diǎn)亮LED10 Led10=1;//熄滅LED10}}實(shí)際運(yùn)行這個程序發(fā)現(xiàn)二極管一直在亮2.2.3程序設(shè)計(jì)讓1只發(fā)光二極管不停的閃爍。方法一(字節(jié)操作)#include<reg52.h>//52單片機(jī)頭文件typedefunsignedintu16 ;sbit A0=P1^5; //將P1.5定義為74HC138的A0引腳sbit A1=P1^6; //將P1.6定義為74HC138的A1引腳sbit A2=P1^7; //將P1.7定義為74HC138的A2引腳intmain(void) //主程序main函數(shù){u16a; //定義無符號的整型變量awhile(1) //主程序中設(shè)置死循環(huán)程序,保證周而復(fù)始運(yùn)行{ A2=A1=A0=0; P0=0x7f;//點(diǎn)亮LED10 a=50000;while(a--);//50000次的循環(huán),通過消耗時間以達(dá)到延時的目的 P0=0xff; //熄滅LED10 a=50000;while(a--);//延時}}2.2.3程序設(shè)計(jì)方法二(位操作)#include<reg52.h>//52單片機(jī)頭文件typedefunsignedintu16 ;sbit A0=P1^5; //將P1.5定義為74HC138的A0引腳sbit A1=P1^6; //將P1.6定義為74HC138的A1引腳sbit A2=P1^7; //將P1.7定義為74HC138的A2引腳sbitLed10=P0^7;//定義P0.7名字為led7intmain(void) //主程序main函數(shù){u16a; //定義無符號的整型變量awhile(1) { A2=A1=A0=0; P0=0xff;//全滅。此語句可省略,因復(fù)位后P0即為0xff Led10=0;//點(diǎn)亮LED10 a=50000;while(a--);//50000次的循環(huán),通過消耗時間以達(dá)到延時目的 Led10=1;//熄滅LED10 a=50000;while(a--);//延時}}2.3廣告燈的制作2.3.1廣告燈的硬件原理圖2.3.2相關(guān)知識子函數(shù)(1)子函數(shù)的聲明子函數(shù)可以先聲明,也可以預(yù)先不聲明。如果子函數(shù)的位置在調(diào)用語句之前,則不需要專門聲明;如果子函數(shù)的位置在調(diào)用之后,則需要對這個子函數(shù)進(jìn)行聲明。聲明的方法如下:voiddelay(void);//聲明一個無返回值、無參數(shù)的延時子函數(shù)(2)子函數(shù)的編寫子函數(shù)的編寫和主函數(shù)的編寫差不多,只是函數(shù)名稱不同。如下是延時子函數(shù)的編寫: voiddelay(void)

{ /*函數(shù)體*/ }2.3.2相關(guān)知識子函數(shù)(3)子函數(shù)的調(diào)用子函數(shù)的調(diào)用就是指一個函數(shù)體中引用另一個已定義的函數(shù)來實(shí)現(xiàn)所需要的功能,這個時候函數(shù)體稱為主調(diào)用函數(shù),函數(shù)體中所引用的函數(shù)被稱為被調(diào)用函數(shù)。一個函數(shù)體中能調(diào)用數(shù)個其他的函數(shù),這些被調(diào)用的函數(shù)同樣也能調(diào)用其他函數(shù),即嵌套調(diào)用。調(diào)用的方法是在函數(shù)中寫上子函數(shù)的名稱,后面跟上括號和“;”號。如延時函數(shù)和調(diào)用: delay();//調(diào)用延時子函數(shù)2.3.2相關(guān)知識2.程序初始化及C語言程序的基本結(jié)構(gòu)所謂程序初始化是指單片機(jī)復(fù)位后根據(jù)需要對某些寄存器或變量進(jìn)行初始設(shè)置或賦初值,并且這些操作僅執(zhí)行一次,之后就進(jìn)入到while(1)的死循環(huán)中。程序的初始化一般是在主函數(shù)名之后及while(1)死循環(huán)之前的位置。3.if條件語句和for循環(huán)語句(1)if條件語句(2)for循環(huán)語句delay(){ unsingnedinti; for(i=0;i<30000;i++);//用for語句實(shí)現(xiàn)30000次循環(huán)}2.3.2相關(guān)知識或:voiddelay()//在晶振為12MHz情況下,延時約為100ms{unsignedchari,j;for(i=100;i>0;i--)for(j=120;j>0;j--);

//晶振12MHz情況下,120次左右for循環(huán)約為1ms}4.移位運(yùn)算符和循環(huán)移位函數(shù)(1)移位運(yùn)算符移位運(yùn)算符能夠?qū)ψ兞恐械臄?shù)進(jìn)行移位運(yùn)算,包括左移位運(yùn)算符“<<”和右移位運(yùn)算符“>>”,其格式如下:a=a<<1;//將變量a中的數(shù)循環(huán)左移1位后賦給aa=a>>2;//將變量a中的數(shù)循環(huán)右移2位后賦給a(注意移位后末位補(bǔ)“0”)。

圖2-3移位運(yùn)算示意圖(2)循環(huán)移位函數(shù)循環(huán)移位函數(shù)能夠?qū)ψ兞恐械臄?shù)進(jìn)行循環(huán)換位,屬于51單片機(jī)內(nèi)部庫函數(shù),需要包含頭文件“intrins.h”。下面以字符型變量的循環(huán)移位函數(shù)為例來說明循環(huán)移位函數(shù)的使用。其格式如下:a=_crol_(a,1);//將變量a中的數(shù)循環(huán)左移1位后賦給aa=_cror_(a,2);//將變量a中的數(shù)循環(huán)右移2位后賦給a循環(huán)移位函數(shù)執(zhí)行過程示意圖如圖2-4所示。

圖2-4移位函數(shù)示意圖5.數(shù)組數(shù)組是同類型數(shù)據(jù)的一個有序集合。數(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

提交評論