單片機__閃爍的LED教材_第1頁
單片機__閃爍的LED教材_第2頁
單片機__閃爍的LED教材_第3頁
單片機__閃爍的LED教材_第4頁
單片機__閃爍的LED教材_第5頁
已閱讀5頁,還剩61頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 項目三項目三 閃爍的閃爍的LED n任務一 一只LED的閃爍n任務二 跑馬燈n任務三 任意變化的彩燈控制學習目標學習目標 知識目標知識目標:nKeil uVision2 軟件的使用和調(diào)試方法。n掌握匯編語言與C語言的編寫方法和技巧。n 技能目標技能目標:n能根據(jù)實際電路要求編寫閃爍LED程序。任務一 一只LED的閃爍n一、課題目標一、課題目標 本課題就是以發(fā)光二極管為例,用單片機控制8只發(fā)光二極管,實現(xiàn)逐個點亮、全亮、閃爍等花樣顯示。 為了便于理解,采用從簡單的單只發(fā)光二極管的點亮和熄滅控制開始,到實現(xiàn)八只發(fā)光二極管組成的各種樣式閃亮彩燈控制。圖3-1 LED顯示電路原理圖二、電路原理二、電

2、路原理圖3-2 八路發(fā)光二極管控制實物圖AT89S51 P1.0+Vcc單 片 機 的I/O端口 圖3-3 單片機驅動一只發(fā)光二極管的原理電路P1.0端口的LED閃亮三、程序設計n1、端口的定義 C51使用sfr命令來對單片機這些端口進行定義,如: sfr P1 = 0 x90; 這條命令的作用就是定義了P1這個名稱(也可叫變量)代表了地址為90H的特殊功能寄存器。 匯編程序直接使用P1就可以,并且不分大小寫。例:MOV P1,#0FFH;MOV P1,#00H。 在程序命令中使用命令“sfr P1 = 0 x90;”這樣定義后,P1就代表了P1口,程序中就可以對單片機的P1口進行讀寫操作了,

3、如使用“Y=P1;”的命令將單片機P1口的狀態(tài)讀入并存入變量Y中,而“P1=0 x02”則是P1口的P1.1置1。 同樣的方式,也可以定義其他端口。為了方便,C51將各個廠商生產(chǎn)的單片機的各個特殊功能寄存器的定義放在一個特殊的文件中,如AT89S51、AT89C51對應的文件是AT89X51.H。作為通用的MCS-51系列單片機,在編寫C程序,首先調(diào)用這些通用的REG51.H頭文件。n2、位定義 針對特殊功能寄存器的某一位進行操作,則需要使用sbit命令定義特殊功能寄存器中的可尋址位。如要對AT89S51端口P1的P1.0進行操作,則可以使用下面的命令進行定義: sbit P10=P10; 然

4、后就能使用“P10=1;”控制P1.0輸出高電平,“P10=0;”控制P1.0輸出低電平。 圖3-4 1Hz的閃爍程序設計框圖輸出低電平輸出高電平程序開始延時0.5秒延時0.5秒n3、程序設計分析 在本任務的程序設計框圖就是圖3-4。從框圖中可看出兩點,一是程序是一個循環(huán)結構,即程序開始后就反復地循環(huán)執(zhí)行,二是程序包含了端口輸出控制和0.5秒的延時程序。 在本任務中的引腳定義使用如下命令: sbit light=P10; 命令定義了light表示P1口的P1.0端。 讓LED點亮,需要在引腳上輸出低電平,就是在P1.0引腳上輸出0,應使用的命令是: light=0;(匯編:CLR P1.0)

5、同理,讓LED熄滅,應使用的命令是: light=1; (匯編:SETB P1.0) n4、延時程序的編寫 單片機執(zhí)行一條指令的執(zhí)行時間,稱為指令周期。指令周期是以機器周期為單位的,為14個機器周期,多數(shù)指令都是單周期指令,也就是執(zhí)行一條指令的時間為一個機器周期。在MCS-51單片機規(guī)定一個機器周期為單片機振蕩器的12個振蕩周期。如果晶振頻率為12MHz,則一個機器周期為1s。 單片機的指令運行是很快的,要在端口獲得一定時間長度的脈沖信號,就要通過編寫程序,使單片運行設計程序產(chǎn)生時間延遲,實現(xiàn)從單片機輸出端口上獲得需要頻率的電脈沖信號。 任務中要求獲得0.5s的時間長度,當單片機的指令周期是1

6、s時,可計算出0.5s是1s的500000倍,在程序編寫中常用循環(huán)語句來完成計數(shù)和時間延遲,從而獲得需要的延時時間。 為了便于計算和控制,常采用無符號變量的循環(huán)來實現(xiàn)。因為程序執(zhí)行時,對應的每次循環(huán)所需要的時間是兩個機器周期,當單片機所使用的晶振為12MHz,每次循環(huán)就延時2s。 無符號數(shù)最大值為255,也就是說,使用無符號類型的變量的單個的循環(huán)最多為255次,即用一個循環(huán)不能完成所需要的0.5s延時。為了達到0.5s延時,可采用多重循環(huán)的方式完成。為了方便,將其中的每重循環(huán)的循環(huán)次數(shù)取為0.5s/2s=250000的因數(shù)200、250和5。下面就是一個完成0.5秒延時的程序。void del

7、ay05s(void) unsigned char i,j,k; for(i=5;i0;i-) for(j=200;j0;j-) for(k=250;k0;k-) ; 整個子程序延時為:2s2502005=500000s=0.5s。0.5秒延時的匯編程序:MOV R6,#5SS:MOV R7, #200LOOP:MOV R5, #249DJNZ R5, $DJNZ R7,LOOPDJNZ R6,SS整個子程序延時為:2s249+3200+25=501010s按圖3-5所對應的主程序:void main(void) while(1) light=0; delay05s(); light=1; d

8、elay05s(); 圖3-5 1Hz的閃爍程序設計框圖輸出低電平輸出高電平程序開始延時0.5秒延時0.5秒5、(1)C語言程序:#include sbit light=P10;void delay05s(void) unsigned char i,j,k; for(i=5;i0;i-) for(j=200;j0;j-) for(k=250;k0;k-) ; void main(void) while(1) light=0; delay05s(); light=1; delay05s(); (2)、匯編語言程序:org 00hLS:setb p1.0Lcall delayclr P1.0Lca

9、ll delaysjmp LSdelay:mov R6,#5SS:MOV R7, #200loop:mov R1,#245SD:DJNZ R1, SDDJNZ R7,loopDJNZ R6,SSretend(一)(一)keil C51 windowskeil C51 windows集成開發(fā)平臺的使用集成開發(fā)平臺的使用 1keil C51 windows集成開發(fā)平臺介紹集成開發(fā)平臺介紹工具欄工具欄菜單欄菜單欄源文件編輯窗口源文件編輯窗口工程窗口工程窗口輸出窗口輸出窗口圖3-6 軟件窗口介紹2 2導入需要仿真的程序導入需要仿真的程序 建立一個工程項目芯片選擇 屬性設置 建立源程序文件 添加文件到當

10、前項目組中 編譯文件 KEIL 軟件開發(fā)平臺軟件開發(fā)平臺KEIL 軟件開發(fā)平臺軟件開發(fā)平臺圖3-7 新建工程窗口KEIL 軟件開發(fā)平臺軟件開發(fā)平臺圖3-8 新建工程窗口KEIL 軟件開發(fā)平臺軟件開發(fā)平臺圖3-9 單片機選擇窗口KEIL 軟件開發(fā)平臺軟件開發(fā)平臺圖3-10 目標1屬性設置窗口KEIL 軟件開發(fā)平臺軟件開發(fā)平臺圖3-11 目標1輸出窗口設置KEIL 軟件開發(fā)平臺軟件開發(fā)平臺圖3-12 調(diào)試窗口設置KEIL 軟件開發(fā)平臺軟件開發(fā)平臺圖3-13 軟件輸入窗口KEIL 軟件開發(fā)平臺軟件開發(fā)平臺圖3-14 目標1添加窗口KEIL 軟件開發(fā)平臺軟件開發(fā)平臺圖3-15 目標1添加文件窗口(二)

11、(二) Keil Keil 程序調(diào)試程序調(diào)試 1 1程序調(diào)試時的常用窗口程序調(diào)試時的常用窗口 u 編譯文件界面 KEIL 軟件開發(fā)平臺軟件開發(fā)平臺圖3-16 編輯文件界面調(diào)試程序窗口 字母字母C C:代碼存儲空間:代碼存儲空間D D:直接尋址的片內(nèi)存儲空間:直接尋址的片內(nèi)存儲空間I I:間接尋址的片內(nèi)存儲空間:間接尋址的片內(nèi)存儲空間X X:擴展的外部:擴展的外部RAMRAM空間空間“數(shù)字數(shù)字”:想要查看的地址。:想要查看的地址。KEIL 軟件開發(fā)平臺軟件開發(fā)平臺圖3-17 代碼查詢窗口工程窗口寄存器頁工程窗口寄存器頁 KEIL 軟件開發(fā)平臺軟件開發(fā)平臺圖3-18 工程寄存器窗口2 2各種窗口在

12、程序調(diào)試中的用途各種窗口在程序調(diào)試中的用途 程序調(diào)試界面程序調(diào)試界面 KEIL 軟件開發(fā)平臺軟件開發(fā)平臺圖3-19 程序調(diào)試窗口I/O端口界面端口界面 KEIL 軟件開發(fā)平臺軟件開發(fā)平臺圖3-20 硬件查詢窗口I/O口全部打開界面口全部打開界面 KEIL 軟件開發(fā)平臺軟件開發(fā)平臺圖3-21 硬件I/0口查詢窗口打開后的打開后的InterruptInterrupt窗口窗口 KEIL 軟件開發(fā)平臺軟件開發(fā)平臺圖3-22 P3口查詢窗口串口設置串口設置 KEIL 軟件開發(fā)平臺軟件開發(fā)平臺圖3-23 串口查詢窗口打開后的串口窗口打開后的串口窗口 KEIL 軟件開發(fā)平臺軟件開發(fā)平臺圖3-24 串口窗口定

13、時器設置定時器設置 KEIL 軟件開發(fā)平臺軟件開發(fā)平臺圖3-25 定時器窗口打開后的定時器打開后的定時器1 1窗口窗口 KEIL 軟件開發(fā)平臺軟件開發(fā)平臺圖3-26 硬件I/0口查詢窗口常用的調(diào)試按鈕常用的調(diào)試按鈕 復位按鈕,按復位按鈕,按下后,所有的下后,所有的系統(tǒng)狀態(tài)將變系統(tǒng)狀態(tài)將變成初始狀態(tài)。成初始狀態(tài)。 全速運全速運行行 進入循環(huán)并進入循環(huán)并單步執(zhí)行單步執(zhí)行 停止全速運行停止全速運行 跳過循環(huán)并單跳過循環(huán)并單步執(zhí)行步執(zhí)行 跳出單步執(zhí)行跳出單步執(zhí)行過程過程 執(zhí)行到斷點處執(zhí)行到斷點處 KEIL 軟件開發(fā)平臺軟件開發(fā)平臺圖3-27 調(diào)試按鈕二、ISP軟件的使用 n打開下載軟件,雙擊目錄下的文

14、件打開下載軟件,雙擊目錄下的文件ISPgm.exeISPgm.exe,打開軟件進入軟件使用界面打開軟件進入軟件使用界面n1 1芯片選擇:左擊界面右面芯片選擇窗口的芯片選擇:左擊界面右面芯片選擇窗口的下拉箭標,選擇編程芯片的型號。下拉箭標,選擇編程芯片的型號。n2 2導入導入hexhex文件到緩沖區(qū):左擊界面上的文件到緩沖區(qū):左擊界面上的“Open FileOpen File”按鈕,選擇本目錄下的按鈕,選擇本目錄下的hexhex文件。文件。n3 3向芯片寫入文件:左擊界面上的向芯片寫入文件:左擊界面上的“WriteWrite”按鈕,開始編程向芯片寫入程序。按鈕,開始編程向芯片寫入程序。n4 4完

15、成寫入編程。完成寫入編程。n5 5退出程序:左擊界面右上角的退出程序:左擊界面右上角的“x x”按鈕,按鈕,退出此程序。退出此程序。KEIL 軟件開發(fā)平臺軟件開發(fā)平臺任務二跑馬燈本任務讓圖3-28中的LED依次循環(huán)點亮。圖3-28 LED硬件圖n程序設計分析 為了讓圖3-28所示的LED依次點亮,就是要求從P1口從P1.0至P1.7依次輸出低電平,其余引腳都輸出高電平,就能讓被接在端口的彩燈依次點亮。 從輸出的具體的數(shù)據(jù)來看,第一個LED點亮需要的輸出數(shù)據(jù),是對應于P1.0的位為0,其余位為1,組合為一個字節(jié)時對應的二進制位從高到低為:1111 1110,即十六進制數(shù)0 xFE;同理,第二個L

16、ED點亮對應的數(shù)為:1111 1101,化為十六進制數(shù)為0 xFD。 依次類推,逐次點亮LED所對應的數(shù)據(jù)為: 1111 1110、1111 1101、1111 1011、1111 0111、 1110 1111、1101 1111、1011 1111、0111 1111。 從這些數(shù)據(jù)上,可以看出一個規(guī)律,就是這些數(shù)據(jù)中的二進制數(shù)0的位置依次往左移動了一位。在C51中,要直接實現(xiàn)數(shù)據(jù)的這種計算是不容易的。 根據(jù)前面的分析,實現(xiàn)任務的思路是:程序開始時,給某一變量賦初始值0 xFE,然后每次將數(shù)據(jù)左移后送入P1口直到所有循環(huán)次數(shù)輸出完畢,再次重復整個過程。根據(jù)思路得出的程序框圖如圖3-29所示。

17、圖3-29 程序流程圖#include reg51.h#include intrins.hvoid delay05s(void) unsigned char i,j,k; for(i=5;i0;i-) for(j=200;j0;j-) for(k=250;k0;k-) ; void main() unsigned char OutData=0 xfe;for(;)P1=OutData;OutData=_crol_(OutData,1); /循環(huán)左移循環(huán)左移delay05s(); (1)C語言程序: ORG 00HSTART: MOV A,#0FEHLOOP: MOV P1,A LCALL DE

18、LAY RL A SJMP loopdelay:mov R6,#5SS:MOV R7, #200lp:mov R1,#245SD:DJNZ R1, SDDJNZ R7,lpDJNZ R6,SSRETEND(2)匯編語言思考題: 1、編寫程序實現(xiàn)8個LED指示燈從左到右,從右到左依次循環(huán)點亮。 2、編寫程序實現(xiàn)8個LED指示燈閃亮3次并且從左到右,從右到左依次循環(huán)點亮。1、#include reg51.h#include intrins.h#define uchar unsigned char#define uint unsigned intuchar j,k;void mDelay(unsig

19、ned int Delay) unsigned int i;for(;Delay0;Delay-) for(i=0;i124;i+);void main() unsigned char OutData=0 xfe; while(1) for(j=0;j7;j+)P1=OutData; OutData=_crol_(OutData,1); /循環(huán)左移 mDelay(1000); /*延時1000 毫秒*/ for(k=0;k0;Delay-) for(i=0;i0;l-) P1=OutData; mDelay(1000); P1=0 xff; mDelay(1000); void main()

20、OutData=0 xfe; while(1) for(j=0;j7;j+) OutData=_crol_(OutData,1); FLASH(); for(k=0;k7;k+) OutData=_cror_(OutData,1); FLASH(); 任務三任意變化的彩燈控制任務三任意變化的彩燈控制本任務實現(xiàn)讓彩燈顯示出規(guī)定的任意的花樣。程序設計要求: 要求LED燈從右至左依次循環(huán)點亮2輪,然后從左至右依次循環(huán)點亮2輪,全亮全滅2次。LED燈按這規(guī)律依次循環(huán)。n程序設計分析 由于本任務中是按時間變化依次控制彩燈亮、滅,可以采用跑馬燈類似的思路來完成程序框圖,但顯示花樣所對應的數(shù)據(jù)的變化不一定有

21、規(guī)律,不能采用變量直接計算的方式實現(xiàn)前后數(shù)據(jù)的變化,這里介紹一種很重要的程序設計方法查表法。 將彩燈顯示的圖案所對應的端口輸出數(shù)據(jù)依次編寫為一張數(shù)據(jù)表,表中每個數(shù)據(jù)中為0的位表示對應的彩燈亮,數(shù)據(jù)為1的位表示對應的彩燈熄。將這張數(shù)據(jù)表放在程序中,以數(shù)組的形式存儲,在使用時依次讀出數(shù)組中的元素就得到了需要的數(shù)據(jù),實現(xiàn)了數(shù)據(jù)的無規(guī)律變化,并且數(shù)組存儲的數(shù)據(jù)可以較多,能實現(xiàn)的花樣變化也可以做到比較繁復。在C51中要進行復雜的計算,也可以采用數(shù)組的方式來實現(xiàn),比如:一個周期正弦值的計算,可以先將這些列在表中,需要時查表讀出,這就是查表法。圖3-30 采用數(shù)組的彩燈控制程序框圖 將用于點亮彩燈的數(shù)據(jù)放在

22、數(shù)組中,讓程序依次讀這數(shù)組中的數(shù)據(jù),并將數(shù)據(jù)送到端口,控制彩燈的點亮,就實現(xiàn)了任意規(guī)律變化彩燈控制。假設有N個數(shù)據(jù),當程序讀完N個數(shù)據(jù)后,又從頭開始讀數(shù)。具體的程序框圖如圖3-30所示。 nC語言程序:#include unsigned char code table=0 xfe,0 xfd,0 xfb,0 xf7,0 xef,0 xdf,0 xbf,0 x7f, 0 xfe,0 xfd,0 xfb,0 xf7,0 xef,0 xdf,0 xbf,0 x7f,0 x7f,0 xbf,0 xdf,0 xef,0 xf7,0 xfb,0 xfd,0 xfe,0 x7f,0 xbf,0 xdf,0

23、xef,0 xf7,0 xfb,0 xfd,0 xfe,0 x00,0 xff,0 x00,0 xff,0 x01;unsigned char i;void delay(void)unsigned char m,n,s;for(m=20;m0;m-)for(n=20;n0;n-)for(s=248;s0;s-);void main(void)while(1) if(tablei!=0 x01) P1=tablei; i+; delay(); else i=0;nORG 00hSTART: MOV DPTR,#TABLE LOOP: CLR A MOVC A, A+DPTR CJNE A,#01H,LOOP1 LJMP STARTLOOP1: MOV P1, A MOV R3, #20 LCALL DELAY INC DPTR LJMP LOOPDELAY: MOV R4,#20D1: MOV R5,#248 DJNZ R5,$ DJNZ R4,D1 DJNZ R3,DELAY RET匯編

溫馨提示

  • 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

提交評論