吳文兵 脫建智

摘 要:本文基于STC89C52單片機應用為核心,從系統的硬件電路入手,將8位發光二極管通過共陰極接法接到單片機的P0端口,并通過控制P0口的電平高低以達到控制發光二極管,從而實現循環流水燈的設計。
【關鍵詞】發光二極管 單片機 流水燈
在我們的日常生活中,隨處可見各種美麗的霓虹燈,這些美麗的霓虹燈將我們的城市裝扮的絢麗多彩,霓虹燈廣告牌也已經成為各大商家爭相競爭的手段。其實這些霓虹燈是由發光二極管組合而成的,而這些發光二極管的組合多數也是基于單片機設計和制作出來的。而這些霓虹燈大多電路結構復雜,不容易實現。我們就以制作一臺簡易循環流水燈為例來介紹一下它基于51單片機的設計方案。
1 功能需求約定
本次設計主要實現8個發光管間隔200ms由上至下,再由下至上,一個輪回后再重復上個輪回,即用單片機來設計循環流水燈,就是實現這十五種狀態的循環切換控制。
2 開發方案的設計
本文分別從硬件設計方案和軟件設計方案兩個方面進行分析。
2.1 硬件設計方案
根據循環流水燈的十五種運行狀態,可以看出,每盞燈的每種狀態我們可以做同樣的處理,因此在電路設計中,可以在每種狀態下,對單片機的對應引腳做同樣的輸出,這樣我們就可以實現基于51單片機最小系統電路(如圖1a所示)流水燈模型的硬件設計了,值得說明的是我們這里采用的是共陰極連接方式(如圖1b所示),所謂共陰極連接方式即發光二極管的陰極連接在一起形成一個公共端。如圖1b中的D0-D7八個發光二極管就為共陰極連接方式。在這里每個發光二極管上還串聯了一個限流電阻,那此限流電阻的阻值又該如何選取呢?由于單片機上提供的電壓一般為+5V,發光二極管的導通壓降一般為1.7V左右,需要的電流一般為3mA,所以限流電阻阻值的計算公式為
2.2 軟件設計方案
狀態控制碼的確定
所謂狀態控制碼,就是要使流水燈工作在某一種狀態,我們應該向單片機的控制口所輸出的編碼,由前面的硬件設計可知,在某一個狀態下,當P0口的某一引腳輸出為1時,對應的發光二極管點亮,當P0口某一引腳輸出為0時,對應發光二極管熄滅,因此我們前方十五種狀態所對應的P0口控制碼可以依次寫出,以狀態1D0燈亮為例,我們可以得到00000001的一個狀態碼,也就是01(十六進制),因此我們只需要為01通過P0口輸出就可以實現狀態1的顯示了。
在確定了控制碼之后就可以進行程序流程的設計了,上電后,取狀態1的控制碼,并且通過P0口輸出實現D0燈亮,延遲一定時間后,取狀態2的控制碼實現D1燈亮,按照這個流程直到取狀態15的控制碼,實現對應燈點亮,再從狀態一開始執行,實現這十五種狀態的循環切換控制。
3 系統模型的實現
3.1 實現方法
對于單片機而言,一般編程完畢后先基于Proteus等平臺進行仿真測試,然后再進行電路的實現和產品的形成。
3.1.1 軟件實現
本次設計采用了C51語言,并基于keilC51開發環境進行實現,在main主程序當中,完成主循環任務,對于15種狀態的控制,其實是一樣的,都是將操作碼送給P0口,而且延時時間也是相同的,所以可以用一個延時子函數來編寫。
3.1.2 硬件實現
本次設計所需要的元器件是8個發光二極管、8只限流電阻、一塊STC89C52單片機、一個USB下載裝置以及若干個杜邦線。
3.2 實現操作
任務:本次設計主要實現8個發光管間隔200ms由上至下,再由下至上,一個輪回后再重復上個輪回。
我們將程序編寫為如圖2所示。
程序中用到了intrins.h庫函數中的_crol_和_cror_指令,如在main主程序中的大循環內,將i=0x01的值給P0,則D0燈點亮,延時一定時間后,循環左移一位,此時i的值變為0x02,再將i的值給P0,則D1燈亮,延時一定時間,按照這種方式直到i的值變為0x80,將此值再賦給P0,實現D7燈亮。接下來開始循環右移一位,此時i的中變為0x40,再將i的值給P0,則D6燈亮,延時一定時間,由此實現八個發光二極管從上而下,再從下到上依次點亮的任務。
4 結語
經過上面的設計,我們完成了循環流水燈的設計,循環流水燈相對于其他的設計,已經相當簡單,即沒有中斷也沒有定時/計數部分。但是這次設計,難點還是有的,比如發光二極管中高低電平的選擇,以及保護電阻的選取??傊ㄟ^設計該循環流水燈我們掌握了它基于51單片機的設計方法,同時可以將該方法推廣到我們其他基于51單片機的小制作中。
參考文獻
[1]張燦.單片機花樣流水燈設計.信息通信,2013(6).
[2]王莉莉,宋冬萍.基于單片機的花式流水燈的設計[J],廣西輕工業,2011(11).
作者簡介
吳文兵(1985-),女,河北省人?,F就職于濰坊工程職業學院。主要研究方向是機電一體化、單片機設計方面的研究。
脫建智(1981-),男,回族,山東省人?,F就職于濰坊工程職業學院。主要研究方向是單片機設計方面的研究。
作者單位
濰坊工程職業學院山工機電工程學院 山東省濰坊市 262500