摘 要:本文通過(guò)Arduino單片機(jī)對(duì)數(shù)碼管的控制實(shí)現(xiàn)了交通燈倒計(jì)時(shí)顯示器設(shè)計(jì),使數(shù)碼管可以循環(huán)顯示數(shù)字9-1,并對(duì)運(yùn)行中出現(xiàn)的問(wèn)題進(jìn)行分析、解決。
關(guān)鍵詞:Arduino;數(shù)碼管
中圖分類(lèi)號(hào):TP273.5
電子產(chǎn)品智能化使人們可以在炎炎夏日躲在被窩里開(kāi)啟空調(diào)調(diào)節(jié)室內(nèi)溫度,茶余飯后坐在沙發(fā)上使用遙控器更換電視頻道,開(kāi)車(chē)迷路時(shí)可以打開(kāi)GPS導(dǎo)航尋找出路……其實(shí),生活中很多的電器或者設(shè)備的控制并不都需要使用高性能計(jì)算機(jī)實(shí)現(xiàn),而是采用單片機(jī)來(lái)實(shí)現(xiàn)控制的。在眾多的單片機(jī)開(kāi)發(fā)工具中,你不需要關(guān)心程序的具體實(shí)現(xiàn)過(guò)程,只需要學(xué)會(huì)使用單片機(jī)提供的工具包即可,簡(jiǎn)化了開(kāi)發(fā)過(guò)程。
1 開(kāi)發(fā)平臺(tái)及工具簡(jiǎn)介
1.1 Arduino單片機(jī)簡(jiǎn)介。Arduino是基于AVR指令集單片機(jī)的一種開(kāi)發(fā)平臺(tái),相對(duì)于傳統(tǒng)的單片機(jī)而言,Arduino基于C/C++這種入門(mén)級(jí)的程序設(shè)計(jì)語(yǔ)言基礎(chǔ)上進(jìn)行編程,大量庫(kù)文件可以直接從網(wǎng)絡(luò)中下載獲得,價(jià)格也比普通單片機(jī)便宜,軟硬件平臺(tái)均開(kāi)源,常用的計(jì)算機(jī)操作系統(tǒng)(Windows、Linux等)均支持Arduino軟件。Arduino電路板提供6個(gè)模擬輸入/輸出端口,14個(gè)數(shù)字輸入/輸出端口,可以讀取傳感器、各種開(kāi)關(guān)元件的信號(hào)來(lái)控制各種電子設(shè)備,實(shí)現(xiàn)時(shí)可以僅開(kāi)發(fā)一個(gè)Arduino獨(dú)立項(xiàng)目,也可以建立與PC機(jī)中程序的相互通訊。基于以上優(yōu)勢(shì),Arduino具有很好的發(fā)展前景。
1.2 編程語(yǔ)言。要實(shí)現(xiàn)設(shè)備控制,少不了進(jìn)行編寫(xiě)程序。在使用Arduino編程語(yǔ)言編程時(shí),很多參數(shù)設(shè)置均已函數(shù)化處理了,只需要用戶直接調(diào)用即可。要掌握好Arduino編程語(yǔ)言,就需要認(rèn)真復(fù)習(xí)C語(yǔ)言語(yǔ)法。Arduino編程語(yǔ)言中運(yùn)算符號(hào)、數(shù)據(jù)類(lèi)型、流程控制語(yǔ)句均可參考C語(yǔ)言要求,而Arduino程序的主要結(jié)構(gòu)包括初始化變量、設(shè)置管教模式的void setup()函數(shù)和類(lèi)似于C語(yǔ)言中void main()函數(shù)功能的循環(huán)執(zhí)行函數(shù)void loop()。Arduino編程語(yǔ)言提供數(shù)字I/O口輸入輸出模式的定義函數(shù)、模擬I/O輸入輸出函數(shù)、時(shí)間函數(shù)和數(shù)學(xué)函數(shù)等眾多函數(shù)。
1.3 主要硬件設(shè)備——數(shù)碼管。數(shù)碼管是一種用于顯示數(shù)字0-9(也可包含小數(shù)點(diǎn))的可發(fā)光元件,按照段數(shù)分有七段數(shù)碼管和八段數(shù)碼管,八段數(shù)碼管多一位小數(shù)點(diǎn)。若將數(shù)碼管的8個(gè)發(fā)光二極管的陽(yáng)極并接在一起,8個(gè)陰極分開(kāi),則為共陽(yáng)極數(shù)碼管;若將數(shù)碼管的8個(gè)發(fā)光二極管的陰極并接在一起,8個(gè)陽(yáng)極分開(kāi),則為共陰極數(shù)碼管。實(shí)際的數(shù)碼管引腳排列可按以下方法判別:從數(shù)碼管正面看,左下角第一個(gè)引腳為1腳,以逆時(shí)針?lè)较蛞来螢?~10腳,其中3腳和8腳連通,稱(chēng)為公共腳。
2 功能和硬件材料簡(jiǎn)介
2.1 功能簡(jiǎn)介。通過(guò)數(shù)碼管連線和程序編寫(xiě),通過(guò)程序控制數(shù)碼管連續(xù)循環(huán)顯示數(shù)字9~1,每顯示一個(gè)數(shù)字后間隔1s再顯示下一個(gè)數(shù)字。
2.2 工作原理。通過(guò)對(duì)數(shù)碼管特性的分析,將數(shù)碼管的管腳通過(guò)限流電阻的一端連接到數(shù)字I/O接口中,公共極接5V(共陽(yáng)極數(shù)碼管)或者接GND(共陰極數(shù)碼管)。對(duì)于共陽(yáng)極數(shù)碼管來(lái)說(shuō),通過(guò)程序給連接好數(shù)碼管的數(shù)字口設(shè)置低電平時(shí),數(shù)碼管在該管腳和公共極之間就會(huì)產(chǎn)生壓降,因此可以將數(shù)碼管相應(yīng)字段點(diǎn)亮。反言之,通過(guò)程序給連接好數(shù)碼管的數(shù)字口設(shè)置高電平時(shí),數(shù)碼管在該管腳和公共極之間則不產(chǎn)生壓降,數(shù)碼管相應(yīng)字段就不亮。
2.3 硬件材料清單。主要的硬件材料包括:1個(gè)Arduino 328控制板、1個(gè)原形開(kāi)發(fā)擴(kuò)展板、1個(gè)面包板、1個(gè)8位數(shù)碼管、8個(gè)220歐電阻、5根多彩面包板實(shí)驗(yàn)跳線、1根USB連接線。
2.4 硬件線路連接。將Arduino 328控制板、原形開(kāi)發(fā)擴(kuò)展板和面包板連接好,并將USB線接入相應(yīng)插口。按照數(shù)碼管的接線規(guī)則,從數(shù)碼管的正面看,將數(shù)碼管的第10個(gè)管腳(即左上角的管腳)連接1個(gè)220歐電阻,電阻的另一端連接數(shù)字口的第9個(gè)引腳。同理,將數(shù)碼管的第9、7、6個(gè)管腳分別通過(guò)1個(gè)電阻連接到數(shù)字口的第8、7、6個(gè)引腳。將數(shù)碼管的第5、4個(gè)管腳分別通過(guò)1個(gè)電阻和1根跳線連接到數(shù)字口的第5、4個(gè)引腳,第8個(gè)管腳(公共極)通過(guò)1根跳線與5V接口連接,另一個(gè)數(shù)碼管公共極即第3管腳不做連接。
3 驅(qū)動(dòng)程序開(kāi)發(fā)與運(yùn)行情況
3.1 驅(qū)動(dòng)程序設(shè)計(jì)。驅(qū)動(dòng)程序中共定義了9個(gè)全局變量,分別對(duì)應(yīng)數(shù)碼管的各數(shù)字段;定義了9個(gè)用于顯示9~1數(shù)字的子函數(shù)digital_9~digital_1供loop()函數(shù)調(diào)用;在執(zhí)行l(wèi)oop()函數(shù)之前,先在setup()函數(shù)中設(shè)置數(shù)字口4~11引腳為輸出模式。digital_1子函數(shù)代碼如下:
void digital_1(void)
{ unsigned char j;
digitalWrite(c,HIGH);
digitalWrite(b,HIGH);
for(j=7;j<=11;j++)
digitalWrite(j,HIGH);
digitalWrite(dp,HIGH);
}
3.2 運(yùn)行問(wèn)題。在運(yùn)行過(guò)程中,數(shù)碼管能夠顯示出各數(shù)字段和小數(shù)點(diǎn)段,說(shuō)明線路是連通的,因此排除電路板線路連接不通的問(wèn)題。仔細(xì)觀察數(shù)碼管顯示的數(shù)字段情況后,要顯示數(shù)字3本應(yīng)點(diǎn)亮數(shù)碼管的A、B、C、D和G段,但是實(shí)際數(shù)碼管點(diǎn)亮了E、F和DP段;要顯示數(shù)字4本應(yīng)點(diǎn)亮數(shù)碼管的B、C、F和G段,但是實(shí)際數(shù)碼管點(diǎn)亮了A、E、D和DP段;要顯示數(shù)字6本應(yīng)點(diǎn)亮數(shù)碼管的A、C、D、E、F和G段,但是實(shí)際數(shù)碼管點(diǎn)亮了B和DP段……以此類(lèi)推,發(fā)現(xiàn)數(shù)碼管點(diǎn)亮的數(shù)字段和應(yīng)該點(diǎn)亮的數(shù)字段均相反,因此考慮可能是線路接反導(dǎo)致的。
3.3 問(wèn)題分析與解決方法。重新檢查線路后發(fā)現(xiàn)連接線路是按照共陽(yáng)極數(shù)碼管的連接規(guī)則連接的,運(yùn)行問(wèn)題可能是由于數(shù)碼管陰極和陽(yáng)極電路接反導(dǎo)致的。從電路板上拆下數(shù)碼管仔細(xì)觀察后發(fā)現(xiàn),初始程序源代碼是根據(jù)共陽(yáng)極數(shù)碼管特性編寫(xiě)的,電路板也是根據(jù)共陽(yáng)極數(shù)碼管性質(zhì)連接的,而實(shí)際準(zhǔn)備的材料很可能是共陰極數(shù)碼管。
使用萬(wàn)用表進(jìn)行測(cè)試,把萬(wàn)用表調(diào)到測(cè)阻檔,紅筆端接公共端,黑筆端接任意段碼端,沒(méi)有數(shù)字段發(fā)亮;將紅筆端和黑筆端調(diào)換,有數(shù)字段發(fā)亮,因此使用的為共陰極數(shù)碼管,所以程序運(yùn)行后實(shí)現(xiàn)的效果與預(yù)期的正好相反。
經(jīng)過(guò)對(duì)原連接線路的分析,將數(shù)碼管的公共極改為接地,并對(duì)程序代碼中進(jìn)行修改,將代碼中所有設(shè)置為高電平的地方改為低電平,低電平的地方改為設(shè)置高電平。
交通燈倒計(jì)時(shí)顯示器的設(shè)計(jì),使我真正理解和掌握了數(shù)碼管的工作原理和應(yīng)用方法,并且為拓展設(shè)計(jì)奠定了基礎(chǔ)。比如可以進(jìn)一步設(shè)計(jì)智能擲骰器,即再添加一個(gè)按鍵,通過(guò)按鍵來(lái)控制數(shù)碼管數(shù)字的顯示,按下按鍵時(shí),數(shù)碼管停留在當(dāng)前數(shù)字不變;松開(kāi)按鍵,數(shù)碼管繼續(xù)顯示下一個(gè)數(shù)字并繼續(xù)循環(huán)顯示。
參考文獻(xiàn):
[1]邵軍.基于單片機(jī)控制的交通燈設(shè)計(jì)[J].中國(guó)新技術(shù)新產(chǎn)品,2010(14).
[2]王潔瓊,王紅衛(wèi),敬敏.基于單片機(jī)的實(shí)用交通燈設(shè)計(jì)[J].科協(xié)論壇,2009(06).
作者簡(jiǎn)介:王希娟(1983.01-),女,西安人,管理科學(xué)與工程教研室主任,講師,工程師,碩士,研究方向:數(shù)據(jù)庫(kù)、智能控制方向。
作者單位:陜西國(guó)際商貿(mào)學(xué)院,陜西咸陽(yáng) 712046
基金項(xiàng)目:本文為陜西省教育廳科研項(xiàng)目《空巢老人無(wú)線物聯(lián)智能家居系統(tǒng)研究(項(xiàng)目編號(hào):14JK2018)》基礎(chǔ)實(shí)驗(yàn)論文。