摘要:流水燈能讓單片機初學者學習、理解數據發生的變化,是必須掌握的內容。流水燈可以有多種多樣的形式,比如簡單流水燈、多功能流水燈、左右跑馬燈、二進制跑馬燈、三路跑馬燈。這里我們就把它們列舉出來,用以加深大家的理解,提高學習者的興趣。
關鍵詞:簡單流水燈多功能流水燈左右跑馬燈二進制跑馬燈三路跑馬燈
1 簡單流水燈
實現P1口外接的8個LED從右到左的依次點亮的效果,請注意P1口接受到的數據的變化,還有就是認知使用延時子程序的必要性(指令的執行都是10-6s級的,不加延時子程序的話人眼根本就反應不過來)
START:
MOVA,#0FEH;#0FEH能讓A的最后一位為0
LOOP:
MOVP1,A ;A中的數送給P1口
CALLDELAY ;調用延時子程序
RLA ;A的左移一位能讓P1口跟著變化
SJMPLOOP;回到LOOP繼續執行
DELAY: ;延時子程序,改變送給R5、 R6、 R7的數的大小可以改變延遲時間,但因它們都是單字節的,所以不能大于255
MOVR5,#30
S0:MOVR6,#30
S1:MOVR7,#100
DJNZR7,$ ;$表示本行地址
DJNZR6,S1
DJNZR5,S0
RET
END
2 多功能流水燈
該程序的特點是把燈的變化情況先存在了外存中,它的功能如下:
①一個燈:從左到右,右到左,左到右,右到左
②兩個燈:兩邊到中間,中間到兩邊
③多個燈:從左到右1燈、2燈到8燈全亮,然后是由右到左的1、2..8
要實現以上變化,送給端口用來顯示的數據如下(注意每排先變成二進制后觀察0的變化):
DB 7FH,0BFH,0DFH,0EFH,0F7H,0FBH,0FDH,0FEH //用十六進制的表示方式
DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,7FH
DB 7FH,0BFH,0DFH,0EFH,0F7H,0FBH,0FDH,0FEH
DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,7FH
DB 7EH,0BDH,0DBH,0E7H,0E7H,0DBH,0BDH,7EH
DB 7FH,3FH,1FH,0FH,07H,03H,01H,00H
DB 0FEH,0FCH,0F8H,0F0H,0E0H,0C0H,80H,00H
3 左右跑馬燈
實現P1口外接的8個LED從右到左,再從左到右的依次點亮的效果。想產生這樣的效果,可以用下面的這兩條指令來實現,注意把累加器A里面的內容跟端口連接,和加上延時就可以了。
RLC A;帶進位左移
RRC A;帶進位右移
4 二進制跑馬燈
P1口八個燈作二進制加減法。理解二進值的加減計算,核心程序如下:
LOOP: MOVP1,A ;全不亮
CALLDELAY;延時。
DECA ;每次減一,要看加法就用ADD
JMPLOOP
5 三路跑馬燈
分別往端口送三個不同的數,理解數字和端口的對應關系
MAIN:MOV P1,#0DBH;11011011--零為亮
ACALL DELAY
MOV P1,#06DH;01101101
ACALL DELAY
MOV P1,#0B6H;10110110
ACALL DELAY
AJMP MAIN;
DELAY:…;延時子程序,請參照程序1
…
END
6 總結
通過上面列舉的簡單流水燈、多功能流水燈、左右跑馬燈、二進制跑馬燈、三路跑馬燈,我們可以看出,要實現流水等要注意兩方面。①就是數據的循環變化,它解決你想看見數據怎么變化的問題;②是延時程序的調用,它解決的時變化快慢的問題。通過流水燈的實現,我們可以清楚的“看見”數據的變化情況,能加深大家的理解,也可以引起大家的學習興趣。
參考文獻:
[1]陳麗秀.《單片機原理及應用》.東南大學出版社2007.3.
[2]鄭阿奇.《單片機應用實踐教程》.電子工業出版社2009.1.
[3]王靜霞.《單片機應用技術》.電子工業出版社2010.1.