版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、2.1 點(diǎn)亮一個(gè)發(fā)光二極管項(xiàng)目2 發(fā)光二極管的閃爍大多數(shù)單片機(jī)初學(xué)者都是從點(diǎn)亮一個(gè)發(fā)光二極管開始單片機(jī)學(xué)習(xí)之路的。在項(xiàng)目2中我們安排了3個(gè)簡單的任務(wù),分別是點(diǎn)亮一個(gè)發(fā)光二極管、發(fā)光二極管閃爍和8位流水燈。通過這三個(gè)任務(wù),讓初學(xué)者初步了解51單片機(jī)IO口控制外圍器件的原理,激發(fā)初學(xué)者學(xué)習(xí)單片機(jī)的興趣。在完成這三個(gè)任務(wù)之外,教程中穿插講述了51單片機(jī)編程軟件KeilC51以及STC燒錄軟件的使用、C語言入門基礎(chǔ)、模擬電路基本元件的特點(diǎn)等入門知識,為今后的學(xué)習(xí)打下良好的基礎(chǔ)?!緝?nèi)容安排】2.1點(diǎn)亮一個(gè)發(fā)光二極管2.2 發(fā)光二極管的閃爍2.3 8位流水燈 任務(wù)2.1 點(diǎn)亮一個(gè)發(fā)光二極管2.1.1任務(wù)要
2、求 使用單片機(jī)的兩個(gè)I/O口,其中一個(gè)I/O口作為輸入引腳,接開發(fā)板上的高電平(或低電平),另外一個(gè)I/O口作為輸出引腳,控制開發(fā)板上的一個(gè)發(fā)光二極管亮滅。當(dāng)輸入I/O接高電平時(shí),發(fā)光二極管點(diǎn)亮,反之當(dāng)輸入I/O接低電平時(shí),發(fā)光二極管熄滅。2.1.2知識準(zhǔn)備1、發(fā)光二極管LED(light-emitting diode),即發(fā)光二極管,有貼片的,也有直插的,如圖2.1.1所示,常見的顏色有紅、綠、黃、藍(lán)、白等。從發(fā)光二極管的字面上我們可以看出它的一些特性:首先它能發(fā)出可見光,另外這種器件具有普通二極管的特性,即單向?qū)щ娦裕哂嘘帢O和陽極之分。 圖2.1.1 直插發(fā)光二極管和貼片發(fā)光二極管開發(fā)板
3、上的發(fā)光二極管發(fā)出的光是紅顏色,0805貼片封裝。這種二極管的正向?qū)妷涸?.8V到 2.2V之間,工作電流在1mA20mA 之間。當(dāng)導(dǎo)通電流大約1mA時(shí),人的眼睛就可以明顯地觀察到二極管的發(fā)光,導(dǎo)通電流越大,亮度越高,超過10mA,亮度變化就不明顯了,當(dāng)電流超過20mA時(shí),發(fā)光二極管就會有燒壞的危險(xiǎn)。 在設(shè)計(jì)發(fā)光二極管驅(qū)動(dòng)電路時(shí),要在發(fā)光二極管電路中串接一個(gè)限流電阻,調(diào)節(jié)阻值的大小可以控制發(fā)光二極管的發(fā)光亮度。導(dǎo)通電流與限流電阻的關(guān)系為Iled=(VCC-Vled)/R,Iled是流過發(fā)光二極管的電流,Vled是發(fā)光二極管兩端電壓,電阻R是限流電阻。電流3-10mA,電源電壓5V,Vled
4、在2V左右,則限流電阻的取值在300-1K之間。圖2.1.2 發(fā)光二極管驅(qū)動(dòng)電路 2、單片機(jī)I/O口如何控制發(fā)光二極管亮滅 圖2.1.3(a)中是一個(gè)通過開關(guān)控制發(fā)光二極管亮滅的電路。開關(guān)S1斷開,電源上的電流經(jīng)過限流電阻R1,流向發(fā)光二極管,發(fā)光二極管被點(diǎn)亮。開關(guān)S1閉合,電源上的電流經(jīng)過限流電阻R1流向地,發(fā)光二極管沒有電流流過,發(fā)光二極管熄滅。在單片機(jī)的I/O內(nèi)部,實(shí)際上也存在這樣一個(gè)開關(guān)。圖2.1.3(b)是通過單片機(jī)I/O口控制發(fā)光二極管亮滅的等效電路圖。與圖(a)不同的地方在于,開關(guān)S1不是通過手動(dòng)控制的,而是通過單片機(jī)的I/O控制的。我們通過程序控制P17引腳連接的開關(guān)S1閉合,
5、則P17引腳為低電平,發(fā)光二極管熄滅,相反通過程序控制開關(guān)打開,則P17引腳呈現(xiàn)高電平,發(fā)光二極管被點(diǎn)亮。(a)開關(guān)控制發(fā)光二極管 (b)I/O控制發(fā)光二極管 圖2.1.3 I/O控制發(fā)光二極管亮滅的原理解釋 另外需要說明的,對于51單片機(jī)而言,如果按照圖2.1.3(b)中的接法來驅(qū)動(dòng)發(fā)光二極管,并不能點(diǎn)亮發(fā)光管,本單元的任務(wù)3中會詳細(xì)解釋I/O口高電平驅(qū)動(dòng)不了發(fā)光二極管的原因。3、編程語言的選擇和C語言的簡單介紹 單片機(jī)控制發(fā)光二極管亮滅是通過編寫程序來實(shí)現(xiàn)的,那么我們用什么語言來編寫程序呢? 單片機(jī)編程語言有匯編語言和C語言。相比較來說,匯編語言比較接近單片機(jī)的底層,使用匯編語言有助于理解
6、單片機(jī)內(nèi)部結(jié)構(gòu)。簡單的程序,用匯編語言,程序效率也可能比較高,但是當(dāng)程序容量達(dá)到幾千上萬行以后,匯編語言在組織結(jié)構(gòu)、修改維護(hù)等方面就會成為你的噩夢了。C語言具有通用性,51單片機(jī)用可以用C語言編程,其它單片機(jī)(AVR、STM32等)也可以用C語言編程,而匯編則不具備通用性,每一類型的單片機(jī)的匯編指令不盡相同,初學(xué)者繞不過學(xué)習(xí)匯編指令的煩擾。另外C語言的可移植性好,用51單片機(jī)寫的程序只要稍加修改,就可以在別的單片機(jī)中使用。所以目前實(shí)際開發(fā)過程中,大部分工程師都在用 C 語言做單片機(jī)開發(fā),只有在很低端的應(yīng)用中或者是特殊要求的場合,才會用匯編語言開發(fā),所以這里建議大家還是用C語言開發(fā)比較好一些。4
7、、特殊功能寄存器(SFR) 學(xué)過C語言的人肯定會有這樣一個(gè)問題:編寫單片機(jī)程序用C語言,那么在C語言中怎樣來描述單片機(jī)的資源呢?在單片機(jī)內(nèi)部有一個(gè)重要的資源叫特殊功能寄存器,簡稱SFR。SFR是單片機(jī)中各功能部件對應(yīng)的寄存器,用于存放相應(yīng)功能部件的控制命令、狀態(tài)或數(shù)據(jù)。舉個(gè)例子來講,SFR可以看成是一棟宿舍樓,里面有很多房間,這些房間存放P0、P1、P2、P3這些I/O的控制命令,也存放著定時(shí)器、中斷、串口等資源的控制命令,房間號對應(yīng)命令的地址。我們要操控這些資源,只需要向房間號(命令的存放地址)寫命令就可以了。表2.1.1是STC89C52單片機(jī)的SFR地址表,共有21個(gè)特殊功能寄存器。我們
8、可以看到P0口的地址為0x80,我們要操控P0口,只需要對0x80這個(gè)地址寫數(shù)據(jù)就可以了。在C51中,相比于普通C語言,多了兩個(gè)特殊的變量聲明,sfr和是sbit。表2.1.1 STC89C52的特殊功能寄存器符號地址功能介紹符號地址功能介紹BF0HB寄存器TH18DH定時(shí)/計(jì)數(shù)器1(高8位)ACCE0H累加器TH08CH定時(shí)/計(jì)數(shù)器0(低8位)PSWD0H程序狀態(tài)字TL18BH定時(shí)/計(jì)數(shù)器1(高8位)IPB8H中斷優(yōu)先級控制寄存器TL08AH定時(shí)/計(jì)數(shù)器0(低8位)P3B0HP3口鎖存器TMOD89H定時(shí)/計(jì)數(shù)器方式控制寄存器IEA8H中斷允許控制寄存器TCON88H定時(shí)/計(jì)數(shù)器控制寄存器P
9、2A0HP2口鎖存器DPH83H數(shù)據(jù)地址指針(高8位)SBUF99H串口緩沖器DPL82H數(shù)據(jù)地址指針(低8位)SCON98H串口控制寄存器SP81H堆棧指針P190HP1口鎖存器P080HP0口鎖存器PCON87H電源控制寄存器sfr:在聲明變量的同時(shí)為其指定特殊功能寄存器作為存儲地址。例如:sfr P0=0x80,此處聲明一個(gè)變量P0,并指定其存儲地址為特殊功能寄存器P0對應(yīng)的地址(0x80)。編寫應(yīng)用程序時(shí)直接對變量P0賦值就可以了。舉例:P0口的8個(gè)位分別10101010,則在軟件里直接寫語句P0=0xAA(0B10101010)就可以了。sbit:同樣是聲明一個(gè)變量,和SFR 使用方
10、法類似,但是sbit是用來聲明一個(gè)位變量。P0口共有8個(gè)位,我們想單獨(dú)控制第2個(gè)位,可以通過這樣的定義:sbit P11=P11,這樣我們就可以在程序中使用P11表示P1口的第二個(gè)位。是不是我們每一次編寫程序的時(shí)候都需要用sfr和sibt來定義寄存器變量呢?實(shí)際上C51編譯器已經(jīng)做好了一個(gè)文件,里面已經(jīng)存放了些定義。這個(gè)文件的名字叫做reg52.h(頭文件),文件存放的路徑是KeilC51INC,在Keil軟件的安裝文件夾中。我們在編寫程序的時(shí)候,只需要在程序的開頭加上這樣一個(gè)語句#include,就可以把這些寄存器變量定義加載到當(dāng)前的程序中直接使用了。2.1.3 任務(wù)實(shí)施1、KeilC51的
11、安裝KeilC51是美國Keil Software公司(ARM公司之一)出品的51系列兼容單片機(jī)C語言軟件開發(fā)系統(tǒng)。下面是Keil C51編譯器的安裝步驟。(1)雙擊KeilC51安裝文件夾中的 文件,彈出如圖2.1.4所示的對話框。圖2.1.4 雙擊安裝文件界面(2)點(diǎn)擊“Next”按鈕,彈出“License Agreement”對話框,如圖2.1.5所示。文本框中顯示的是安裝許可協(xié)議,需要在“I agree to all the terms of the preceding License Agreement”前面的的小框中打勾。圖2.1.5 許可協(xié)議界面(3)點(diǎn)擊“Next”按鈕,彈出“
12、Folder Selection”對話框,如圖2.1.6所示。這里可以設(shè)置安裝路徑,默認(rèn)安裝路徑在“C:Keil”文件夾下。點(diǎn)擊“Browse.”按鈕,可以修改安裝路徑,應(yīng)用程序盡量不要安裝在C盤,建議選用別的盤符,安裝路徑不能出現(xiàn)中文字符。2.1.6 選擇安裝路徑界面(4)點(diǎn)擊“Next”按鈕,彈出“Customer Information”對話框,如圖2.1.7所示。輸入用戶名、公司名稱以及 E-mail 地址即可。圖2.1.7 輸入用戶名等信息界面(5)單擊“Next”,自動(dòng)安裝軟件,進(jìn)度條一點(diǎn)一點(diǎn)增大,如圖2.1.8所示。圖 2.1.8 文件安裝界面(6)安裝完成后,彈出來安裝完成對話
13、框,如圖2.1.9 所示,有幾個(gè)打鉤的選項(xiàng),把這些勾都去掉,點(diǎn)擊“Finish”按鈕,Keil C51安裝完成。 圖 2.1.9 安裝完成后界面2、工程的建立(1)在編寫應(yīng)用程序之前,需先建立一個(gè)工程,應(yīng)用程序和其它文件放在工程中。打開 Keil 軟件后,點(diǎn)擊:Project-New uVision Project.,如圖2.1.10 所示。 圖 2.1.10 新建一個(gè)工程(2)在彈出的窗口中,選擇工程保存的位置,并給工程起一個(gè)名字,我們給工程起名LED,軟件會自動(dòng)添加擴(kuò)展名.uvproj。如圖2.1.11所示圖2.1.11 工程命名(3)點(diǎn)擊“保存”按鈕后,彈出如圖2.1.12的對話框。圖2
14、.1.12 選擇CPU型號在這個(gè)對話中,要為我們的工程選擇CPU類型。在Data base列表框中,拖動(dòng)滾動(dòng)條,有很多生產(chǎn)廠商的名稱,但找不到我們開發(fā)板上STC89C52的生產(chǎn)廠商宏晶科技。Keil C51的設(shè)計(jì)者并沒有把STC單片機(jī)加入到Keil中。STC89C52和Amel公司的51單片機(jī)同屬一個(gè)系列,在選擇CPU時(shí),我們可以選擇Atmel公司,單擊Atmel前面的+,展開后,有很多Atmel公司的單片機(jī),我們選擇AT89C52就可以了。(4)選定CPU型號后,點(diǎn)擊”O(jiān)K”按鈕,會彈出一個(gè)對話圖,讓你選擇在工程中加入一段啟動(dòng)代碼,初學(xué)者可以不理會,點(diǎn)擊”否”就可以了,工程創(chuàng)建完畢,界面如圖
15、2.1.13所示。2.1.13 工程創(chuàng)建后界面(5) 工程創(chuàng)建后,下一步的工作就是建立編寫代碼的文件。點(diǎn)擊菜單File-New,新建一個(gè)文件,然后點(diǎn)擊File-Save,保存文件,彈出如圖2.1.14所示的窗口。圖2.1.14 新建一個(gè).c文件我們把文件放在LED工程下,同時(shí)給文件起個(gè)名字:LED.c,(6)建立了工程和C文件之后,兩者還是分離的,下一步的工作是把C文件加入到工程中。鼠標(biāo)右鍵單擊Project欄中的Target 1下的文件夾Source Group 1,彈出一個(gè)菜單,選擇Add Files to “Source Group 1”.,如圖2.1.15所示。 圖 2.1.15 C文
16、件加載到工程中點(diǎn)擊Add Files to “Source Group 1”.后,彈出如圖2.1.16所示的對話框,我們選中剛才建立的LED.c文件,然后點(diǎn)擊按鈕Add,再點(diǎn)擊按鈕Close,關(guān)閉對話框。 圖2.1.16 加載LED.c界面把文件加入到工程中后,可以看到在左側(cè)Source Group 1下多了一個(gè)新的文件:LED.C,如圖2.1.17所示。圖2.1.7 加入.c文件后工程界面3、程序的編寫#includesbit LED=P10; /LED輸出接口定義sbit Input=P11; /外接電平輸入接口定義void main(void)while(1) /大循環(huán)if(Input=
17、1) /如果輸入電平為高電平,則點(diǎn)亮LEDLED=0; /低電平點(diǎn)亮LED else LED=1; /否則,熄滅LED我們把C文件加入到工程后,就可以編寫應(yīng)用程序了。應(yīng)用程序的編寫在LED.c窗口中,當(dāng)前行有光標(biāo)在閃爍,而且當(dāng)前行的顏色為淡紫色。如果對編程的字體大小不滿意,可以點(diǎn)擊菜單欄Edit-Configuration,里面有一個(gè)選項(xiàng)卡Colors & Fonts,可以修改字體大小和顏色等。程序清單如下:程序解釋如下:(1)在介紹特殊功能寄存器SFR時(shí),我們提到過功能寄存器的定義已經(jīng)被包含在reg52.h這個(gè)文件中,#include是預(yù)處理命令,在這里是文件包含的意思。就是把中的文件包含到
18、本程序中,成為當(dāng)前程序的一部分。有了#include這個(gè)語句,我們可以直接使用那些寄存器了。(2)打開reg52.h這個(gè)頭文件,我們可以看到既有寄存器定義,也有部分寄存器中每個(gè)位的定義,但是我們在這個(gè)文件中找不到I/O的位定義,所以我們需要在我們的程序中加上單個(gè)IO的位定義:sbit LED=P10;sbit Input=P11;。(3)日常生活中,要完成一件復(fù)雜的功能,我們總是習(xí)慣把“大功能”分解為多個(gè)“小功能”來實(shí)現(xiàn)。這些功能在C語言中我們稱之為“函數(shù)”。大功能我們稱之為主函數(shù),函數(shù)名為main,小功能為子函數(shù)。一個(gè)程序,無論復(fù)雜或簡單,都是由主函數(shù)開始的。函數(shù)的格式為:返回類型 函數(shù)名稱
19、(參數(shù)列表,.),在main函數(shù)中,返回類型和參數(shù)列表都是空的,所以都用void來表示。main函數(shù)中的內(nèi)容放大中。(4)我們在學(xué)習(xí)C語言課程時(shí),課本中的例程執(zhí)行一次,輸出結(jié)果就可以了。但是在C51中,主程序中的任務(wù)大多數(shù)是循環(huán)運(yùn)行的,不能執(zhí)行一次就結(jié)束了,舉個(gè)例子,溫度采集器采集環(huán)境溫度,需要程序不停的執(zhí)行溫度采集任務(wù),不能只采集一次,程序就不運(yùn)行了。C51中,循環(huán)執(zhí)行的任務(wù)放到大循環(huán)中。大循環(huán)的格式為:while(1)任務(wù)A;任務(wù)B;任務(wù)C;.while語句是循環(huán)語句的一種,后面的()的內(nèi)容為循環(huán)條件,如果條件為真,則執(zhí)行中循環(huán)體的內(nèi)容,如果不為真,則不執(zhí)行中循環(huán)體的內(nèi)容。本例程中,whi
20、le語句的條件為1,永遠(yuǎn)為真,則不停執(zhí)行中循環(huán)體的任務(wù)。(5)在本任務(wù)的硬件電路設(shè)計(jì)中,發(fā)光二極管正極接電源,負(fù)極連接單片機(jī)PI0引腳,電路如圖2.1.18所示。所以要點(diǎn)亮發(fā)光二極管,P10引腳需置低電平,程序中對應(yīng)的語句:led=0;,發(fā)光二極管滅,P10引腳需置高電平,則程序中對應(yīng)的語句:led=1;。至于為什么用低電平點(diǎn)亮發(fā)光二極管,而不是用高電平來點(diǎn)亮發(fā)光二極管,本單元的任務(wù)3會解釋低電平點(diǎn)亮的原因。 圖2.1.18 發(fā)光二極管硬件電路(6)程序中的任務(wù)是不停的檢測輸入I/O口(P11)外接電平是高電平還是低電平,如果是高電平,則發(fā)光二極管熄滅,如果為低電平,則發(fā)光二極管點(diǎn)亮。程序中判
21、斷輸入I/O是高電平還是低電平,用到了C語言中的if語句,其格式為:if(條件) 執(zhí)行動(dòng)作A else執(zhí)行動(dòng)作B如果條件滿足,則執(zhí)行動(dòng)作A,否則執(zhí)行動(dòng)作B。在本程序中,如果P11口外接輸入電平為高電平1(if(Input=1)),則點(diǎn)亮發(fā)光二極管(LED=0),否則則熄滅發(fā)光二極管(LED=1)。開發(fā)板上留有高電平(5V)和低電平(0V)接口,用杜邦線把P11口和高電平或者低電平相連就可以了。細(xì)心的讀者會發(fā)現(xiàn),如果P11口不用杜邦線連接高電平,發(fā)光二極管也點(diǎn)亮,其中的原因我們會在本單元的任務(wù)3中,給予解釋。4、程序的編譯程序編好了,我們要對程序進(jìn)行編譯,生成可以下載到單片機(jī)里的文件,在編譯之前,我們先要勾選一個(gè)選項(xiàng),Project-Options for Target Target1.,或者直接點(diǎn)圖2.1.19圖中紅框內(nèi)的快捷圖標(biāo)。 圖2.1.19 點(diǎn)擊魔術(shù)棒在彈出的對話框中,點(diǎn)擊 Output 選項(xiàng)頁,勾選其中的“Create HEX File”復(fù)選框,然后點(diǎn) OK,如圖2.1.20所示。圖2.1.20 勾選復(fù)選框設(shè)置好以后,點(diǎn)擊“Project-rebuild all target files” ,或者鼠標(biāo)點(diǎn)擊圖2.1.21中紅框內(nèi)的快捷圖標(biāo),就可以對程序進(jìn)行編譯了。圖2.1.21
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年版:新材料研發(fā)與應(yīng)用于生產(chǎn)合同
- 2025版靜壓租賃設(shè)備與技術(shù)改造升級合同3篇
- 2025版口腔醫(yī)療行業(yè)標(biāo)準(zhǔn)制定合作合同3篇
- 2024泰州房地產(chǎn)抵押貸款及轉(zhuǎn)讓合同3篇
- 2025年度洗車場場地租賃與經(jīng)營管理承包協(xié)議3篇
- 二零二五年度保險(xiǎn)產(chǎn)品貨款合同退款與理賠服務(wù)協(xié)議3篇
- 2025年度沙石料加工與智慧城市建設(shè)合同3篇
- 2025版設(shè)備租賃合同標(biāo)的及租賃條件和服務(wù)內(nèi)容3篇
- 個(gè)人商鋪?zhàn)赓U合同2025版:租賃協(xié)議模板下載19篇
- 二零二五年度化工原料購銷合同模板3篇
- 道路運(yùn)輸企業(yè)安全生產(chǎn)管理人員安全考核試題題庫與答案
- 年終抖音運(yùn)營述職報(bào)告
- 車間修繕合同模板
- 腦梗死患者的護(hù)理常規(guī)
- 2024年7月國家開放大學(xué)法律事務(wù)??啤斗勺稍兣c調(diào)解》期末紙質(zhì)考試試題及答案
- 護(hù)士條例解讀
- 醫(yī)務(wù)人員崗前培訓(xùn)課件
- SQE年終總結(jié)報(bào)告
- 檢修工(題庫)附答案
- 2025屆高考語文一輪復(fù)習(xí):小說情節(jié)結(jié)構(gòu)之伏筆 練習(xí)題(含答案)
- 《化學(xué)實(shí)驗(yàn)室安全》課程教學(xué)大綱
評論
0/150
提交評論