




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、項目2發光二極管的閃爍大多數單片機初學者都是從點亮一個發光二極管開始單片機學習 之路的。在項目2中我們安排了 3個簡單的任務,分別是點亮一個發 光二極管、發光二極管閃爍和 8位流水燈。通過這三個任務,讓初學者初步了解 51單片機10 口控制外圍器 件的原理,激發初學者學習單片機的興趣。在完成這三個任務之外, 教程中穿插講述了 51單片機編程軟件KeilC51以及STC燒錄軟件的使 用、C語言入門基礎、模擬電路基本元件的特點等入門知識,為今后的學習打下良好的基礎。【內容安排】2.1點亮一個發光二極管2.2發光二極管的閃爍2.3 8位流水燈任務2.1點亮一個發光二極管任務要求使用單片機的兩個I/O
2、 口,其中一個I/O 口作為輸入引腳,接開發板上的高電平(或低電平),另外一個I/O 口作為輸出引腳,控制開發板上的一個發光二極管亮滅。當輸入I/O接高電平時,發光二極管點亮,反之當輸入I/O接低電平時,發光二極管熄滅。知識準備1、發光二極管LED(light-emittingdiode),即發光二極管,有貼片的,也有直插的,如圖所示,常見的顏色有紅、綠、黃、藍、白等。從發光二極管的字面上我們可以看出它的一些特性:首 先它能發出可見光,另外這種器件具有普通二極管的特性,即單向導電性,具有陰極和陽極之圖2.1.1直插發光二極管和貼片發光二極管分。開發板上的發光二極管發出的光是紅顏色,0805貼片
3、封裝。這種二極管的正向導通電壓在1.8V到2.2V之間,工作電流在 1mA-20mA之間。當導通電流大約1mA時,人的眼睛就可以明顯地觀察到二極管的發光,導通電流越大,亮度越高,超過10mA亮度變化就不明顯了,當電流超過20mA時,發光二極管就會有燒壞的危險。DI在設計發光二極管驅動電路時,要在發光二極管 電路中串接一個限流電阻,調節阻值的大小可以控制 發光二極管的發光亮度。導通電流與限流電阻的關系 為lled=(VCC-Vled)/R , lied是流過發光二極管的電 流,Vied是發光二極管兩端電壓,電阻R是限流電阻。電流 3-10mA,電源電壓 5V, Vied在2V左右, 則限流電阻的
4、取值在 300-1K Q之間。-2 -圖發光二極管驅動電路2、單片機I/O 口如何控制發光二極管亮滅圖( a)中是一個通過開關控制發光二極管亮滅的電路。開關S1斷開,電源上的電流經過限流電阻 R1,流向發光二極管,發光二極管被點亮。開關S1閉合,電源上的電流經過限流電阻R1流向地,發光二極管沒有電流流過,發光二極管熄滅。在單片機的I/O內部,實際上也存在這樣一個開關。圖(b)是通過單片機I/O 口控制發光二極管亮滅的等效電路圖。與圖(a )不同的地方在于,開關S1不是通過手動控制的,而是通過單片機的I/O控制的。我們通過程序控制P17引腳連接的開關 S1閉合,則P17引腳為低電平,發光二極管熄
5、滅,相反通過程序控制開關打開,則P17引腳呈現高電平,發光二極管被點亮。VCCRI壬亠4-豈1 誓lr=wPIJ T2EXPi.2JI -lPiJko E-tFl,4IJ陰PI.5FI.6孵Tpj.ci 口 xnE-AillP1.? rMTO SI PSTN3 INTI 1P2_7Pl.4 mPXbPKXU肥MWR? 1PJ.7 RDP2.3*JtTALIn.iXTAUP2.IP2.DSTB樣貳(a)開關控制發光二極管(b) I/O控制發光二極管圖控制發光二極管亮滅的原理解釋另外需要說明的,對于 51單片機而言,如果按照圖 ( b)中的接法來驅動發光二極 管,并不能點亮發光管,本單元的任務3中
6、會詳細解釋I/O 口高電平驅動不了發光二極管的原 因。3、編程語言的選擇和 C語言的簡單介紹單片機控制發光二極管亮滅是通過編寫程序來實現的,那么我們用什么語言來編寫程序呢?單片機編程語言有匯編語言和C語言。相比較來說,匯編語言比較接近單片機的底層,使用匯編語言有助于理解單片機內部結構。簡單的程序,用匯編語言,程序效率也可能比較高, 但是當程序容量達到幾千上萬行以后,匯編語言在組織結構、修改維護等方面就會成為你的噩夢了。C語言具有通用性,51單片機用可以用 C語言編程,其它單片機(AVR STM32等)也 可以用C語言編程,而匯編則不具備通用性,每一類型的單片機的匯編指令不盡相同,初學者繞不過學
7、習匯編指令的煩擾。另外C語言的可移植性好,用51單片機寫的程序只要稍加修改,就可以在別的單片機中使用。所以目前實際開發過程中,大部分工程師都在用C語言做單片機開發,只有在很低端的應用中或者是特殊要求的場合,才會用匯編語言開發,所以這里建議大家還是用C語言開發比較好一些。4、特殊功能寄存器(SFR學過C語言的人肯定會有這樣一個問題:編寫單片機程序用 C語言,那么在C語言中怎樣來描述單片機的資源呢?在單片機內部有一個重要的資源叫特殊功能寄存器,簡稱SFR SFR是單片機中各功能部件對應的寄存器,用于存放相應功能部件的控制命令、狀態或數據。舉個例子來講,SFR可以看成是一棟宿舍樓,里面有很多房間,這
8、些房間存放PO、P1、P2、P3這些I/O的控制命令,也存放著定時器、中斷、串口等資源的控制命令,房間號對應命令的地址。我們要操控這些資源,只需要向房間號(命令的存放地址) 寫命令就可以了。表是STC89C52單片機的SFR 地址表,共有21個特殊功能寄存器。我們可以看到 P0 口的地址為0x80,我們要操控P0 口, 只需要對0x80這個地址寫數據就可以了。在C51中,相比于普通 C語言,多了兩個特殊的變量聲明,sfr和是sbit。表的特殊功能寄存器符號地址功能介紹符號地址功能介紹BF0HB寄存器TH18DH定時/計數器1(高8位)ACCEOH累加器TH08CH定時/計數器0(低8位)PSW
9、DOH程序狀態字TL18BH定時/計數器1(高8位)IPB8H中斷優先級控制寄存器TL08AH定時/計數器0(低8位)P3B0HP3 口鎖存器TMOD89H定時/計數器方式控制寄存器IEA8H中斷允許控制寄存器TCON88H定時/計數器控制寄存器P2A0HP2 口鎖存器DPH83H數據地址指針(高8位)SBUF99H串口緩沖器DPL82H數據地址指針(低8位)SCON98H串口控制寄存器SP81H堆棧指針P190HP1 口鎖存器P080HP0 口鎖存器PCON87H電源控制寄存器sfr :在聲明變量的同時為其指定特殊功能寄存器作為存儲地址。例如:sfr P0=0x80 ,此處聲明一個變量 P0
10、,并指定其存儲地址為特殊功能寄存器P0對應的地址(0x80)。編寫應用程序時直接對變量 PC賦值就可以了。舉例:P0口的8個位分別10101010,則在軟件里直接寫語 句 P0=0xAA(0B10101010)就可以了。sbit :同樣是聲明一個變量,和SFR使用方法類似,但是 sbit是用來聲明一個位變量。P0口共有8個位,我們想單獨控制第 2個位,可以通過這樣的定義:sbit P1仁P1A1 ,這樣我們就可以在程序中使用 P11表示P1 口的第二個位。是不是我們每一次編寫程序的時候都需要用sfr和sibt來定義寄存器變量呢?實際上 C51編譯器已經做好了一個文件,里面已經存放了些定義。這個
11、文件的名字叫做 reg52.h (頭文件),文件存放的路徑是 KeilC51INC ,在Keil軟件的安裝文件夾中。我們在編寫程序的時候,只 需要在程序的開頭加上這樣一個語句#in clude,就可以把這些寄存器變量定義加載到當前的程序中直接使用了。任務實施1、KeilC51的安裝KeilC51是美國Keil Software公司(ARM公司之一)出品的51系列兼容單片機 C語言軟 件開發系統。下面是 Keil C51編譯器的安裝步驟。(1)雙擊KeilC51安裝文件夾中的文件,彈出如圖2.1.4所示的對話框。圖雙擊安裝文件界面(2) 點擊Next”按鈕,彈出License Agreement
12、 ”對話框,如圖所示。文本框 中顯示的是安裝許可協議,需要在I agree to all the terms of the precedi ng Lice nseAgreeme nt ”前面的的小框中打勾。r Endl-User License Agreement for ARM Kell SoftwareDevelopment ToolsTHIS tND USER UCtFKb AGitfcMtM LlCt+ICfj IS A lEAL U址f+lbrUT jjfYOU(ErTHE a smakE ewividul, oh sinsije lcsal ewTiT* aw arm limite
13、dforTHE U&C or the SOFTWAKE ACCOMPAMYPJG THIS UCENCE, ARM 國 ONLY WHJJNG TQ JCE1M嘗 THE SOfTWARE TO YOU ON CCM?Dmati THAT YOU ACCEPT ALL OF T底 TERMS INTHIS LiCfeNCe. err CUCXCHG 1OK BY INSTALlJftia OH QaTMtfeK*i,tfe USIMG C?K CWYWGTHF RHIFTW4HF VFM I rNOTraTF TIHftT VnBI 巧砂尺齊 Tfl RF HTWNew uVision Pro
14、ject.,如圖 所示。Hello - pVision4File Edit ViewProject Flash Debug Peripherals Tools SVCS Window 旦沖J -誦New piyision Pnqjed-,.New Multi-Project Workspace.Open Project.1056 Project:a削掙魚e S Simulate白-召Sourc女pertManage圖新建一個工程選擇工程保存的位置,并給工程起一個名字, 我們給工程起名LED,(2) 在彈出的窗口中,軟件會自動添加擴展名.uvproj 。如圖所示 計機 豐曲歳盤 C51 LED圖
15、工程命名(3) 點擊“保存”按鈕后,彈出如圖的對話框。CFffVairfor用ffi 瑕DeriEeTh olast血 ect De-flcp lor Target Targel lrent: li ixiUsd Eifta 心 Lirfoar LXStlJir ed BL51It圖選擇CPU型號在這個對話中,要為我們的工程選擇CPU類型。在Data base列表框中,拖動滾動條,有很多生產廠商的名稱,但找不到我們開發板上STC89C52的生產廠商宏晶科技。Keil C51的設計者并沒有把STC單片機加入到Keil中。STC89C52和Amel公司的51單片機同屬一個系列, 在選擇CPU時,我
16、們可以選擇 Atmel公司,單擊 Atmel前面的+,展開后,有很多 Atmel 公司的單片機,我們選擇AT89C52就可以了。(4)選定CPU型號后,點擊” 0K按鈕,會彈出一個對話圖,讓你選擇在工程中加入一段啟動代碼,初學者可以不理會,點擊”否”就可以了,工程創建完畢,界面如圖所示。日 id Target 1B Source Group 1工程創建后界面(5) 工程創建后,下一步的工作就是建立編寫代碼的文件。點擊菜單File-New,新建一個文件,然后點擊 File-Save,保存文件,彈出如圖所示的窗口。、_ ,?*C51 led - I +t I;嚴圖2.1.14新建一個.c文件我們把
17、文件放在 LED工程下,同時給文件起個名字:LED.c,(6) 建立了工程和C文件之后,兩者還是分離的,下一步的工作是把 C文件加入到工 程中。鼠標右鍵單擊 Project欄中的Target 1下的文件夾 Source Group 1,彈出一個菜單, 選擇 Add Files to “ Source Group 1 ” .,如圖 所示。因 LED - uVisiorvPrajftaGroup-Add Film 詁 Group Source1.-Target 1 習Translate Rle 益甲buildgw 旦pipGroup Scuftt Groups L- and ies Fite厶 M
18、arage Compcinents.33Prnjtc iBaok t)”4*Add Files* to currenl Projecl GroupSimulatDA圖文件加載到工程中點擊Add Files to Source Group 1 ” .后,彈出如圖所示的對話框,我們選中剛才建立的LED.c文件,然后點擊按鈕Add,再點擊按鈕 Close,關閉對話框。圖加載LED.c界面把文件加入到工程中后,可以看到在左側Source Group 1下多了一個新的文件:LED.C,如圖所示。圖加入.c文件后工程界面3、程序的編寫我們把C文件加入到工程后,就可以編寫應用程序了。應用程序的編寫在LED.
19、c窗口中,當前行有光標在閃爍,而且當前行的顏色為淡紫色。如果對編程的字體大小不滿意,可以點擊菜單欄Edit-Configuration,里面有一個選項卡Colors & Fonts,可以修改字體大小和顏色等。程序清單如下:#in cludesbit LED=P1A0;sbit In put=P1Al; void mai n(void)while(1)if(I nput=1) LED=0;elseLED=1; /LED輸出接口定義/外接電平輸入接口定義/大循環/如果輸入電平為高電平,則點亮LED低電平點亮LED/否則,熄滅LED程序解釋如下:(1 )在介紹特殊功能寄存器 SFR時,我們提到過功能
20、寄存器的定義已經被包含在reg52.h這個文件中,#include是預處理命令,在這里是文件包含的意思。就是把 中的文件包含到 本程序中,成為當前程序的一部分。有了#in clude 這個語句,我們可以直接使用那些寄存器了。(2)打開reg52.h這個頭文件,我們可以看到既有寄存器定義,也有部分寄存器中每個位的定義,但是我們在這個文件中找不到I/O的位定義,所以我們需要在我們的程序中加上單個 IO 的位定義:sbit LED=P1A0;sbit Input=P1A1;。(3)日常生活中,要完成一件復雜的功能,我們總是習慣把“大功能”分解為多個“小功能”來實現。這些功能在 C語言中我們稱之為“函
21、數”。大功能我們稱之為主函數,函數名 為main,小功能為子函數。 一個程序,無論復雜或簡單,都是由主函數開始的。函數的格式 為:返回類型 函數名稱(參數列表,.),在main函數中,返回類型和參數列表都是空的,|所以都用void來表示。main函數中的內容放大中。(4) 我們在學習C語言課程時,課本中的例程執行一次,輸出結果就可以了。 但是在C51中,主程序中的任務大多數是循環運行的,不能執行一次就結束了,舉個例子,溫度采集器采集環境溫度,需要程序不停的執行溫度采集任務,不能只采集一次,程序就不運行了。 C51中,循環執行的任務放到大循環中。大循環的格式為:while(1)任務A;任務B;任
22、務C;while語句是循環語句的一種,后面的 ()的內容為循環條件,如果條件為真 ,則執行 中循環體的內容,如果不為真,則不執行中循環體的內容。本例程中, while語句的條 件為 1,永遠為真,則不停執行中循環體的任務。(5)在本任務的硬件電路設計中,發光二極管正極接電源,負極連接單片機PIO引腳,電路如圖所示。所以要點亮發光二極管,P10引腳需置低電平,程序中對應的語句:led=0 ;,發光二極管滅,P10引腳需置高電平,則程序中對應的語句:led=1 ;。至于為什么用低電平點亮發光二極管,而不是用高電平來點亮發光二極管,本單元的任務3會解釋低電平點亮的原因。圖發光二極管硬件電路(6)程序
23、中的任務是不停的檢測輸入 I/O 口( P11)外接電平是高電平還是低電平, 如果 是高電平,則發光二極管熄滅, 如果為低電平,則發光二極管點亮。 程序中判斷輸入I/O是高 電平還是低電平,用到了 C語言中的if語句,其格式為:if(條件)執行動作Aelse- 14 -執行動作B如果條件滿足,則執行動作A,否則執行動作B。在本程序中,如果 P11 口外接輸入電平為高電平 1( if(lnput=1),則點亮發光二極管(LED=O),否則則熄滅發光二極管(LED=1)。 開發板上留有高電平(5V)和低電平(0V)接口,用杜邦線把 P11 口和高電平或者低電平相連 就可以了。細心的讀者會發現,如果
24、P11 口不用杜邦線連接高電平,發光二極管也點亮,其中的原因我們會在本單元的任務3中,給予解釋。4、程序的編譯程序編好了,我們要對程序進行編譯,生成可以下載到單片機里的文件,在編譯之前,我們先要勾選一個選項, Project-Options for Target Targetl .,或者直接點圖 圖中紅框內的快捷圖標。Q LED -譏 is arA圖2.1.19點擊魔術棒在彈出的對話框中,點擊Output選項頁,勾選其中的“ Create HEX File ”復選框,然后點OK,如圖所示。Qpticimi tor Target Target laILilingCSl ASl | fiLSl D
25、lu Stkig |Sefed FqberfcrOtseas廠 Oeet電 Ub阿 SLED .UBZ BfDwie Horr-aflion:和: 15 -圖勾選復選框,或者鼠標點擊圖2.1.21設置好以后,點擊Project-rebuild all target files中紅框內的快捷圖標,就可以對程序進行編譯了。圖點擊編譯按鈕編譯完后,Keil界面的下方Build Output 窗口出現了如圖的信息。這些信息告訴我們編譯后的情況,data=9.0,指的是我們的程序使用了單片機內部的256字節RAM資源中的9個字節,code=19的意思是使用了 8KFIash資源中的19個字節。“crea
26、ting hex file from LED. 說明系統生成了當前程序的燒錄文件。最后一行0 Error(s) , 0 Warning(s)。提示我們的程序沒有錯誤,也沒有警告。如果程序程序語法有錯誤,會出現有幾個錯誤和幾個警告,并提示錯誤的位置,我們可以改根據提示去發現錯誤。liTl Project轉 Be c FunctionsOTerr platesE口zld target *Taiger 1 * linking -Program Size; data=9,CQ 屬性-設備管理器- 端口,可以看到在端口下有一個 “ USB-SERIALCH340(COM4”, 其中COM就是我們的開發板
27、當前所使用的COM端口號。如圖所示。廠:設備管理養文件(F)操柞(A)査看(V)幫助(H)O畛丨囲丨日囲丨肉J201220140702KBIP占DVD/CD-ROM驅動器”匚.IDE AT A/AT A PI 控制器IP 口妲里器I 雄盤驅動器$ 寫端口 (COM 和 LPT)Ij-1聲 USB-SERIAL CH340 (COM4)I專通信端口 (COMI)I”鼻計茸機|”卑監視器圖 查看 COM口打開STC下載軟件STC-ISP,界面如圖所示。分5步完成程序的下載(1 )選擇單片機型號,我們選擇STC89C52(2) 點擊”打開程序文件”,加載我們編譯好的“ LED.Hex”文件。(3) 選擇下載口,之前我們在設備管理器中已經查看過是CO
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 提高反洗錢工作體系的實施效果
- 供水工程輸水干管建設工程實施方案
- 提高小區環境空氣質量監測
- 數字化轉型與平臺經濟的融合
- 初中語文判斷試題及答案
- 人事規章制度試題及答案
- 住房裝修合同終止協議書
- 2021csp考試題目及答案
- 五糧液筆試考試題及答案
- 周口教研評估試題及答案
- 肝性腦病昏迷后的護理
- 合伙開快遞合同范本
- TCAMIE 19-2024 城鎮污水處理廠全過程除臭技術規程
- 2025年貴州貴安新區產業發展控股集團有限公司招聘筆試參考題庫附帶答案詳解
- 2025年標準育兒嫂合同樣本
- 國家安全青年有責
- 打印消防安全制度
- 文言文18個虛詞及文言文120個實詞的解釋
- GB/T 26718-2024城市軌道交通安全防范系統技術要求
- 馬工程《藝術學概論》課件424P
- 江蘇省淮陰區2025屆高三下第一次測試數學試題含解析
評論
0/150
提交評論