單片機(jī)流水燈設(shè)計(jì)方法
圖4: ISP編程器燒寫目標(biāo)文件liu01.hex |
到此,我們做的流水燈已成功,工作原理也清楚啦,若你完全掌握了上面程序,那么你就可以將“流水燈”的流向改變一下,可以將從"左向右流"改為從"右向左流",也可以改為"兩邊向內(nèi)流"、"內(nèi)部向外流"......,我想你一定能用前面學(xué)到的方法實(shí)現(xiàn)這些功能。可能有些高手說(shuō),前面的編程方法是最最笨的!不錯(cuò)!但初學(xué)單片機(jī)初期可以不必講究語(yǔ)言的簡(jiǎn)練,只要能實(shí)現(xiàn)預(yù)先要求就好,最主要的是學(xué)好基本指令(111條)的用法,清楚各個(gè)指令的功能,這是初學(xué)者要知道的。那么還有更好的編程思路嗎?當(dāng)然有!請(qǐng)跟隨站長(zhǎng)繼續(xù)學(xué)習(xí)下面的內(nèi)容。
在前面學(xué)習(xí)的程序中我們讓LED流水是去逐個(gè)控制P1端口的每個(gè)位來(lái)實(shí)現(xiàn)的,因此程序顯得有點(diǎn)復(fù)雜,下面我們就采用新的思路來(lái)編程。新的編程思路如下:我們?cè)诔绦蛞婚_(kāi)始就給P1口送一個(gè)數(shù),這個(gè)數(shù)本身就讓P1.0先低,其他位為高,然后讓這個(gè)數(shù)據(jù)向高位移動(dòng)不就實(shí)現(xiàn)“流水”效果啦?的確如此!8051指令中沒(méi)有讓P1數(shù)據(jù)移動(dòng)的指令,但有對(duì)累加器ACC中數(shù)據(jù)左移或右移的指令,ACC在指令中常寫為A,累加器A數(shù)據(jù)左移指令為"RL A",累加器數(shù)據(jù)右移指令為"RR A",累加器在數(shù)據(jù)傳輸和數(shù)據(jù)處理過(guò)程中作用十分重要,累加器ACC為8位。他可與片內(nèi)所有單字節(jié)寄存器交換數(shù)據(jù),實(shí)際上P1和其他端口在單片機(jī)中也是一個(gè)寄存器。這樣我們可以將需移動(dòng)的數(shù)據(jù)先放到ACC中,讓其移動(dòng),然后將ACC移動(dòng)后的數(shù)據(jù)再轉(zhuǎn)送到P1口,這樣同樣可以實(shí)現(xiàn)“流水”效果。下面程序就是采用新的編程思路源程序liu02.asm。
|
接下來(lái),我們將上述程序編譯,并燒寫到實(shí)驗(yàn)芯片中,放到實(shí)驗(yàn)板上可以看到程序的"流水"效果是一樣的,但源程序看起來(lái)更加簡(jiǎn)潔,直觀。其實(shí)8051單片機(jī)有111條指令,有的指令常用,有的指令不常用,只要遵守語(yǔ)法規(guī)則,你可以用這些指令“組合”成你想象到的任何程序。當(dāng)然,有時(shí)一條指令可以替代很多條指令,這樣會(huì)使程序簡(jiǎn)潔,程序代碼減少,在編寫較大程序時(shí)可以讓程序存儲(chǔ)器放得下你需要的代碼,這也是單片機(jī)高手所追求的“程序簡(jiǎn)潔高效”。當(dāng)然,初學(xué)者不必刻意去追求程序的簡(jiǎn)潔高效,主要是要全面地掌握各種指令的應(yīng)用,只要你對(duì)基本指令都熟悉了,那么你也就可以編出簡(jiǎn)潔高效的程序了,不過(guò)這編程“內(nèi)功”是需要你勤學(xué)苦練,日積月累的練習(xí)、實(shí)驗(yàn)才能達(dá)到的哦!馬上拿起你的實(shí)驗(yàn)板,現(xiàn)在就開(kāi)始動(dòng)手吧:)
上面我們學(xué)習(xí)的兩個(gè)程序都是比較簡(jiǎn)單的流水燈程序,"流水"花樣只能實(shí)現(xiàn)單一的"從左到右"流方式。下面介紹一個(gè)實(shí)用的流水燈程序,程序能夠?qū)崿F(xiàn)任意方式流水,而且流水花樣無(wú)限,只要更改流水花樣數(shù)據(jù)表的流水?dāng)?shù)據(jù)就可以隨意添加或改變流水花樣,真正實(shí)現(xiàn)隨心所欲的流水。只要將下面的程序稍稍修改一下,通過(guò)S51增強(qiáng)型單片機(jī)實(shí)驗(yàn)板的擴(kuò)展接口連接到霓虹燈高壓驅(qū)動(dòng)接口板就可以驅(qū)動(dòng)真正的霓虹燈了。
實(shí)用的查表方式多功能流水燈程序 liu03.asm | ||||
|
評(píng)論