視覺實(shí)驗(yàn):LED流水燈.ppt_第1頁
視覺實(shí)驗(yàn):LED流水燈.ppt_第2頁
視覺實(shí)驗(yàn):LED流水燈.ppt_第3頁
視覺實(shí)驗(yàn):LED流水燈.ppt_第4頁
視覺實(shí)驗(yàn):LED流水燈.ppt_第5頁
已閱讀5頁,還剩22頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

5.1 視覺實(shí)驗(yàn):LED流水燈,目 錄,引 言,小實(shí)驗(yàn): 注視右圖中心四個黑點(diǎn)15秒 30秒鐘; 然后朝自己身邊的墻壁看(白色的墻或白色的背景)或者看此頁面的白色部分; 看的同時快速眨幾下眼睛,看看您能看到什么?,視覺暫留現(xiàn)象,視覺暫留,物體在快速運(yùn)動時,當(dāng)人眼所看到的影象消失后,人眼仍能繼續(xù)保持其影象0.10.4秒左右的圖象,這種現(xiàn)象被稱為視覺暫留現(xiàn)象。,目 錄,LED驅(qū)動電路工作原理,與單片機(jī)的P1口相連,74HC04非門,11111111,P1 = 0XFF,0 0 0 0 0 0 0 0,P1.0 = 1,1,0,P1 = 0X00,00000000,1 1 1 1 1 1 1 1,P1.0 = 0,0,1,編程思路1:對P1.0進(jìn)行反復(fù)置1、清0操作,以實(shí)現(xiàn)引腳上的LED閃爍。,單個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)警告。,“Start”為程序的標(biāo)號。在二進(jìn)制層面,標(biāo)號的值就是存儲器的地址,而標(biāo)號又是引用存儲器的值的別名,因此在語言層面 標(biāo)號的值就是程序的地址。,地址 操作碼與操作數(shù) 助記符 注釋 0000 0000 1101 0010 SETB P1.0 ;P1.0口置1,點(diǎn)亮LED 0000 0001 1001 0000 0000 0010 1100 0010 CLR P1.0 ;P1.0口清0,熄滅LED 0000 0011 1001 0000 0000 0100 1000 0000 SJMP 0x0000 ;跳轉(zhuǎn)到程序頭,重復(fù)執(zhí)行 0000 0101 1111 1010,機(jī)器語言,匯編語言,單個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閃爍范例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í)體代碼,單個LED閃爍范例2延時程序編寫,所謂停頓,就是站在那里不動,但單片機(jī)并不會停滯不前,它會一直以微秒級的速度狂奔。我們并不要求單片機(jī)停止運(yùn)行,而僅僅是讓P1.0口的輸出信號維持一段時間即可。,MOV R7, #0xFF ;1個機(jī)器周期 Delay: DJNZ R7, Delay ;2個機(jī)器周期 (*),標(biāo)號,根據(jù)匯編語言編譯規(guī)則約定的正確書寫格式,R7初值0xFF,它將循環(huán)255次,DJNZ R7, .,SDCC51不支持$,用句點(diǎn)來代替,否則編譯錯誤,單個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ì)算機(jī)而言,0減1的結(jié)果是0xFF,因此用0做延時參數(shù)可循環(huán)256次,其延時時間為(1 2 256) 1.085s 556.605s 0.557ms。,解決方法:在程序的外面再套上一層延時循環(huán),以增加時間長度。,MOV R7, #0x0,單個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ī)器周期 (*),它的延時時間為: (1(122562)256) 1.085s 143047ms 143ms 如果延時還不夠,可以再加第三級延時,這樣就需要再增加一個工作寄存器。,單個LED閃爍范例2程序代碼,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)象。,單個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)化,用CPL P1.0替代SETB P1.0和CLR P1.0。,地址 操作碼與操作數(shù) 助記符 注釋 0000 0000 1011 0010 CPL P1.0 ;LED狀態(tài)取反 0000 0001 1001 0000 0000 0010 0111 1110 MOV R6, #0x0 ;延時143ms 0000 0011 0000 0000 0000 0100 0111 1111 MOV R7,#0x00 0000 0101 0000 0000 0000 0110 1101 1111 DJNZ R7, . ;R70,返回指令本身 0000 0111 1111 1110 0000 1000 1101 1110 DJNZ R6, 0x0004 ;R70,返回地址0x0004 0000 1001 1111 1010 0000 1010 1000 0000 SJMP 0x0000 ;程序跳轉(zhuǎn)到0x0000,循環(huán)執(zhí)行程序 0000 1010 1111 0100,上升沿與下降沿,LED點(diǎn)亮的過程就是在I/O口上產(chǎn)生了高電平“1”,并持續(xù)延時143ms;LED熄滅就是在I/O上產(chǎn)生了低電平“0”,并持續(xù)延時143ms。如此周而復(fù)始,LED既閃爍。,143ms,286ms,CLR P1.0 NOP ;瞬間延時時間 SETB P1.0,;產(chǎn)生“那一瞬間”的延時,用軟件來產(chǎn)生“”上升沿的代碼:, 關(guān)鍵知識點(diǎn),盡管上面的練習(xí)很簡單,但必須認(rèn)真實(shí)踐,搞清楚每一行代碼的來龍去脈??炊?!僅僅代表你“暫時記住”了而已,但很快就會忘記。當(dāng)你將調(diào)試中出現(xiàn)的所有“問題(bug)”都找到時,才會體會更深。無數(shù)成功者的經(jīng)驗(yàn)表明:過程比結(jié)果更重要! “延時時間”的計(jì)算以及“上升沿與下降沿”是本節(jié)至關(guān)重要的知識點(diǎn)。其次,必須學(xué)會查閱相關(guān)的資料,了解單片機(jī)I/O口和非門集成電路驅(qū)動電流的大小,LED的導(dǎo)通電壓與回路電流以及限流電阻的計(jì)算。,目 錄,流水燈現(xiàn)象分析,人們時??吹綉敉鈩赢嫃V告,一會兒從左到右地顯示,一會兒又從右到左地顯示,這就是流水燈效果,其特征是將想要顯示的畫面切割成N份,且每次只讓其中的一個畫面顯示,讓肉眼能夠看得清楚。,一個簡單的例子:,這個動畫就是由右邊四個圖形每個圖形顯示0.2s,循環(huán)顯示制作而成的。 如果在中間再多加幾個中間顯示的圖形,并縮短每個圖形的顯示時間可以使動畫更流暢。,LED流水燈范例1現(xiàn)象實(shí)現(xiàn),編程思路1:將0x01、0x02、0x04、0x08、0x10、0x20、0x40、0x80依次送往單片機(jī)P1口,即將“MOV direct, #data”指令使用8次,并加上合適的延時時間 。,.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í)行程序,觀察分析:LED從右向左移動的過程中,每次只點(diǎn)亮一個LED,即數(shù)據(jù)0x01、0x02、0x04、0x08、0x10、0x20、0x40、0x80中的“1”是一個不斷地從右向左移動的過程。對照指令表發(fā)現(xiàn),邏輯運(yùn)算“RLC A”指令可以將保存在累加器A中的數(shù)據(jù)實(shí)現(xiàn)左移。,LED流水燈范例2程序優(yōu)化,編程思路2: 先用“MOV A,#0x01”指令將數(shù)據(jù)0x01存放到累加器A中,然后再將A中的數(shù)據(jù)傳遞給P1口; 接著使用“RLC A”移位運(yùn)算指令,將A的內(nèi)容全部向左移動1位。,MOV A, #0x01 MOV P1, A,CY A LED顯示,初始值: 0 0000 0001 ,第1次移位: 0 0000 0010 ,第2次移位: 0 0000 0100 ,第3次移位: 0 0000 1000 ,第4次移位: 0 0001 0000 ,第5次移位: 0 0010 0000 ,第6次移位: 0 0100 0000 ,第7次移位: 0 1000 0000 ,第8次移位: 1 0000 0000 ,第9次移位: 0 0000 0001,9種狀態(tài)循環(huán)顯示,既實(shí)現(xiàn)了“流水”燈現(xiàn)象,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)化,使用“RLC A”指令來實(shí)現(xiàn)“流水”燈現(xiàn)象。,地址 操作碼與操作數(shù) 助記符 注釋 0000 0000 0111 0100 MOV A, #0x01 ;操作數(shù)據(jù)取初值0x01,第一個LED亮 0000 0001 0000 0001 0000 0010 1111 0101 MOV P1, A ;將A的內(nèi)容送到P1口 0000 0011 1001 0000 0000 0100 0011 0011 RLC A ;A的內(nèi)容左移一次 0000 0101 0111 1110 MOV R6, #0x0 ;R6取延時初值0,延時143ms 0000 0110 0000 0000 0000 0111 0111 1111 MOV R7, #0x0 ;R7取延時初值0 0000 1000 0000 0000 0000 1001 11011111 DJNZ R7, . ;R7自減循環(huán) 0000 1010 1111 1110 0000 1011 1101 1111 DJNZ R6, 0x0007 ;R6自減循環(huán) 0000 1100 1111 1010 0000 1101 1000 0000 SJMP 0x0002 ;返回0x0002,重復(fù)操作 0000 1110 1111 0011, 關(guān)鍵知識點(diǎn),附錄A中的最后一題就是作者2010年面向全國電類專業(yè)招聘開發(fā)工程師的考題,其實(shí)就是從上面這個例子改過來,但很多學(xué)生做不出來。而事實(shí)上盡管上面這個很簡單,很多學(xué)生雖然看懂了,但由于沒有結(jié)合作者介紹的設(shè)計(jì)思想動手實(shí)踐,到頭來放下書本也就全部忘記了。因此,看懂了不見得真正地掌握了。 如果 將程序清單中“RLC A”指令改為“RL A”,請仔細(xì)觀察流水燈的效果有什么不同?另,如果要求讓流水燈從右到左變化,如何編程?,目 錄,查表法的提出,查表法思路分析,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ù)羅列在一起,看起來極其方便。如:,查表指令: MOVC A, A+DPTR C:表示該操作在代碼存儲區(qū)(CODE) DPTR:80C51單片機(jī)唯一的16位數(shù)據(jù)寄存器,數(shù)據(jù),根據(jù)A的值加上DPTR的值,使PC指向表內(nèi)相應(yīng)的地址取出所需要的數(shù)據(jù)。由此可見,要想改變顯示的花樣,那么只需修改顯示數(shù)據(jù)區(qū)的列表就可以了。,戶外廣告燈程序范例,.AREA HOME(ABS, CODE) .

溫馨提示

  • 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

提交評論