




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
手把手教你單片機(jī)流水燈實(shí)驗(yàn)(詳解)每當(dāng)夜幕降臨,我們可以看到大街各式各樣廣告牌上漂亮的霓虹燈,看起來令人賞心悅目,為夜幕中的城市增添了不少亮麗色彩。其實(shí)這些霓虹燈的工作原理和單片機(jī)流水燈是一樣的,只不過霓虹燈的花樣更多,看起來更漂亮一些。這一課我們就結(jié)合S51增強(qiáng)型單片機(jī)實(shí)驗(yàn)板、ISP編程器來手把手教你詳細(xì)學(xué)習(xí)單片機(jī)的流水燈實(shí)驗(yàn)。首先介紹實(shí)驗(yàn)的硬件設(shè)備:S51增強(qiáng)型單片機(jī)實(shí)驗(yàn)板+I(xiàn)SP編程器圖1:S51增強(qiáng)型單片機(jī)實(shí)驗(yàn)板圖2:ISP編程器套件S51增強(qiáng)型單片機(jī)實(shí)驗(yàn)板上有8個高亮度發(fā)光二極管(見圖1所示),可以用來做單片機(jī)流水燈、跑馬燈。。。等實(shí)驗(yàn),電路原理圖見下圖3。圖3從原理圖可以看出,如我果們想讓接在P1.0口的LED1亮起來,那么我們只電平變?yōu)榈碗娖骄涂梢粤?;相反,如果要接在P1.0口的LED1熄滅,就要把P1.0口的電平變?yōu)楦唠娖骄涂梢?;同理,接在P1.1~P1.7口的其他7個LED的點(diǎn)亮和熄滅方法方法同LED1。因此,要把P1.0口的要實(shí)現(xiàn)流水燈功能,我們只要將LED2~LED8依次點(diǎn)亮、熄滅,依始類推,8只LED變會一亮一暗的做流水燈了。實(shí)現(xiàn)8個LED流水燈程序用中文表示為:P1.0低、延時、P1.0高、P1.1低、延時、P1.1高、P1.2低、延時、P1.2高、P1.3低、延時、P1.3高、P1.4低、延時、P1.4高、P1.5低、延時、P1.5高、P1.6低、延時、P1.6高、P1.7低、延時、P1.7高、返回到開始、程序結(jié)束。從上面中文表示看來實(shí)因?yàn)閱纹瑱C(jī)聽不懂我們的漢語的,只能接受二進(jìn)制的“1、0......”機(jī)器代碼。我們又怎樣來按我們的意思去工作呢?為了讓單片機(jī)工作,只能將程序?qū)憺槎M(jìn)制代碼交給其執(zhí)行;早期單片機(jī)開發(fā)人員就是使用人工編寫的二進(jìn)制代碼交給單片機(jī)去工作的。今天,我們不必用煩二進(jìn)制去編寫程序,完全可以將我們?nèi)菀桌斫獾摹俺绦蛘Z言”通過“翻譯”軟件“翻譯”成單片機(jī)所需的二進(jìn)制代碼,然后交給單片機(jī)去執(zhí)行。這里的“程序語言”目前主要有匯編語言和C語言兩種;在這里我們所說的“翻譯”軟件,同行們都叫它為“編譯器”,將“程序語言”通過編譯器產(chǎn)生單片機(jī)的二進(jìn)制代碼的過程叫編譯。前面說到,要想使LED1變亮,只需將對應(yīng)的單片機(jī)引腳電平變?yōu)榈碗娖骄涂梢粤恕,F(xiàn)在讓我們將上面提到的8只LED流水燈實(shí)驗(yàn)寫為匯編語言程序?,F(xiàn)單片機(jī)流水燈很簡單,但是我們不能說P1.0你變低,它就變低了。使單片機(jī)人的實(shí)現(xiàn)8個LED流水燈匯編語言程序liu01.asm;-----主程序開始-----START:CLRP1.0;P1.0輸出低電平,使LED1點(diǎn)亮ACALLDELAY;調(diào)用延時子程序SETBP1.0;P1.0輸出高電平,使LED1熄滅CLRP1.1;P1.1輸出低電平,使LED2點(diǎn)亮ACALLDELAY;調(diào)用延時子程序SETBP1.1;P1.1輸出高電平,使LED2熄滅CLRP1.2;P1.2輸出低電平,使LED3點(diǎn)亮ACALLDELAY;調(diào)用延時子程序SETBP1.2;P1.2輸出高電平,使LED3熄滅CLRP1.3;P1.3輸出低電平,使LED4點(diǎn)亮ACALLDELAY;調(diào)用延時子程序SETBP1.3;P1.3輸出高電平,使LED4熄滅CLRP1.4;P1.4輸出低電平,使LED5點(diǎn)亮ACALLDELAY;調(diào)用延時子程序SETBP1.4;P1.4輸出高電平,使LED5熄滅CLRP1.5;P1.5輸出低電平,使LED6點(diǎn)亮ACALLDELAY;調(diào)用延時子程序SETBP1.5;P1.5輸出高電平,使LED6熄滅CLRP1.6;P1.6輸出低電平,使LED7點(diǎn)亮ACALLDELAY;調(diào)用延時子程序SETBP1.6;P1.6輸出高電平,使LED7熄滅CLRP1.7;P1.7輸出低電平,使LED8點(diǎn)亮ACALLDELAY;調(diào)用延時子程序SETBP1.7;P1.7輸出高電平,使LED8熄滅ACALLDELAY;調(diào)用延時子程序AJMPSTART;8個LED流了一遍后返回到標(biāo)號START處再循環(huán);-----延時子程序-----DELAY:MOVR0,#255;延時一段時間D1:MOVR1,#255DJNZR1,$DJNZR0,D1RET;子程序返回END;程序結(jié)束在上面主程序中用到了五條匯編語言指令:CLR、ACALL、SETB、LJMP、END。CLR:是將其后面指定的位清為0,程序中使對應(yīng)端口輸出低電平ACALL:是子程序調(diào)用指令,程序中調(diào)用了DELAY延時子程序SETB:是將其后面指定的位置成1,程序中使對應(yīng)端口輸出高電平AJMP:是無條件跳轉(zhuǎn)指令,意思是:跳轉(zhuǎn)到指定的標(biāo)號處繼續(xù)運(yùn)行END:是程序結(jié)束的偽指令,意思是告訴編譯器,程序到此結(jié)束。偽指令只告訴編譯器此程序到此有何要求或條件,它不參與和影響程序的執(zhí)行。在上面源程序中"ACALLDELAY"指令的作用是調(diào)用DELAY延時子程序。為什么要使用這指令呢?如果不用該指令能夠?qū)崿F(xiàn)"流水"效果嗎?答案是肯定的,一定要用該指令才能看到我們需要的"流水"效果。如果不用該指令,則由于8個LED發(fā)光與熄滅的時間都很短,我們?nèi)庋蹮o法看到LED的熄滅與點(diǎn)亮,憑我們?nèi)庋劭吹降氖荓ED1~LED8都同時亮(半亮),而看不到“流水”效果的!注:初學(xué)者可以將上面源程序中所有"ACALLDELAY"指令行刪除后再編譯后燒寫到單片機(jī)進(jìn)行驗(yàn)證一下。產(chǎn)生這種現(xiàn)象主要是因?yàn)閱纹瑱C(jī)執(zhí)行每條指令的時間很短,我們知道實(shí)驗(yàn)板上單片機(jī)的時鐘高達(dá)11.0592MHz,在這個時鐘信號(即晶體振蕩信號)下,一個“機(jī)器周期”僅大約1.08uS(微秒)。本程序中我們用到的SETBP.x和CLRP.x均屬于單周期指令,也就是說,執(zhí)行一句SETBP.x用時僅1.08uS(微秒),CLRP.x也是1.08uS(微秒);也就是點(diǎn)亮和熄滅時間都為1.08uS(微秒),在如此高速的流水速度下,8個LED發(fā)光與熄滅的時間都很短,當(dāng)然憑我們的肉眼看不到“流水”效果了!這里需要說明的是,按匯編語法要求,所編制的程序(下稱源程序)之格式和書寫要求必須依下列原則:1、源程序必須為純文本格式文件,如用Windows“附件”中的“記事本”編寫的文本文件或用UltraEdit文本編輯器編輯;2、源程序的擴(kuò)展名應(yīng)是*.ASM;3、一行只能寫一條語句,以回車作為本句的結(jié)束,每一語句行長度應(yīng)少于80個字符(即40個漢字)。4、每行的格式應(yīng)為:標(biāo)號:命令參數(shù);注釋。即一行由四部份組成,各部份的順序不能搞錯,依實(shí)際要求可以缺省其中的一部份或幾部份,甚至全部省去,即空白行。需要使用標(biāo)號時標(biāo)號后面必須有“:”(冒號),而命令語句和參數(shù)之間必須用空格分開,如果命令有多個參數(shù),則參數(shù)與參數(shù)之間必須用“,”(逗號)分開,需要注釋時注釋前必須用“;”(分號),“;”后面的語句可以寫任何字符,包括漢字用于解釋前面的匯編語句,它將不參與匯編,不生成代碼。由于匯編程序?qū)ξ覀冞€不直觀,所以在編寫源程序時,應(yīng)當(dāng)養(yǎng)成多寫注釋的習(xí)慣,這樣有助于今后源程序的閱讀和維護(hù)。標(biāo)號是標(biāo)志程序中某一行的符號名,編譯后標(biāo)號的數(shù)值就是標(biāo)號所在行代碼的地址。在宏匯編ASM51中標(biāo)號的長度不受限制,但標(biāo)號中不能包含?:'或其它的一些特殊符號,也不能用漢字,可以用數(shù)字作標(biāo)號,但必須用字母開頭。當(dāng)標(biāo)號作參數(shù)用(如標(biāo)號作轉(zhuǎn)移地址),在命令后面出現(xiàn)時,必須舍去?:'(如上面程序中的AJMPSTART中的START是不能再有:)。每行只能有一個標(biāo)號,一個標(biāo)號只能用在一處,如果有兩行用了同一個標(biāo)號,則匯編時就會出錯。由于標(biāo)號的長度在源程序中的字母不區(qū)分大去區(qū)分不同的標(biāo)號。沒有限制,可以用有意義的英文或漢語拼音來說明行,使源程序讀起來更方便。小寫,也就是說start和START是一樣的,請不要用大小寫方式好啦!我們知道了匯編語言程序的規(guī)則,現(xiàn)在就動手編輯源程序吧。馬上啟動Keil單片機(jī)集成開發(fā)環(huán)境,建立新工程liu01.UV2,將上面的源程序liu01.asm導(dǎo)入到工程中,設(shè)置好Keil工程的編譯參數(shù),編譯得到HEX格式的目標(biāo)文件liu01.hex,用ISP編程器將目標(biāo)文件liu01.hex燒寫到AT89S51單片機(jī)中,接下來就是將燒寫好的AT89S51從編程器上取下,放到“S51增強(qiáng)型單片機(jī)實(shí)驗(yàn)板”上通電,我們就看到了LED1~LED8的"流水"效果了。圖4:ISP編程器燒寫目標(biāo)文件liu01.hex到此,我們做的流水燈已成功,工作原理也清楚啦,若你完全掌握了上面程序,那么你就可以將“流水燈”的流向改變一下,可以將從"左向右流"改為從"右向左流",也可以改為"兩邊向"、"內(nèi)部向外流"......,我想你一定能用前面學(xué)到的方法實(shí)現(xiàn)這些功能??赡苡行└呤终f,不必講究語言的簡練,只要能實(shí)基本指令(111條)的用法,清楚各個指令的功能,這是初學(xué)者還有更好的編程思路嗎?當(dāng)然有!請跟隨站長繼續(xù)學(xué)習(xí)下面的內(nèi)容。內(nèi)流前面的編程方法是最最笨的!不錯!但初學(xué)單片機(jī)初期可以現(xiàn)預(yù)先要求就好,最主要的是學(xué)好要知道的。那么在前面顯得有點(diǎn)復(fù)雜,下面我們就P1口送一個數(shù),這個數(shù)本身就讓P1.0先低,其他位為高,然后讓這個數(shù)據(jù)向高位移動不就實(shí)現(xiàn)“流水”效果啦?的確如此!8051指令中沒有讓P1數(shù)據(jù)移動的指令,但有對累加器ACC中數(shù)據(jù)左移或右移的指令,ACC在指令中常寫為A,累加器A數(shù)據(jù)左移指令為"RLA",累加器數(shù)據(jù)右移指令為"RRA",累加器在數(shù)據(jù)傳輸和數(shù)據(jù)處理過程中作用十分重要,累加器ACC為8位。他可與片內(nèi)所有單字節(jié)寄存器交換數(shù)據(jù),實(shí)際上P1和其他端口在單片機(jī)中也是一個寄存器。這樣我們可以將需移動的數(shù)據(jù)先放到ACC中,讓其移動,然后將ACC移動后的數(shù)據(jù)再轉(zhuǎn)送到P1口,這樣同樣可以實(shí)現(xiàn)“流水”效果。下面程序就是采用新的編程思路源程序liu02.asm。學(xué)習(xí)的程序中我們讓LED流水是去逐個控制P1端口的每個位來實(shí)現(xiàn)的,因此程序采用新的思路來編程。新的編程思路如下:我們在程序一開始就給實(shí)現(xiàn)8個LED流水燈匯編語言程序liu02.asm;-----主程序開始-----START:MOVACC,#0FEH;ACC中先裝入LED1亮的數(shù)MOVP1,ACC;將ACC的數(shù)據(jù)送P1口MOVR0,#7;將數(shù)據(jù)再移動7次就完成一LOOP:RLA;將ACC中的數(shù)據(jù)左移一位據(jù)(二進(jìn)制的11111110)個8位流水過程MOVP1,A;把ACC移動過的數(shù)據(jù)送p1口顯示ACALLDELAY;調(diào)用延時子程序DJNZR0,LOOP;沒有移動夠7次繼續(xù)移動AJMPSTART;移動完7次后跳到開始重來,以達(dá)到循環(huán)流動效果;-----延時子程序-----DELAY:MOVR0,#255;延時一段時間D1:MOVR1,#255DJNZR1,$DJNZR0,D1RET;子程序返回END;程序結(jié)束接下來,我們將上述程序編譯,并燒寫到實(shí)驗(yàn)芯片中,放到實(shí)驗(yàn)板上可以看到程序的"流水"效果是一樣的,但源程序看起來更加簡潔,直觀。其實(shí)8051單片機(jī)有111條指令,有的指令常用,有的指令不常用,只要遵守語法規(guī)則,你可以用這些指令“組合”成你想象到的任何程序。當(dāng)然,有時一條指令可以替代很多條指令,這樣會使程序簡潔,程序代碼減少,在編寫較大程序時可以讓程序存儲器放得下你需要的代碼,這也是單片機(jī)高手所追求的“程序簡潔高效”。當(dāng)然,初學(xué)者不必刻意去追求程序的簡潔高效,主要是要全面地掌握各種指令的應(yīng)用,只要你對基本指令都熟悉了,那么你也就可以編簡出潔高效的程序了,不過這編程“內(nèi)功”是需要你勤學(xué)苦練,日積月累的練習(xí)、實(shí)驗(yàn)才能達(dá)到的哦!馬上拿起你的實(shí)驗(yàn)板,現(xiàn)在就開始動手吧:)上面我們學(xué)習(xí)的兩個程序都是比較簡單的流水燈程序,"流水"花樣只能實(shí)現(xiàn)單一的"從左到右"流方式。下面介紹一個實(shí)用的流水燈程序,程序能夠?qū)崿F(xiàn)任意方式流水,而且流水花樣無限,只要更改流水花樣數(shù)據(jù)表的流水?dāng)?shù)據(jù)就可以隨意添加或改變流水花樣,真正實(shí)現(xiàn)隨心所欲的流水。只要將下面的程序稍稍修改一下,通過S51增強(qiáng)型單片機(jī)實(shí)驗(yàn)板的擴(kuò)展接口連接到霓虹燈高壓驅(qū)動接口板就可以驅(qū)動真正的霓虹燈了。實(shí)用的查表方式多功能流水燈程序liu03.asm;-----主程序開始-----ORG0000H;上電復(fù)位,程序從0000H開始執(zhí)行START:MOVSP,#60H;堆棧初始化為60HMOVDPTR,#LIU_TAB;流水花樣表首地址送DPTRLOOP:CLRAMOVCA,@A+DPTRCJNEA,#0FFH,SHOW;檢查流水結(jié)束標(biāo)志AJMPSTART;所有花樣流完,則從頭開始重復(fù)流SHOW:MOVP1,A;將數(shù)據(jù)送到P1口ACALLDELAYINCDPTRAJMPLOOP;-----延時子程序-----DELAY:MOVR0,#255;延時一段時間D1:MOVR1,#255DJNZR1,$DJNZR0,D1RET;子程序返回;-----下面是流水花樣數(shù)據(jù)表-----LIU_TAB:DB01111111B;二進(jìn)制表示的流水花樣數(shù)據(jù)DB10111111BDB11011111BDB11101111BDB11110111BDB11111011BDB11111101BDB11111110BDB11111110BDB11111101BDB11111011BDB11110111BDB11101111BDB11011111BDB10111111BDB01111111BDB7FH,0BFH,0DFH,0EFH,0F7H,0FBH,0FDH,0FEH;十六進(jìn)制表示DB0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,7FHDB7EH,0BDH,0DBH,0E7H,0E7H,0DBH,0BDH,7EHDB7FH,3FH,1FH,0FH,07H,03H,01H,00HDB0FFH;流水花樣結(jié)束標(biāo)志0FFHEND;程序結(jié)束分立元件直流穩(wěn)壓電源在電子電路及設(shè)備中,一般都需要穩(wěn)定的直流電源供電,所以在電子學(xué)習(xí)中學(xué)習(xí)直流穩(wěn)壓電源就是比較重要的一項(xiàng)學(xué)習(xí)任務(wù),這次我們先以分離的穩(wěn)壓電源為例學(xué)習(xí)。一、原理圖:二、元件:變壓器是220v—15v,D1、D2、D3、D4是IN4007整流管,Q1、Q2、Q4是9013,Q3是8050,C1是1000uF,C2是102三、原理分析:整個直流穩(wěn)壓電源分為變壓環(huán)節(jié)、整流電路、濾波電路、保護(hù)電路、調(diào)整管電路、比較放大電路、基準(zhǔn)電路、采樣電路。1、整流電路:整流電路采用的是全波整流電路,可以充分利用交流電并且脈動系數(shù)小,整流電路利用二管的單向?qū)щ娦?,?dāng)電網(wǎng)電壓在正半周期時,二極管D1和D4導(dǎo)通,當(dāng)電網(wǎng)處于負(fù)半周期時D2和D3導(dǎo)通,無論是正半周期還是負(fù)半周期流經(jīng)負(fù)載的電流方向都一樣,所以可以將正弦電壓變成脈動電壓,如下圖:極2、濾波電路:濾波電路應(yīng)用電容的充放電減小電壓的脈動成分,具體過程是:剛開始時,U2電壓大于電容兩端電壓,對電容進(jìn)行充電,在理想情況下,電
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 安證考試管理制度試題及答案
- 2025年陸上石油天然氣開采模擬考試題庫試卷及答案
- 保安證考試易錯題及答案
- 2025年保安證考生心理準(zhǔn)備試題及答案
- 項(xiàng)目可行性研究報(bào)告(參考范文)
- 助力摘要2025年保安證試題及答案
- 新產(chǎn)品研發(fā)立項(xiàng)報(bào)告
- 湖南科技大學(xué)《魯迅作品研究》2023-2024學(xué)年第二學(xué)期期末試卷
- 內(nèi)蒙古工業(yè)職業(yè)學(xué)院《道路通行能力分析》2023-2024學(xué)年第一學(xué)期期末試卷
- 陜西師范大學(xué)《生藥學(xué)專論》2023-2024學(xué)年第一學(xué)期期末試卷
- 2023年安徽高校教師崗前培訓(xùn)結(jié)業(yè)統(tǒng)考試題及參考答案
- 動火作業(yè)標(biāo)準(zhǔn)手冊
- 高速鐵路沉降變形觀測及評估方案
- 度帶和度帶代及中央子午線對照表
- 青島版五年級科學(xué)下冊-斜面
- 供應(yīng)商實(shí)地考察評分表設(shè)備材料類
- 帶圈數(shù)字序號1-96
- 日常工作紀(jì)律檢查記錄表
- 西城區(qū)學(xué)習(xí)探究診斷RJ七年級下含答案
- 擇日法八節(jié)順逆烏兔九星到方表三
- 行車檢測報(bào)告
評論
0/150
提交評論