




已閱讀5頁,還剩22頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
5.1 視覺實(shí)驗(yàn):LED流水燈,目 錄,引 言,小實(shí)驗(yàn): 注視右圖中心四個(gè)黑點(diǎn)15秒 30秒鐘; 然后朝自己身邊的墻壁看(白色的墻或白色的背景)或者看此頁面的白色部分; 看的同時(shí)快速眨幾下眼睛,看看您能看到什么?,視覺暫留現(xiàn)象,視覺暫留,物體在快速運(yùn)動(dòng)時(shí),當(dāng)人眼所看到的影象消失后,人眼仍能繼續(xù)保持其影象0.10.4秒左右的圖象,這種現(xiàn)象被稱為視覺暫留現(xiàn)象。,目 錄,LED驅(qū)動(dòng)電路工作原理,與單片機(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:對(duì)P1.0進(jìn)行反復(fù)置1、清0操作,以實(shí)現(xiàn)引腳上的LED閃爍。,單個(gè)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:對(duì)P1.0進(jìn)行反復(fù)置1、清0操作,以實(shí)現(xiàn)引腳上的LED閃爍。 實(shí)驗(yàn)現(xiàn)象: LED不閃爍,不太亮又有點(diǎn)亮。,每一個(gè)匯編程序必須要有一個(gè)以HOME命名的段,否則編譯時(shí)會(huì)出現(xiàn)警告。,“Start”為程序的標(biāo)號(hào)。在二進(jìn)制層面,標(biāo)號(hào)的值就是存儲(chǔ)器的地址,而標(biāo)號(hào)又是引用存儲(chǔ)器的值的別名,因此在語言層面 標(biāo)號(hà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ī)器語言,匯編語言,單個(gè)LED閃爍范例1問題分析,編程思路1:對(duì)P1.0進(jìn)行反復(fù)置1、清0操作,以實(shí)現(xiàn)引腳上的LED閃爍。 實(shí)驗(yàn)現(xiàn)象: LED不閃爍,不太亮又有點(diǎn)亮。 問題解決: 在置1/清0操作之后,增加零點(diǎn)幾秒或幾秒的延時(shí)。,單個(gè)LED閃爍范例2編程思路,編程思路2:對(duì)P1.0進(jìn)行置1、延時(shí)、清0、延時(shí)的反復(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í)行延時(shí)Delay實(shí)體代碼,;執(zhí)行延時(shí)Delay實(shí)體代碼,單個(gè)LED閃爍范例2延時(shí)程序編寫,所謂停頓,就是站在那里不動(dòng),但單片機(jī)并不會(huì)停滯不前,它會(huì)一直以微秒級(jí)的速度狂奔。我們并不要求單片機(jī)停止運(yùn)行,而僅僅是讓P1.0口的輸出信號(hào)維持一段時(shí)間即可。,MOV R7, #0xFF ;1個(gè)機(jī)器周期 Delay: DJNZ R7, Delay ;2個(gè)機(jī)器周期 (*),標(biāo)號(hào),根據(jù)匯編語言編譯規(guī)則約定的正確書寫格式,R7初值0xFF,它將循環(huán)255次,DJNZ R7, .,SDCC51不支持$,用句點(diǎn)來代替,否則編譯錯(cuò)誤,單個(gè)LED閃爍范例2延時(shí)程序編寫,所謂停頓,就是站在那里不動(dòng),但單片機(jī)并不會(huì)停滯不前,它會(huì)一直以微秒級(jí)的速度狂奔。我們并不要求單片機(jī)停止運(yùn)行,而僅僅是讓P1.0口的輸出信號(hào)維持一段時(shí)間即可。,MOV R7, #0xFF ;1個(gè)機(jī)器周期 Delay: DJNZ R7, . ;2個(gè)機(jī)器周期 (*),編程技巧:給R7賦值0xFF并不是最大的延時(shí)參數(shù),其最大延時(shí)參數(shù)應(yīng)該是0。對(duì)計(jì)算機(jī)而言,0減1的結(jié)果是0xFF,因此用0做延時(shí)參數(shù)可循環(huán)256次,其延時(shí)時(shí)間為(1 2 256) 1.085s 556.605s 0.557ms。,解決方法:在程序的外面再套上一層延時(shí)循環(huán),以增加時(shí)間長(zhǎng)度。,MOV R7, #0x0,單個(gè)LED閃爍范例2延時(shí)程序編寫,MOV R6, #0x0 ;1個(gè)機(jī)器周期 Delay: MOV R7, #0x0 ;1個(gè)機(jī)器周期 DJNZ R7, . ;2個(gè)機(jī)器周期 DJNZ R6, Delay ;2個(gè)機(jī)器周期,解決方法:在程序的外面再套上一層延時(shí)循環(huán),以增加時(shí)間長(zhǎng)度。,MOV R7, #0x0 ;1個(gè)機(jī)器周期 Delay: DJNZ R7, . ;2個(gè)機(jī)器周期 (*),它的延時(shí)時(shí)間為: (1(122562)256) 1.085s 143047ms 143ms 如果延時(shí)還不夠,可以再加第三級(jí)延時(shí),這樣就需要再增加一個(gè)工作寄存器。,單個(gè)LED閃爍范例2程序代碼,MOV R6, #0x0 ;1個(gè)機(jī)器周期 Delay: MOV R7, #0x0 ;1個(gè)機(jī)器周期 DJNZ R7, $ ;2個(gè)機(jī)器周期 DJNZ R6, Delay ;2個(gè)機(jī)器周期,.AREA HOME(ABS, CODE) .ORG 0x0000 Start: SETB P1.0 ;P1.0=1,點(diǎn)亮LED MOV R6, #0x0 ;延時(shí)143ms Delay: MOV R7, #0x0 DJNZ R7, . DJNZ R6, Delay CLR P1.0 ;P1.0=0,熄滅LED MOV R6, #0x0 ;延時(shí)143ms Delay1: MOV R7, #0x0 DJNZ R7, . DJNZ R6, Delay1 SJMP Start ;返回Start,循環(huán)執(zhí)行程序,編程思路2:對(duì)P1.0進(jìn)行置1、延時(shí)、清0、延時(shí)的反復(fù)操作,使LED閃爍。 實(shí)現(xiàn)現(xiàn)象: 人眼能觀察到LED的閃爍現(xiàn)象。,單個(gè)LED閃爍范例2程序代碼,.AREA HOME(ABS, CODE) .ORG 0x0000 Start: SETB P1.0 ;P1.0=1,點(diǎn)亮LED MOV R6, #0x0 ;延時(shí)143ms Delay: MOV R7, #0x0 DJNZ R7, $ DJNZ R6, Delay CLR P1.0 ;P1.0=0,熄滅LED MOV R6, #0x0 ;延時(shí)143ms Delay1: MOV R7, #0x0 DJNZ R7, $ DJNZ R6, Delay1 SJMP Start ;返回Start,循環(huán)執(zhí)行程序,編程思路2:對(duì)P1.0進(jìn)行置1、延時(shí)、清0、延時(shí)的反復(fù)操作,使LED閃爍。 實(shí)現(xiàn)現(xiàn)象: 人眼能觀察到LED的閃爍現(xiàn)象。,CPL P1.0 ;LED狀態(tài)取反,單個(gè)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 ;延時(shí)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ù)延時(shí)143ms;LED熄滅就是在I/O上產(chǎn)生了低電平“0”,并持續(xù)延時(shí)143ms。如此周而復(fù)始,LED既閃爍。,143ms,286ms,CLR P1.0 NOP ;瞬間延時(shí)時(shí)間 SETB P1.0,;產(chǎn)生“那一瞬間”的延時(shí),用軟件來產(chǎn)生“”上升沿的代碼:, 關(guān)鍵知識(shí)點(diǎn),盡管上面的練習(xí)很簡(jiǎn)單,但必須認(rèn)真實(shí)踐,搞清楚每一行代碼的來龍去脈??炊耍H僅代表你“暫時(shí)記住”了而已,但很快就會(huì)忘記。當(dāng)你將調(diào)試中出現(xiàn)的所有“問題(bug)”都找到時(shí),才會(huì)體會(huì)更深。無數(shù)成功者的經(jīng)驗(yàn)表明:過程比結(jié)果更重要! “延時(shí)時(shí)間”的計(jì)算以及“上升沿與下降沿”是本節(jié)至關(guān)重要的知識(shí)點(diǎn)。其次,必須學(xué)會(huì)查閱相關(guān)的資料,了解單片機(jī)I/O口和非門集成電路驅(qū)動(dòng)電流的大小,LED的導(dǎo)通電壓與回路電流以及限流電阻的計(jì)算。,目 錄,流水燈現(xiàn)象分析,人們時(shí)??吹綉敉鈩?dòng)畫廣告,一會(huì)兒從左到右地顯示,一會(huì)兒又從右到左地顯示,這就是流水燈效果,其特征是將想要顯示的畫面切割成N份,且每次只讓其中的一個(gè)畫面顯示,讓肉眼能夠看得清楚。,一個(gè)簡(jiǎn)單的例子:,這個(gè)動(dòng)畫就是由右邊四個(gè)圖形每個(gè)圖形顯示0.2s,循環(huán)顯示制作而成的。 如果在中間再多加幾個(gè)中間顯示的圖形,并縮短每個(gè)圖形的顯示時(shí)間可以使動(dòng)畫更流暢。,LED流水燈范例1現(xiàn)象實(shí)現(xiàn),編程思路1:將0x01、0x02、0x04、0x08、0x10、0x20、0x40、0x80依次送往單片機(jī)P1口,即將“MOV direct, #data”指令使用8次,并加上合適的延時(shí)時(shí)間 。,.AREA HOME(ABS, CODE) .ORG 0x0000 ;復(fù)位向量,程序起始地址 Start: MOV P1, #0x01 ;LED的顯示狀態(tài): ;執(zhí)行延時(shí)Delay實(shí)體代碼 MOV P1, #0x02 ;LED的顯示狀態(tài): ;執(zhí)行延時(shí)Delay實(shí)體代碼 MOV P1, #0x80 ;LED的顯示狀態(tài): ;執(zhí)行延時(shí)Delay實(shí)體代碼 AJMP Start ;跳轉(zhuǎn)到Start,循環(huán)執(zhí)行程序,觀察分析:LED從右向左移動(dòng)的過程中,每次只點(diǎn)亮一個(gè)LED,即數(shù)據(jù)0x01、0x02、0x04、0x08、0x10、0x20、0x40、0x80中的“1”是一個(gè)不斷地從右向左移動(dòng)的過程。對(duì)照指令表發(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)容全部向左移動(dòng)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è)定第一個(gè)LED亮 Loop: MOV P1, A ;初次上電時(shí)LED的顯示狀態(tài): RLC A ;左移一次后LED的顯示狀態(tài): MOV R6, #0x0 ;延時(shí)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,第一個(gè)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取延時(shí)初值0,延時(shí)143ms 0000 0110 0000 0000 0000 0111 0111 1111 MOV R7, #0x0 ;R7取延時(shí)初值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)鍵知識(shí)點(diǎn),附錄A中的最后一題就是作者2010年面向全國(guó)電類專業(yè)招聘開發(fā)工程師的考題,其實(shí)就是從上面這個(gè)例子改過來,但很多學(xué)生做不出來。而事實(shí)上盡管上面這個(gè)很簡(jiǎn)單,很多學(xué)生雖然看懂了,但由于沒有結(jié)合作者介紹的設(shè)計(jì)思想動(dòng)手實(shí)踐,到頭來放下書本也就全部忘記了。因此,看懂了不見得真正地掌握了。 如果 將程序清單中“RLC A”指令改為“RL A”,請(qǐng)仔細(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:表示該操作在代碼存儲(chǔ)區(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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 河北2025年河北省氣象部門招聘應(yīng)屆畢業(yè)生(第三批)筆試歷年參考題庫附帶答案詳解
- 攀枝花2025年攀枝花市鹽邊縣事業(yè)單位新一輪引才17人筆試歷年參考題庫附帶答案詳解
- 南京中醫(yī)藥大學(xué)翰林學(xué)院《外國(guó)文學(xué)經(jīng)典》2023-2024學(xué)年第二學(xué)期期末試卷
- 云南林業(yè)職業(yè)技術(shù)學(xué)院《社會(huì)政策》2023-2024學(xué)年第二學(xué)期期末試卷
- 廣州幼兒師范高等??茖W(xué)校《汽車原理與構(gòu)造》2023-2024學(xué)年第二學(xué)期期末試卷
- 綿陽飛行職業(yè)學(xué)院《中學(xué)生物學(xué)教學(xué)技能訓(xùn)練》2023-2024學(xué)年第二學(xué)期期末試卷
- 宿州學(xué)院《農(nóng)產(chǎn)品營(yíng)銷與電子商務(wù)》2023-2024學(xué)年第二學(xué)期期末試卷
- 遼寧工業(yè)大學(xué)《數(shù)據(jù)分析導(dǎo)論》2023-2024學(xué)年第二學(xué)期期末試卷
- 湖北幼兒師范高等??茖W(xué)校《中級(jí)英語閱讀2》2023-2024學(xué)年第二學(xué)期期末試卷
- 東北大學(xué)《軟件體系結(jié)構(gòu)原理與方法》2023-2024學(xué)年第二學(xué)期期末試卷
- 【鄉(xiāng)村空心化的風(fēng)險(xiǎn)探究文獻(xiàn)綜述3000字】
- 煙草公司正式員工勞動(dòng)合同
- DL-T2528-2022電力儲(chǔ)能基本術(shù)語
- 《中電聯(lián)團(tuán)體標(biāo)準(zhǔn)-220kV變電站并聯(lián)直流電源系統(tǒng)技術(shù)規(guī)范》
- MOOC 模擬電子電路實(shí)驗(yàn)-東南大學(xué) 中國(guó)大學(xué)慕課答案
- (正式版)SHT 3158-2024 石油化工管殼式余熱鍋爐
- 山西開放大學(xué)2024年《學(xué)前兒童心理健康教育》形成性考核測(cè)試1-4答案
- (2024年)面神經(jīng)炎課件完整版
- 房屋建筑勘察設(shè)計(jì)投標(biāo)方案
- 《中醫(yī)常用護(hù)理技術(shù)基礎(chǔ)》課件-一般護(hù)理-第一節(jié)病情觀察
- 土木工程實(shí)習(xí)報(bào)告與日志
評(píng)論
0/150
提交評(píng)論