版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
視覺實(shí)驗(yàn)LED流水燈第1頁/共28頁
目錄
引言
單個燈閃爍LED流水燈
戶外廣告燈第2頁/共28頁
引言小實(shí)驗(yàn):①注視右圖中心四個黑點(diǎn)15秒—30秒鐘;②然后朝自己身邊的墻壁看(白色的墻或白色的背景)或者看此頁面的白色部分;③看的同時快速眨幾下眼睛,看看您能看到什么?視覺暫留現(xiàn)象第3頁/共28頁
視覺暫留物體在快速運(yùn)動時,當(dāng)人眼所看到的影象消失后,人眼仍能繼續(xù)保持其影象0.1~0.4秒左右的圖象,這種現(xiàn)象被稱為視覺暫留現(xiàn)象。電影戶外動畫廣告電視視覺暫留現(xiàn)象應(yīng)用第4頁/共28頁
目錄
引言
單個燈閃爍LED流水燈
戶外廣告燈第5頁/共28頁LED驅(qū)動電路工作原理與單片機(jī)的P1口相連74HC04非門11111111P1=0XFF00000000P1.0=110P1=0X000000000011111111P1.0=001編程思路1:對P1.0進(jìn)行反復(fù)置1、清0操作,以實(shí)現(xiàn)引腳上的LED閃爍。第6頁/共28頁
單個LED閃爍范例1——程序代碼
.AREA HOME(ABS,CODE) .ORG 0x0000 ;復(fù)位向量,程序起始地址Start: SETB P1.0 ;P1.0=1,點(diǎn)亮LED CLR P1.0 ;P1.0=0,熄滅LED SJMP Start ;返回Start重復(fù)執(zhí)行編程思路1:對P1.0進(jìn)行反復(fù)置1、清0操作,以實(shí)現(xiàn)引腳上的LED閃爍。實(shí)驗(yàn)現(xiàn)象:LED不閃爍,不太亮又有點(diǎn)亮。每一個匯編程序必須要有一個以HOME命名的段,否則編譯時會出現(xiàn)警告。以句點(diǎn)開頭的命令為匯編命令
.AREA命令定義了一個絕對定位段——HOME
.org命令在HOME程序中進(jìn)行絕對定位,定位復(fù)位向量SDCC51編譯器僅支持0x0000格式,不支持0000H?!癝tart”為程序的標(biāo)號。在二進(jìn)制層面,標(biāo)號的值就是存儲器的地址,而標(biāo)號又是引用存儲器的值的別名,因此在語言層面標(biāo)號的值就是程序的地址。
地址操作碼與操作數(shù)助記符 注釋0000000011010010SETBP1.0;P1.0口置1,點(diǎn)亮LED00000001100100000000001011000010CLRP1.0;P1.0口清0,熄滅LED00000011100100000000010010000000SJMP0x0000;跳轉(zhuǎn)到程序頭,重復(fù)執(zhí)行0000010111111010機(jī)器語言匯編語言第7頁/共28頁
單個LED閃爍范例1——問題分析
編程思路1:對P1.0進(jìn)行反復(fù)置1、清0操作,以實(shí)現(xiàn)引腳上的LED閃爍。實(shí)驗(yàn)現(xiàn)象:LED不閃爍,不太亮又有點(diǎn)亮。問題解決:在置1/清0操作之后,增加零點(diǎn)幾秒或幾秒的延時。因此,如果要讓人眼看到LED閃爍,我們必須將LED點(diǎn)亮和熄滅的停頓時間擴(kuò)大接近秒的級別計算機(jī)指令的執(zhí)行速度非???,其執(zhí)行時間是微秒級的人眼的反應(yīng)時間:毫秒級第8頁/共28頁
單個LED閃爍范例2——編程思路編程思路2:對P1.0進(jìn)行置1、延時、清0、延時的反復(fù)操作,使LED閃爍。 .AREA HOME(ABS,CODE) .ORG 0x0000 ;復(fù)位向量,程序起始地址Start: SETB P1.0 ;P1.0=1,點(diǎn)亮LED CLR P1.0 ;P1.0=0,熄滅LED SJMP Start ;返回Start重復(fù)執(zhí)行;執(zhí)行延時Delay實(shí)體代碼;執(zhí)行延時Delay實(shí)體代碼第9頁/共28頁
單個LED閃爍范例2——延時程序編寫所謂停頓,就是站在那里不動,但單片機(jī)并不會停滯不前,它會一直以微秒級的速度狂奔。我們并不要求單片機(jī)停止運(yùn)行,而僅僅是讓P1.0口的輸出信號維持一段時間即可。 MOV R7,#0xFF ;1個機(jī)器周期Delay: DJNZ R7,Delay ;2個機(jī)器周期(*)
將立即數(shù)0xFF傳送到R7中標(biāo)號(R7-1)=0?YesNoDJNZ R7,$根據(jù)匯編語言編譯規(guī)則約定的正確書寫格式
$表示指令自身的存儲地址單片機(jī)的時鐘晶振為11.0592MHz
機(jī)器周期的頻率為(11.0592÷12)MHz
一個機(jī)器周期耗時為:12÷11.0592MHz=1.085μs
這段程序共占用機(jī)器周期:1+2×255=511
它的延時時間為:511×1.085μs=0.5545msR7初值0xFF,它將循環(huán)255次DJNZ R7,.DJNZ R7,.SDCC51不支持$,用句點(diǎn)來代替,否則編譯錯誤第10頁/共28頁
單個LED閃爍范例2——延時程序編寫所謂停頓,就是站在那里不動,但單片機(jī)并不會停滯不前,它會一直以微秒級的速度狂奔。我們并不要求單片機(jī)停止運(yùn)行,而僅僅是讓P1.0口的輸出信號維持一段時間即可。 MOV R7,#0xFF ;1個機(jī)器周期Delay: DJNZ R7,. ;2個機(jī)器周期(*)編程技巧:給R7賦值0xFF并不是最大的延時參數(shù),其最大延時參數(shù)應(yīng)該是0。對計算機(jī)而言,0減1的結(jié)果是0xFF,因此用0做延時參數(shù)可循環(huán)256次,其延時時間為(1+2×256)×1.085μs=556.605μs≈0.557ms。0.557ms對人眼來說仍然太快解決方法:在程序的外面再套上一層延時循環(huán),以增加時間長度。MOV R7,#0x0第11頁/共28頁
單個LED閃爍范例2——延時程序編寫
MOV R6,#0x0 ;1個機(jī)器周期Delay: MOV R7,#0x0 ;1個機(jī)器周期 DJNZ R7,. ;2個機(jī)器周期 DJNZ R6,Delay ;2個機(jī)器周期解決方法:在程序的外面再套上一層延時循環(huán),以增加時間長度。 MOV R7,#0x0 ;1個機(jī)器周期Delay: DJNZ R7,. ;2個機(jī)器周期(*)(R7-1)=0?YN給R7賦初值0(R6-1)=0?給R6賦初值0YN流程圖:它的延時時間為:
(1+(1+2×256+2)×256)×1.085μs
=143047ms≈
143ms如果延時還不夠,可以再加第三級延時,這樣就需要再增加一個工作寄存器。進(jìn)行簡單估算:如果第一級延時時間為0.557ms,則第2級最大延時是它的256倍,即:0.557ms×256=142.592ms≈143ms第3級延時時間又是第2級延時的256倍,即:143ms×256=36608ms≈36.6s如果再給程序加上2級延時,則它的最大延時時間將超過3個星期。
對于閃爍現(xiàn)象的觀察,143ms是一個比較理想的參數(shù)下一步:把延時程序插入程序第12頁/共28頁
單個LED閃爍范例2——程序代碼 .AREA HOME(ABS,CODE) .ORG 0x0000 ;復(fù)位向量,程序起始地址Start: SETB P1.0 ;P1.0=1,點(diǎn)亮LED CLR P1.0 ;P1.0=0,熄滅LED SJMP Start ;返回Start重復(fù)執(zhí)行;執(zhí)行延時Delay實(shí)體代碼;執(zhí)行延時Delay實(shí)體代碼
MOV R6,#0x0 ;1個機(jī)器周期Delay: MOV R7,#0x0 ;1個機(jī)器周期 DJNZ R7,$ ;2個機(jī)器周期 DJNZ R6,Delay ;2個機(jī)器周期 .AREA HOME(ABS,CODE) .ORG 0x0000 Start: SETB P1.0 ;P1.0=1,點(diǎn)亮LED
MOV R6,#0x0 ;延時143ms Delay: MOV R7,#0x0 DJNZ R7,. DJNZ R6,Delay CLR P1.0 ;P1.0=0,熄滅LED
MOV R6,#0x0 ;延時143ms Delay1: MOV R7,#0x0 DJNZ R7,. DJNZ R6,Delay1 SJMP Start ;返回Start,循環(huán)執(zhí)行程序編程思路2:對P1.0進(jìn)行置1、延時、清0、延時的反復(fù)操作,使LED閃爍。實(shí)現(xiàn)現(xiàn)象:人眼能觀察到LED的閃爍現(xiàn)象。
兩者的作用和功能一樣,卻占用2個程序空間能否使程序變得簡單一些
這兩條程序?qū)崿F(xiàn)的功能等價于CPLP1.0
第13頁/共28頁
單個LED閃爍范例2——程序代碼 .AREA HOME(ABS,CODE) .ORG 0x0000 Start: SETB P1.0 ;P1.0=1,點(diǎn)亮LED
MOV R6,#0x0 ;延時143ms Delay: MOV R7,#0x0 DJNZ R7,$
DJNZ R6,Delay CLR P1.0 ;P1.0=0,熄滅LED
MOV R6,#0x0 ;延時143ms Delay1: MOV R7,#0x0 DJNZ R7,$
DJNZ R6,Delay1 SJMP Start ;返回Start,循環(huán)執(zhí)行程序編程思路2:對P1.0進(jìn)行置1、延時、清0、延時的反復(fù)操作,使LED閃爍。實(shí)現(xiàn)現(xiàn)象:人眼能觀察到LED的閃爍現(xiàn)象。CPL P1.0 ;LED狀態(tài)取反
單個LED閃爍范例3——程序代碼編程思路3:程序優(yōu)化,用CPLP1.0替代SETBP1.0和CLRP1.0。該程序巧妙地利用了位操作的“非邏輯”指令,使延時程序的利用率達(dá)到了最大,比較一下這兩段程序的篇幅,就可以看出程序的思路以及對指令的熟練掌握是多么地重要。
地址
操作碼與操作數(shù)
助記符
注釋00000000 10110010 CPLP1.0 ;LED狀態(tài)取反00000001 1001000000000010 01111110 MOVR6,#0x0 ;延時143ms00000011 0000000000000100 01111111 MOVR7,#0x0000000101 0000000000000110 11011111 DJNZR7,. ;R7≠0,返回指令本身00000111 1111111000001000 11011110 DJNZR6,0x0004 ;R7≠0,返回地址0x000400001001 1111101000001010 10000000 SJMP0x0000 ;程序跳轉(zhuǎn)到0x0000,循環(huán)執(zhí)行程序00001010 11110100第14頁/共28頁
上升沿與下降沿LED點(diǎn)亮的過程就是在I/O口上產(chǎn)生了高電平“1”,并持續(xù)延時143ms;LED熄滅就是在I/O上產(chǎn)生了低電平“0”,并持續(xù)延時143ms。如此周而復(fù)始,LED既閃爍。143ms286ms
上升沿:數(shù)字電平由0變?yōu)?的那一瞬間,用“↑”表示
下降沿:數(shù)字電平由1變?yōu)?的那一瞬間,用“↓”表示
CLR
P1.0
NOP ;瞬間延時時間
SETB P1.0;產(chǎn)生“那一瞬間”的延時
NOP:一條只有一個機(jī)器周期的空操作指令用軟件來產(chǎn)生“↑”上升沿的代碼:第15頁/共28頁
關(guān)鍵知識點(diǎn)盡管上面的練習(xí)很簡單,但必須認(rèn)真實(shí)踐,搞清楚每一行代碼的來龍去脈??炊耍H僅代表你“暫時記住”了而已,但很快就會忘記。當(dāng)你將調(diào)試中出現(xiàn)的所有“問題(bug)”都找到時,才會體會更深。無數(shù)成功者的經(jīng)驗(yàn)表明:過程比結(jié)果更重要!“延時時間”的計算以及“上升沿與下降沿”是本節(jié)至關(guān)重要的知識點(diǎn)。其次,必須學(xué)會查閱相關(guān)的資料,了解單片機(jī)I/O口和非門集成電路驅(qū)動電流的大小,LED的導(dǎo)通電壓與回路電流以及限流電阻的計算。
第16頁/共28頁
目錄
引言
單個燈閃爍LED流水燈
戶外廣告燈第17頁/共28頁
流水燈現(xiàn)象分析人們時常看到戶外動畫廣告,一會兒從左到右地顯示,一會兒又從右到左地顯示,這就是流水燈效果,其特征是將想要顯示的畫面切割成N份,且每次只讓其中的一個畫面顯示,讓肉眼能夠看得清楚。一個簡單的例子:0.2秒0.2秒0.2秒0.2秒這個動畫就是由右邊四個圖形每個圖形顯示0.2s,循環(huán)顯示制作而成的。如果在中間再多加幾個中間顯示的圖形,并縮短每個圖形的顯示時間可以使動畫更流暢。視覺暫留效應(yīng)第18頁/共28頁LED流水燈范例1——現(xiàn)象實(shí)現(xiàn)編程思路1:將0x01、0x02、0x04、0x08、0x10、0x20、0x40、0x80依次送往單片機(jī)P1口,即將“MOVdirect,#data”指令使用8次,并加上合適的延時時間。
將使第1個LED燈點(diǎn)亮,其它燈熄滅
將使第2個LED燈點(diǎn)亮,其它燈熄滅
依次點(diǎn)亮第3、4、5、6、7、8個LED燈,并同時使其它燈熄滅 .AREA HOME(ABS,CODE) .ORG 0x0000 ;復(fù)位向量,程序起始地址Start: MOV P1,#0x01 ;LED的顯示狀態(tài):
;執(zhí)行延時Delay實(shí)體代碼
MOV P1,#0x02 ;LED的顯示狀態(tài):
;執(zhí)行延時Delay實(shí)體代碼
…… MOV P1,#0x80 ;LED的顯示狀態(tài):
;執(zhí)行延時Delay實(shí)體代碼
AJMP Start ;跳轉(zhuǎn)到Start,循環(huán)執(zhí)行程序?qū)嶒?yàn)現(xiàn)象:LED從右向左移動。優(yōu)點(diǎn):邏輯關(guān)系清楚,能夠達(dá)到目的。缺點(diǎn):代碼量大、效率低,書寫繁瑣。能否使程序變得簡單一些觀察分析:LED從右向左移動的過程中,每次只點(diǎn)亮一個LED,即數(shù)據(jù)0x01、0x02、0x04、0x08、0x10、0x20、0x40、0x80中的“1”是一個不斷地從右向左移動的過程。對照指令表發(fā)現(xiàn),邏輯運(yùn)算“RLCA”指令可以將保存在累加器A中的數(shù)據(jù)實(shí)現(xiàn)左移。
依次將0x01、0x02、0x03、……、0x80送往單片機(jī)P1口第19頁/共28頁LED流水燈范例2——程序優(yōu)化編程思路2:
先用“MOVA,#0x01”指令將數(shù)據(jù)0x01存放到累加器A中,然后再將A中的數(shù)據(jù)傳遞給P1口;接著使用“RLCA”移位運(yùn)算指令,將A的內(nèi)容全部向左移動1位。MOVA,#0x01
MOV P1,ACYALED顯示初始值:000000001
第1次移位:000000010第2次移位:000000100第3次移位:000001000第4次移位:000010000第5次移位:000100000第6次移位:001000000第7次移位:010000000第8次移位:
100000000第9次移位:0000000019種狀態(tài)循環(huán)顯示,既實(shí)現(xiàn)了“流水”燈現(xiàn)象第20頁/共28頁LED流水燈范例2——程序代碼 .AREA HOME(ABS,CODE) .ORG 0x0000 Start: MOV A,#0x01 ;操作數(shù)據(jù)取初值0x01,設(shè)定第一個LED亮Loop: MOV P1,A ;初次上電時LED的顯示狀態(tài): RLC
A ;左移一次后LED的顯示狀態(tài): MOV R6,#0x0 ;延時143ms
Delay: MOV R7,#0x0 DJNZ R7,. DJNZ R6,Delay SJMP Loop 編程思路2:程序優(yōu)化,使用“RLCA”指令來實(shí)現(xiàn)“流水”燈現(xiàn)象。A中的數(shù)據(jù)傳遞給P1口,點(diǎn)亮LED將0x01存放到A中流程圖:A中的數(shù)據(jù)左移1位延時143ms跳轉(zhuǎn)
地址操作碼與操作數(shù)助記符 注釋00000000 01110100 MOVA,#0x01 ;操作數(shù)據(jù)取初值0x01,第一個LED亮00000001 0000000100000010 11110101 MOVP1,A ;將A的內(nèi)容送到P1口00000011 1001000000000100 00110011 RLCA ;A的內(nèi)容左移一次00000101 01111110 MOVR6,#0x0 ;R6取延時初值0,延時143ms00000110 0000000000000111 01111111 MOVR7,#0x0 ;R7取延時初值000001000 0000000000001001 11011111 DJNZR7,.
;R7自減循環(huán)00001010 1111111000001011 11011111 DJNZR6,0x0007 ;R6自減循環(huán)00001100 1111101000001101 10000000 SJMP0x0002 ;返回0x0002,重復(fù)操作00001110 11110011第21頁/共28頁
關(guān)鍵知識點(diǎn)附錄A中的最后一題就是作者2010年面向全國電類專業(yè)招聘開發(fā)工程師的考題,其實(shí)就是從上面這個例子改過來,但很多學(xué)生做不出來。而事實(shí)上盡管上面這個很簡單,很多學(xué)生雖然看懂了,但由于沒有結(jié)合作者介紹的設(shè)計思想動手實(shí)踐,到頭來放下書本也就全部忘記了。因此,看懂了不見得真正地掌握了。如果將程序清單中“RLCA”指令改為“RLA”,請仔細(xì)觀察流水燈的效果有什么不同?另,如果要求讓流水燈從右到左變化,如何編程?第22頁/共28頁
目錄
引言
單個燈閃爍LED流水燈
戶外廣告燈第23頁/共28頁
查表法的提出總結(jié)分析在前面兩小節(jié)中,“求反和右移”2條指令的巧妙運(yùn)用都是在有邏輯規(guī)則的前提下的操作。問題提出解決辦法實(shí)際應(yīng)用中許多變化并不存在規(guī)律。且隨著顯示花樣的增多,如果繼續(xù)沿用上述編程方法,當(dāng)用戶需要修改顯示形式時,編程的工作量會越來越大。引進(jìn)新的處理方法——“列表”新的編程思路:將顯示花樣做成一個列表,用查表指令找到顯示數(shù)據(jù)區(qū)第24頁/共28頁
查表法思路分析Table: .DB 0x81,0x42,0x24,0x18,0x24,0x42,0x81,0x00 .DB 0x18,0x24,0x42,0x81,0x42,0x24,0x18,0x00 .DB 0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01 .DB 0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01 .DB 0x00,0xFF,0x00,0xFF .DB 0x55 列表:將一組數(shù)據(jù)按一定規(guī)律集中書寫在一起的方式。它的好處是可以將用戶最關(guān)心的最關(guān)鍵數(shù)據(jù)羅列在一起,看起來極其方便。如:
查表指令:MOVCA,@A+DPTRC:表示該操
溫馨提示
- 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年度跨境電商運(yùn)營個人勞務(wù)用工合同范本4篇
- 2025年度新型材料門窗研發(fā)與安裝合同3篇
- 2025年度個人房屋建設(shè)工期延誤賠償合同模板4篇
- 二零二五年度個人消費(fèi)貸款合同規(guī)范文本4篇
- 工程進(jìn)水排水承包合同(2篇)
- 二零二五版鋼筋防腐處理及采購合同3篇
- 中國民用機(jī)場行業(yè)展望2025年1月 -中誠信
- 二零二五版項目負(fù)責(zé)人任期責(zé)任與權(quán)益合同3篇
- 2025年鐵路貨物安全運(yùn)輸全面保障合同3篇
- 呼叫中心述職報告2000字【三篇】
- 2024年社區(qū)警務(wù)規(guī)范考試題庫
- 2024-2030年中國戶外音箱行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略分析報告
- 家務(wù)分工與責(zé)任保證書
- 消防安全隱患等級
- 溫室氣體(二氧化碳和甲烷)走航監(jiān)測技術(shù)規(guī)范
- 部編版一年級語文下冊第一單元大單元教學(xué)設(shè)計
- 《保單檢視專題》課件
- 2023山東春季高考數(shù)學(xué)真題(含答案)
- 職業(yè)衛(wèi)生法律法規(guī)和標(biāo)準(zhǔn)培訓(xùn)課件
- 高二下學(xué)期英語閱讀提升練習(xí)(二)
- 民事訴訟證據(jù)清單模板
評論
0/150
提交評論