任務2.1點亮發(fā)光二極管_第1頁
任務2.1點亮發(fā)光二極管_第2頁
任務2.1點亮發(fā)光二極管_第3頁
任務2.1點亮發(fā)光二極管_第4頁
任務2.1點亮發(fā)光二極管_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、2.1 點亮一個發(fā)光二極管項目2 發(fā)光二極管的閃爍大多數(shù)單片機初學者都是從點亮一個發(fā)光二極管開始單片機學習之路的。在項目2中我們安排了3個簡單的任務,分別是點亮一個發(fā)光二極管、發(fā)光二極管閃爍和8位流水燈。通過這三個任務,讓初學者初步了解51單片機IO口控制外圍器件的原理,激發(fā)初學者學習單片機的興趣。在完成這三個任務之外,教程中穿插講述了51單片機編程軟件KeilC51以及STC燒錄軟件的使用、C語言入門基礎、模擬電路基本元件的特點等入門知識,為今后的學習打下良好的基礎?!緝?nèi)容安排】2.1點亮一個發(fā)光二極管2.2 發(fā)光二極管的閃爍2.3 8位流水燈 任務2.1 點亮一個發(fā)光二極管2.1.1任務要

2、求 使用單片機的兩個I/O口,其中一個I/O口作為輸入引腳,接開發(fā)板上的高電平(或低電平),另外一個I/O口作為輸出引腳,控制開發(fā)板上的一個發(fā)光二極管亮滅。當輸入I/O接高電平時,發(fā)光二極管點亮,反之當輸入I/O接低電平時,發(fā)光二極管熄滅。2.1.2知識準備1、發(fā)光二極管LED(light-emitting diode),即發(fā)光二極管,有貼片的,也有直插的,如圖2.1.1所示,常見的顏色有紅、綠、黃、藍、白等。從發(fā)光二極管的字面上我們可以看出它的一些特性:首先它能發(fā)出可見光,另外這種器件具有普通二極管的特性,即單向?qū)щ娦?,具有陰極和陽極之分。 圖2.1.1 直插發(fā)光二極管和貼片發(fā)光二極管開發(fā)板

3、上的發(fā)光二極管發(fā)出的光是紅顏色,0805貼片封裝。這種二極管的正向?qū)妷涸?.8V到 2.2V之間,工作電流在1mA20mA 之間。當導通電流大約1mA時,人的眼睛就可以明顯地觀察到二極管的發(fā)光,導通電流越大,亮度越高,超過10mA,亮度變化就不明顯了,當電流超過20mA時,發(fā)光二極管就會有燒壞的危險。 在設計發(fā)光二極管驅(qū)動電路時,要在發(fā)光二極管電路中串接一個限流電阻,調(diào)節(jié)阻值的大小可以控制發(fā)光二極管的發(fā)光亮度。導通電流與限流電阻的關系為Iled=(VCC-Vled)/R,Iled是流過發(fā)光二極管的電流,Vled是發(fā)光二極管兩端電壓,電阻R是限流電阻。電流3-10mA,電源電壓5V,Vled

4、在2V左右,則限流電阻的取值在300-1K之間。圖2.1.2 發(fā)光二極管驅(qū)動電路 2、單片機I/O口如何控制發(fā)光二極管亮滅 圖2.1.3(a)中是一個通過開關控制發(fā)光二極管亮滅的電路。開關S1斷開,電源上的電流經(jīng)過限流電阻R1,流向發(fā)光二極管,發(fā)光二極管被點亮。開關S1閉合,電源上的電流經(jīng)過限流電阻R1流向地,發(fā)光二極管沒有電流流過,發(fā)光二極管熄滅。在單片機的I/O內(nèi)部,實際上也存在這樣一個開關。圖2.1.3(b)是通過單片機I/O口控制發(fā)光二極管亮滅的等效電路圖。與圖(a)不同的地方在于,開關S1不是通過手動控制的,而是通過單片機的I/O控制的。我們通過程序控制P17引腳連接的開關S1閉合,

5、則P17引腳為低電平,發(fā)光二極管熄滅,相反通過程序控制開關打開,則P17引腳呈現(xiàn)高電平,發(fā)光二極管被點亮。(a)開關控制發(fā)光二極管 (b)I/O控制發(fā)光二極管 圖2.1.3 I/O控制發(fā)光二極管亮滅的原理解釋 另外需要說明的,對于51單片機而言,如果按照圖2.1.3(b)中的接法來驅(qū)動發(fā)光二極管,并不能點亮發(fā)光管,本單元的任務3中會詳細解釋I/O口高電平驅(qū)動不了發(fā)光二極管的原因。3、編程語言的選擇和C語言的簡單介紹 單片機控制發(fā)光二極管亮滅是通過編寫程序來實現(xiàn)的,那么我們用什么語言來編寫程序呢? 單片機編程語言有匯編語言和C語言。相比較來說,匯編語言比較接近單片機的底層,使用匯編語言有助于理解

6、單片機內(nèi)部結構。簡單的程序,用匯編語言,程序效率也可能比較高,但是當程序容量達到幾千上萬行以后,匯編語言在組織結構、修改維護等方面就會成為你的噩夢了。C語言具有通用性,51單片機用可以用C語言編程,其它單片機(AVR、STM32等)也可以用C語言編程,而匯編則不具備通用性,每一類型的單片機的匯編指令不盡相同,初學者繞不過學習匯編指令的煩擾。另外C語言的可移植性好,用51單片機寫的程序只要稍加修改,就可以在別的單片機中使用。所以目前實際開發(fā)過程中,大部分工程師都在用 C 語言做單片機開發(fā),只有在很低端的應用中或者是特殊要求的場合,才會用匯編語言開發(fā),所以這里建議大家還是用C語言開發(fā)比較好一些。4

7、、特殊功能寄存器(SFR) 學過C語言的人肯定會有這樣一個問題:編寫單片機程序用C語言,那么在C語言中怎樣來描述單片機的資源呢?在單片機內(nèi)部有一個重要的資源叫特殊功能寄存器,簡稱SFR。SFR是單片機中各功能部件對應的寄存器,用于存放相應功能部件的控制命令、狀態(tài)或數(shù)據(jù)。舉個例子來講,SFR可以看成是一棟宿舍樓,里面有很多房間,這些房間存放P0、P1、P2、P3這些I/O的控制命令,也存放著定時器、中斷、串口等資源的控制命令,房間號對應命令的地址。我們要操控這些資源,只需要向房間號(命令的存放地址)寫命令就可以了。表2.1.1是STC89C52單片機的SFR地址表,共有21個特殊功能寄存器。我們

8、可以看到P0口的地址為0x80,我們要操控P0口,只需要對0x80這個地址寫數(shù)據(jù)就可以了。在C51中,相比于普通C語言,多了兩個特殊的變量聲明,sfr和是sbit。表2.1.1 STC89C52的特殊功能寄存器符號地址功能介紹符號地址功能介紹BF0HB寄存器TH18DH定時/計數(shù)器1(高8位)ACCE0H累加器TH08CH定時/計數(shù)器0(低8位)PSWD0H程序狀態(tài)字TL18BH定時/計數(shù)器1(高8位)IPB8H中斷優(yōu)先級控制寄存器TL08AH定時/計數(shù)器0(低8位)P3B0HP3口鎖存器TMOD89H定時/計數(shù)器方式控制寄存器IEA8H中斷允許控制寄存器TCON88H定時/計數(shù)器控制寄存器P

9、2A0HP2口鎖存器DPH83H數(shù)據(jù)地址指針(高8位)SBUF99H串口緩沖器DPL82H數(shù)據(jù)地址指針(低8位)SCON98H串口控制寄存器SP81H堆棧指針P190HP1口鎖存器P080HP0口鎖存器PCON87H電源控制寄存器sfr:在聲明變量的同時為其指定特殊功能寄存器作為存儲地址。例如:sfr P0=0x80,此處聲明一個變量P0,并指定其存儲地址為特殊功能寄存器P0對應的地址(0x80)。編寫應用程序時直接對變量P0賦值就可以了。舉例:P0口的8個位分別10101010,則在軟件里直接寫語句P0=0xAA(0B10101010)就可以了。sbit:同樣是聲明一個變量,和SFR 使用方

10、法類似,但是sbit是用來聲明一個位變量。P0口共有8個位,我們想單獨控制第2個位,可以通過這樣的定義:sbit P11=P11,這樣我們就可以在程序中使用P11表示P1口的第二個位。是不是我們每一次編寫程序的時候都需要用sfr和sibt來定義寄存器變量呢?實際上C51編譯器已經(jīng)做好了一個文件,里面已經(jīng)存放了些定義。這個文件的名字叫做reg52.h(頭文件),文件存放的路徑是KeilC51INC,在Keil軟件的安裝文件夾中。我們在編寫程序的時候,只需要在程序的開頭加上這樣一個語句#include,就可以把這些寄存器變量定義加載到當前的程序中直接使用了。2.1.3 任務實施1、KeilC51的

11、安裝KeilC51是美國Keil Software公司(ARM公司之一)出品的51系列兼容單片機C語言軟件開發(fā)系統(tǒng)。下面是Keil C51編譯器的安裝步驟。(1)雙擊KeilC51安裝文件夾中的 文件,彈出如圖2.1.4所示的對話框。圖2.1.4 雙擊安裝文件界面(2)點擊“Next”按鈕,彈出“License Agreement”對話框,如圖2.1.5所示。文本框中顯示的是安裝許可協(xié)議,需要在“I agree to all the terms of the preceding License Agreement”前面的的小框中打勾。圖2.1.5 許可協(xié)議界面(3)點擊“Next”按鈕,彈出“

12、Folder Selection”對話框,如圖2.1.6所示。這里可以設置安裝路徑,默認安裝路徑在“C:Keil”文件夾下。點擊“Browse.”按鈕,可以修改安裝路徑,應用程序盡量不要安裝在C盤,建議選用別的盤符,安裝路徑不能出現(xiàn)中文字符。2.1.6 選擇安裝路徑界面(4)點擊“Next”按鈕,彈出“Customer Information”對話框,如圖2.1.7所示。輸入用戶名、公司名稱以及 E-mail 地址即可。圖2.1.7 輸入用戶名等信息界面(5)單擊“Next”,自動安裝軟件,進度條一點一點增大,如圖2.1.8所示。圖 2.1.8 文件安裝界面(6)安裝完成后,彈出來安裝完成對話

13、框,如圖2.1.9 所示,有幾個打鉤的選項,把這些勾都去掉,點擊“Finish”按鈕,Keil C51安裝完成。 圖 2.1.9 安裝完成后界面2、工程的建立(1)在編寫應用程序之前,需先建立一個工程,應用程序和其它文件放在工程中。打開 Keil 軟件后,點擊:Project-New uVision Project.,如圖2.1.10 所示。 圖 2.1.10 新建一個工程(2)在彈出的窗口中,選擇工程保存的位置,并給工程起一個名字,我們給工程起名LED,軟件會自動添加擴展名.uvproj。如圖2.1.11所示圖2.1.11 工程命名(3)點擊“保存”按鈕后,彈出如圖2.1.12的對話框。圖2

14、.1.12 選擇CPU型號在這個對話中,要為我們的工程選擇CPU類型。在Data base列表框中,拖動滾動條,有很多生產(chǎn)廠商的名稱,但找不到我們開發(fā)板上STC89C52的生產(chǎn)廠商宏晶科技。Keil C51的設計者并沒有把STC單片機加入到Keil中。STC89C52和Amel公司的51單片機同屬一個系列,在選擇CPU時,我們可以選擇Atmel公司,單擊Atmel前面的+,展開后,有很多Atmel公司的單片機,我們選擇AT89C52就可以了。(4)選定CPU型號后,點擊”O(jiān)K”按鈕,會彈出一個對話圖,讓你選擇在工程中加入一段啟動代碼,初學者可以不理會,點擊”否”就可以了,工程創(chuàng)建完畢,界面如圖

15、2.1.13所示。2.1.13 工程創(chuàng)建后界面(5) 工程創(chuàng)建后,下一步的工作就是建立編寫代碼的文件。點擊菜單File-New,新建一個文件,然后點擊File-Save,保存文件,彈出如圖2.1.14所示的窗口。圖2.1.14 新建一個.c文件我們把文件放在LED工程下,同時給文件起個名字:LED.c,(6)建立了工程和C文件之后,兩者還是分離的,下一步的工作是把C文件加入到工程中。鼠標右鍵單擊Project欄中的Target 1下的文件夾Source Group 1,彈出一個菜單,選擇Add Files to “Source Group 1”.,如圖2.1.15所示。 圖 2.1.15 C文

16、件加載到工程中點擊Add Files to “Source Group 1”.后,彈出如圖2.1.16所示的對話框,我們選中剛才建立的LED.c文件,然后點擊按鈕Add,再點擊按鈕Close,關閉對話框。 圖2.1.16 加載LED.c界面把文件加入到工程中后,可以看到在左側(cè)Source Group 1下多了一個新的文件: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) /如果輸入電平為高電平,則點亮LEDLED=0; /低電平點亮LED else LED=1; /否則,熄滅LED我們把C文件加入到工程后,就可以編寫應用程序了。應用程序的編寫在LED.c窗口中,當前行有光標在閃爍,而且當前行的顏色為淡紫色。如果對編程的字體大小不滿意,可以點擊菜單欄Edit-Configuration,里面有一個選項卡Colors & Fonts,可以修改字體大小和顏色等。程序清單如下:程序解釋如下:(1)在介紹特殊功能寄存器SFR時,我們提到過功能寄存器的定義已經(jīng)被包含在reg52.h這個文件中,#include是預處理命令,在這里是文件包含的意思。就是把中的文件包含到

18、本程序中,成為當前程序的一部分。有了#include這個語句,我們可以直接使用那些寄存器了。(2)打開reg52.h這個頭文件,我們可以看到既有寄存器定義,也有部分寄存器中每個位的定義,但是我們在這個文件中找不到I/O的位定義,所以我們需要在我們的程序中加上單個IO的位定義:sbit LED=P10;sbit Input=P11;。(3)日常生活中,要完成一件復雜的功能,我們總是習慣把“大功能”分解為多個“小功能”來實現(xiàn)。這些功能在C語言中我們稱之為“函數(shù)”。大功能我們稱之為主函數(shù),函數(shù)名為main,小功能為子函數(shù)。一個程序,無論復雜或簡單,都是由主函數(shù)開始的。函數(shù)的格式為:返回類型 函數(shù)名稱

19、(參數(shù)列表,.),在main函數(shù)中,返回類型和參數(shù)列表都是空的,所以都用void來表示。main函數(shù)中的內(nèi)容放大中。(4)我們在學習C語言課程時,課本中的例程執(zhí)行一次,輸出結果就可以了。但是在C51中,主程序中的任務大多數(shù)是循環(huán)運行的,不能執(zhí)行一次就結束了,舉個例子,溫度采集器采集環(huán)境溫度,需要程序不停的執(zhí)行溫度采集任務,不能只采集一次,程序就不運行了。C51中,循環(huán)執(zhí)行的任務放到大循環(huán)中。大循環(huán)的格式為:while(1)任務A;任務B;任務C;.while語句是循環(huán)語句的一種,后面的()的內(nèi)容為循環(huán)條件,如果條件為真,則執(zhí)行中循環(huán)體的內(nèi)容,如果不為真,則不執(zhí)行中循環(huán)體的內(nèi)容。本例程中,whi

20、le語句的條件為1,永遠為真,則不停執(zhí)行中循環(huán)體的任務。(5)在本任務的硬件電路設計中,發(fā)光二極管正極接電源,負極連接單片機PI0引腳,電路如圖2.1.18所示。所以要點亮發(fā)光二極管,P10引腳需置低電平,程序中對應的語句:led=0;,發(fā)光二極管滅,P10引腳需置高電平,則程序中對應的語句:led=1;。至于為什么用低電平點亮發(fā)光二極管,而不是用高電平來點亮發(fā)光二極管,本單元的任務3會解釋低電平點亮的原因。 圖2.1.18 發(fā)光二極管硬件電路(6)程序中的任務是不停的檢測輸入I/O口(P11)外接電平是高電平還是低電平,如果是高電平,則發(fā)光二極管熄滅,如果為低電平,則發(fā)光二極管點亮。程序中判

21、斷輸入I/O是高電平還是低電平,用到了C語言中的if語句,其格式為:if(條件) 執(zhí)行動作A else執(zhí)行動作B如果條件滿足,則執(zhí)行動作A,否則執(zhí)行動作B。在本程序中,如果P11口外接輸入電平為高電平1(if(Input=1)),則點亮發(fā)光二極管(LED=0),否則則熄滅發(fā)光二極管(LED=1)。開發(fā)板上留有高電平(5V)和低電平(0V)接口,用杜邦線把P11口和高電平或者低電平相連就可以了。細心的讀者會發(fā)現(xiàn),如果P11口不用杜邦線連接高電平,發(fā)光二極管也點亮,其中的原因我們會在本單元的任務3中,給予解釋。4、程序的編譯程序編好了,我們要對程序進行編譯,生成可以下載到單片機里的文件,在編譯之前,我們先要勾選一個選項,Project-Options for Target Target1.,或者直接點圖2.1.19圖中紅框內(nèi)的快捷圖標。 圖2.1.19 點擊魔術棒在彈出的對話框中,點擊 Output 選項頁,勾選其中的“Create HEX File”復選框,然后點 OK,如圖2.1.20所示。圖2.1.20 勾選復選框設置好以后,點擊“Project-rebuild all target files” ,或者鼠標點擊圖2.1.21中紅框內(nèi)的快捷圖標,就可以對程序進行編譯了。圖2.1.21

溫馨提示

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

評論

0/150

提交評論