項目4-LED廣告燈設(shè)計課件_第1頁
項目4-LED廣告燈設(shè)計課件_第2頁
項目4-LED廣告燈設(shè)計課件_第3頁
項目4-LED廣告燈設(shè)計課件_第4頁
項目4-LED廣告燈設(shè)計課件_第5頁
已閱讀5頁,還剩35頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

任務(wù)1流水廣告燈的設(shè)計

廣告燈是一種常見的裝飾,常用于街上的廣告及舞臺裝飾等場合。最簡單的流水廣告燈就是各個燈依次發(fā)光。本任務(wù)利用AT89S51單片機(jī)來實現(xiàn)這一功能。1.1提出任務(wù)用AT89S51的P1口做輸出口,接八只發(fā)光二極管D1、D2、D3、D4、D5、D6、D7、D8,編寫程序,使發(fā)光二級管循環(huán)點亮,時間間隔為0.2s。即剛開始時D1點亮,延時0.2s后,接著是D2點亮,接著依次點亮D3、D4、D5、D6、D7、D8,然后再點亮D7、D6、D5、D4、D3、D2、D1,重復(fù)循環(huán)。

任務(wù)1流水廣告燈的設(shè)計廣告燈是一種常見的裝飾,常用于11.2分析任務(wù)1.硬件電路設(shè)計電路組成。這里選擇具有內(nèi)部程序存儲器的AT89S51單片機(jī)作為控制電路,其P1口接8個發(fā)光二極管(LED)和8個限流電阻,硬件電路原理圖如圖4.1所示。

任務(wù)1流水廣告燈的設(shè)計

1.2分析任務(wù)任務(wù)1流水廣告燈的設(shè)計2電路分析。要使LED點亮,則P1口的對應(yīng)端子輸出低電平,即P1.0=0時,D1亮。一般情況下,驅(qū)動LED的電流約10mA左右,而LED本身的壓降為2V。當(dāng)P1.0輸出為低電平時,輸出為0V,則流經(jīng)D1的電流為,為了在仿真實驗中讓LED更亮一些,在這里取限流電阻為100Ω。相反,當(dāng)P1.0輸出為高電平時,輸出電壓為5V,則流經(jīng)D1的電流為0mA,D1不亮(熄滅),即P1.0=1時,D1不亮(熄滅)。

任務(wù)1流水廣告燈的設(shè)計

電路分析。要使LED點亮,則P1口的對應(yīng)端子輸出低電平,即P3任務(wù)1流水廣告燈的設(shè)計

任務(wù)1流水廣告燈的設(shè)計42.軟件設(shè)計思路P1口輸出電平分析。在圖3.1中,P1口的每一位都接有一個LED,要實現(xiàn)流水燈功能,就是要讓各個LED依次點亮一段時間,再熄滅一段時間,然后再點亮下一個LED一段時間,然后再熄滅一段時間,如此循環(huán)。換句話來說,就是讓P1口周而復(fù)始地輸出高電平和低電平,要實現(xiàn)這一功能,最簡單和最直接的方法是依次將數(shù)據(jù)送往P1口,每送一個數(shù)據(jù)延時一段時間。根據(jù)上述分析,我們列出一個功能表,如表4-1所示。

任務(wù)1流水廣告燈的設(shè)計

2.軟件設(shè)計思路任務(wù)1流水廣告燈的設(shè)計5任務(wù)1流水廣告燈的設(shè)計

任務(wù)1流水廣告燈的設(shè)計6從表4-1可以看出,要實現(xiàn)設(shè)計任務(wù)功能,P1口輸出的8個數(shù)據(jù)分別是11111110B、11111101B、11111011B、11110111B、11101111B、11011111B、10111111B、011111111B,轉(zhuǎn)化成十六進(jìn)制分別是0xfe、0xfd、0xfb、0xf7、0xef、0xdf、0xbf和0x7f。送完這8個數(shù)據(jù)后再反過來送011111111B、10111111B、11011111B、11101111B、11110111B、11111011B、11111101B、11111110B,轉(zhuǎn)化成十六進(jìn)制分別是0x7f、0xbf、0xdf、0xef、0xf7、0xfb、0xfd和0xfe。送完后從頭開始循環(huán)。任務(wù)1流水廣告燈的設(shè)計

從表4-1可以看出,要實現(xiàn)設(shè)計任務(wù)功能,P1口輸出的8個數(shù)據(jù)7如何采用單片機(jī)C語言編程實現(xiàn)數(shù)據(jù)從輸出P1口呢?從這些數(shù)據(jù)來看,有這么一個規(guī)律,D1至D8依次點亮?xí)r,就是數(shù)據(jù)中的二進(jìn)制0的位置依次往左移動了1位,D8至D1依次點亮?xí)r,就是往右依次移動1位。在單片機(jī)C51中,要直接實現(xiàn)數(shù)據(jù)的這種計算是不容易的,如果將數(shù)據(jù)的所有二進(jìn)制取反后,D1至D8依次點亮?xí)r的數(shù)據(jù)就變成了:0x01、0x01、0x04、0x08、0x10、0x20、0x40、0x80,也就是后一個數(shù)是在前一個數(shù)的基礎(chǔ)上乘以2(或者直接左移1位)。任務(wù)1流水廣告燈的設(shè)計

如何采用單片機(jī)C語言編程實現(xiàn)數(shù)據(jù)從輸出P1口呢?從這些數(shù)據(jù)來8根據(jù)前面分析,實現(xiàn)任務(wù)的思路是:程序開始時,給某一個變量賦初始值0x01,并從端口輸出反碼,延時一段時間后,讓顯示變量左移1位,再次輸出反碼并延時,直到輸出所有左移數(shù)據(jù)為止,接下來就實現(xiàn)右移數(shù)據(jù)輸出完畢,再次重復(fù)整個過程。任務(wù)1流水廣告燈的設(shè)計

根據(jù)前面分析,實現(xiàn)任務(wù)的思路是:程序開始時,給某一個變量賦初9延時程序編寫。單片機(jī)程序的延時有兩種,一種是軟件延時,一種是硬件延時,在這里我們重點討論軟件延時。當(dāng)系統(tǒng)加電后,單片機(jī)就開始工作,按照設(shè)計的程序開始運(yùn)行(也稱執(zhí)行指令)。單片機(jī)執(zhí)行一條指令要花一定的時間,那么單片機(jī)執(zhí)行一條指令的執(zhí)行時間成為指令周期。指令周期是以機(jī)器周期為單位的。MCS-51單片機(jī)規(guī)定,一個機(jī)器周期為單片機(jī)振蕩器的12個振蕩周期。如果單片機(jī)時鐘電路中的晶振頻率為12MHz,則一個機(jī)器周期為1us。任務(wù)1流水廣告燈的設(shè)計

延時程序編寫。單片機(jī)程序的延時有兩種,一種是軟件延時,一種是10單片機(jī)的指令運(yùn)行速度是很快的,要想在端口獲得一定的延時時間,就要編寫程序,使單片機(jī)運(yùn)行設(shè)計程序產(chǎn)生時間延遲。任務(wù)中要求獲得0.2s的時間長度,當(dāng)單片機(jī)的指令周期是1us時,0.2s就是1us的200000倍。在程序編寫中常用循環(huán)語句來完成計數(shù)和時間延遲,從而獲得需要的延時時間。任務(wù)1流水廣告燈的設(shè)計

單片機(jī)的指令運(yùn)行速度是很快的,要想在端口獲得一定的延時時間,11采用單片機(jī)C語言編寫的一個0.2s延時程序如下:voiddelay02s(void)//定義延時0.2s函數(shù){unsignedchari,j,k;//聲明3個無符號字符型變量i、j、kfor(i=2;i>0;i--)//外循環(huán)2次,每次約0.1s,延時0.2s{for(j=200;j>0;j--)//外循環(huán)200次,每次約0.5ms,延時0.1s{for(k=250;k>0;k--)//內(nèi)循環(huán)250次,每次約2us,延時05ms{;}//里面的循環(huán)的循環(huán)體什么也不做,但每次循環(huán)延時2us}}}任務(wù)1流水廣告燈的設(shè)計

采用單片機(jī)C語言編寫的一個0.2s延時程序如下:任務(wù)112上述程序可以簡化為:voiddelay02s(void){unsignedchari,j,k;

for(i=2;i>0;i--)for(j=200;j>0;j--)for(k=250;k>0;k--);}整個子程序延時為:2us×250×200×2=200000us=0.5s任務(wù)1流水廣告燈的設(shè)計

上述程序可以簡化為:任務(wù)1流水廣告燈的設(shè)計13

思考:如將延時改為1s,該怎樣修改程序呢?任務(wù)1流水廣告燈的設(shè)計

思考:如將延時改為1s,該怎樣修改程序呢?任務(wù)1141.3源程序編寫根據(jù)程序流程圖編寫的源程序如下:

//lsd4-1.c#include"reg51.h"http://包含頭文件#defineucharunsignedchar//定義uchar為無符號數(shù)據(jù)類型voiddelay02s(void)//延時0.2s函數(shù)

{unsignedchari,j,k;

for(i=2;i>0;i--)for(j=200;j>0;j--)for(k=250;k>0;k--);

}

voidmain(void)//主函數(shù)任務(wù)1流水廣告燈的設(shè)計

1.3源程序編寫任務(wù)1流水廣告燈的設(shè)計15{uchari,j;//定義變量

while(1)//死循環(huán)

{j=0x01;//j初始化為0x01,左移初始值

for(i=0;i<8;i++)//for循環(huán)語句,完成8個循環(huán)

{P1=~j;//對變量j中的值按位取反后,從P1口輸出

delay02s();//延時0.2sj=j<<1;//左移1位

} j=0x80;//設(shè)置右移初始值j為0x80for(i=0;i<8;i++)任務(wù)1流水廣告燈的設(shè)計

{任務(wù)1流水廣告燈的設(shè)計16{P1=~j;

delay02s();

j=j>>1;//右移1位

}}}任務(wù)1流水廣告燈的設(shè)計

{任務(wù)1流水廣告燈的設(shè)計171.4程序調(diào)試與電路仿真運(yùn)行C語言編輯軟件,在編輯區(qū)中輸入上面的源程序,并以“l(fā)sd4-1.c”為文件名存盤。運(yùn)行KeilC51,然后建立一個“l(fā)sd4-1.uv2”的工程項目。把源程序文件“l(fā)sd4-1.c”添加到工程項目中,進(jìn)行編譯,得到目標(biāo)代碼文件“l(fā)sd4-1.hex”。任務(wù)1流水廣告燈的設(shè)計

1.4程序調(diào)試與電路仿真任務(wù)1流水廣告燈的設(shè)計18運(yùn)行Proteus,在編輯窗口中繪制如圖4.1所示的電路圖并存盤。然后選中單片機(jī)AT89s51,左鍵點擊AT89s51,出現(xiàn)如圖4.2所示的對話框,在ProgramFile后面的“”按鈕,找到剛才編譯好的“l(fā)sd4-1.hex”文件,然后點擊“OK”就可以進(jìn)行仿真了。點擊模擬調(diào)試按鈕的運(yùn)行按鈕“”,進(jìn)入調(diào)試狀態(tài)。此時可看到D1點亮,延時0.2s后,接著是D2點亮,接著依次點亮D3、D4、D5、D6、D7、D8,然后再點亮D7、D6、D5、D4、D3、D2、D1,重復(fù)循環(huán)。

任務(wù)1流水廣告燈的設(shè)計

運(yùn)行Proteus,在編輯窗口中繪制如圖4.1所示的電路圖并19圖4.2加載hex文件對話框

任務(wù)1流水廣告燈的設(shè)計

圖4.2加載hex文件對話框任務(wù)1流水廣告燈的設(shè)20

知識鏈接1."文件包含"處理程序“l(fā)sd3-1.c”中的第一行#include"reg51.h"是一個"文件包含"處理。所謂"文件包含"是指一個文件將另外一個文件的內(nèi)容全部包含進(jìn)來。這里程序中包含reg51.h文件的目的是為了要使用P1這個符號,即通知C編譯器,程序中所寫的P1是指AT89S51單片機(jī)的P1端口而不是其它變量。任務(wù)1流水廣告燈的設(shè)計

知識鏈接任務(wù)1流水廣告燈的設(shè)計212.單片機(jī)某個引腳的符號表示以P1.0引腳為例。在C語言里,如果直接寫P1.0,C編譯器并不能識別,而且P1.0也不是一個合法的C語言變量名,所以得給它另起一個名字,這里起的名為P1_0,可是P1_0是不是就是P1.0呢?你這么認(rèn)為,C編譯器可不這么認(rèn)為,所以必須給它們建立聯(lián)系,這里使用了C51的關(guān)鍵字sbit來定義,如:sbitP1_0=P1^0;//定義用符號P1_0來表示P1.0引腳,也可以用其他的符號來表示。

任務(wù)1流水廣告燈的設(shè)計

2.單片機(jī)某個引腳的符號表示任務(wù)1流水廣告燈的設(shè)計223.C51程序的結(jié)構(gòu)特點(1)C51程序是由函數(shù)構(gòu)成的。函數(shù)是C51程序的基本單位。(2)一個函數(shù)由兩部分組成:①函數(shù)說明部分。包括函數(shù)名、函數(shù)類型、函數(shù)屬性、函數(shù)參數(shù)(形參)名、形式參數(shù)類型。一個函數(shù)名后面必須跟一個圓括號,函數(shù)參數(shù)可以沒有,如main()。②函數(shù)體。即函數(shù)說明下面的大括號之內(nèi)的部分。(3)一個C51程序總是從main函數(shù)開始執(zhí)行,而不論main函數(shù)在整個程序中所處的位置如何。

任務(wù)1流水廣告燈的設(shè)計

3.C51程序的結(jié)構(gòu)特點任務(wù)1流水廣告燈的設(shè)計23(4)C51程序書寫格式自由,一行內(nèi)可以寫幾個語句,一個語句可以分寫在幾行上。(5)每個語句和數(shù)據(jù)定義的最后必須有一個分號“;”。分號是C51語句的必要組成部分。分號不可少,即使是程序中的最后一個語句也應(yīng)包含分號。

(6)C51本身沒有輸入輸出語句。標(biāo)準(zhǔn)的輸入和輸出(通過串行口)是由scanf和printf等庫函數(shù)來完成的。對于用戶定義的輸出,比如直接以輸出端口讀取鍵盤輸入和驅(qū)動LED,則需要自行編制輸出函數(shù)。

任務(wù)1流水廣告燈的設(shè)計

(4)C51程序書寫格式自由,一行內(nèi)可以寫幾個語句,一個語句24

(7)可以用/*……*/對C51程序中的任何部分作注釋。在KeiluVision2中,還可以使用//進(jìn)行單行注釋。4.位運(yùn)算符程序中“j=j<<1;”和“j=j>>1;”語句中的<<、>>表示左移、右移運(yùn)算符。表明將j中的值左移、右移1位,得到新的數(shù)值后,再將該值賦給j。

任務(wù)1流水廣告燈的設(shè)計

(7)可以用/*……*/對C51程序中的任何部分作注釋。在25

思考與練習(xí)修改程序lsd3-1.c,使8只發(fā)光二極管按2Hz的頻率閃爍。修改程序lsd3-1.c,使D1、D3、D5、D7按10Hz的頻率依次點亮。

任務(wù)1流水廣告燈的設(shè)計

思考與練習(xí)任務(wù)1流水廣告燈的設(shè)計261.任務(wù)要求如圖4-1所示,編寫程序使發(fā)光二極管按時間依次顯示出規(guī)定的花樣,但其對于控制的顯示數(shù)據(jù)之間沒有規(guī)律,不能通過計算的方式得到。

任務(wù)2任意變化廣告燈的設(shè)計1.任務(wù)要求任務(wù)2任意變化廣告燈的設(shè)計272.分析任務(wù)由于本任務(wù)中是按時間變化依次控制LED亮、滅,可以采用與流水廣告燈的思路來完成程序的編寫,但顯示花樣所對應(yīng)的數(shù)據(jù)的變化不一定有規(guī)律,不能采用變量直接計算的方式實現(xiàn)前后數(shù)據(jù)的變化。因此,在這里采用查表法來實現(xiàn)。

任務(wù)2任意變化廣告燈的設(shè)計2.分析任務(wù)任務(wù)2任意變化廣告燈的設(shè)計28將廣告燈顯示的圖案所對應(yīng)的端口輸出數(shù)據(jù)依次編寫為一張數(shù)據(jù)表,表中每個數(shù)值中為0的位表示對應(yīng)的廣告燈亮,數(shù)據(jù)為1的位表示為應(yīng)的廣告燈滅。將這張數(shù)據(jù)表放在程序中,以數(shù)組的形式存儲,在使用時依次讀出組中的元素就得到需要的數(shù)據(jù),實現(xiàn)了數(shù)據(jù)的無規(guī)律變化,并且數(shù)組存儲的數(shù)據(jù)可以較多,能實現(xiàn)的花樣變化也可以復(fù)雜。

任務(wù)2任意變化廣告燈的設(shè)計將廣告燈顯示的圖案所對應(yīng)的端口輸出數(shù)據(jù)依次編寫為一張數(shù)據(jù)表,29在C51中要進(jìn)行復(fù)雜計算,也可以采用數(shù)組的方式來實現(xiàn),比如:一個周期正弦值的計算,可以先將這些列在表中,需要時查表讀出,這就是查表法。將用于點亮廣告燈的數(shù)據(jù)入在數(shù)組中,讓程序依次讀這數(shù)組中的數(shù)據(jù),并將數(shù)據(jù)送到端口,控制廣告燈的點亮就實現(xiàn)了任意規(guī)律變化廣告的控制。假設(shè)有N個數(shù)據(jù),當(dāng)程序讀完N個數(shù)據(jù)后,又從頭開始讀數(shù),具體的程序流程圖如圖4.3所示。

任務(wù)2任意變化廣告燈的設(shè)計在C51中要進(jìn)行復(fù)雜計算,也可以采用數(shù)組的方式來實現(xiàn),比如:30任務(wù)2任意變化廣告燈的設(shè)計任務(wù)2任意變化廣告燈的設(shè)計313.源程序編寫

/*文件名lsd4-2.c*/#include"reg51.h"http://包含頭文件#defineucharunsignedchar//設(shè)置變量類型uchardiscode[8]={0x7e,0xbd,0xdb,0xe7,0xdb,0xbd,0x7e,0xff};//定義顯示花樣數(shù)據(jù)的數(shù)組voiddelay02s(void)//延時時間{unsignedchari,j,k;for(i=2;i>0;i--)任務(wù)2任意變化廣告燈的設(shè)計3.源程序編寫任務(wù)2任意變化廣告燈的設(shè)計32for(j=200;j>0;j--)for(k=250;k>0;k--);}

voidmain(void)//主函數(shù){uchari;//定義變量while(1){for(i=0;i<8;i++)//循環(huán)8次{P1=discode[i];//將數(shù)組discode中的第i個數(shù)據(jù)取出來,賦給P1口輸出delay05s();}}}任務(wù)2任意變化廣告燈的設(shè)計for(j=200;j>0;j--)任務(wù)2任意變化廣告燈334.程序調(diào)試與電路仿真同任務(wù)1,在此不再重復(fù)。仿真效果如圖4.4所示。

任務(wù)2任意變化廣告燈的設(shè)計4.程序調(diào)試與電路仿真任務(wù)2任意變化廣告燈的設(shè)計34任務(wù)2任意變化廣告燈的設(shè)計任務(wù)2任意變化廣告燈的設(shè)計35

知識鏈接

1.C51數(shù)據(jù)類型——charchar類型的長度是一個字節(jié),通常用于定義處理字符數(shù)據(jù)的變量或常量。分無符號字符類型

unsignedchar和有符號字符類型signedchar,默認(rèn)值為signedchar類型。

任務(wù)2任意變化廣告燈的設(shè)計

知識鏈接任務(wù)2任意變化廣告燈的設(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

提交評論