陳 剛,魯俊婷
(黃河水利職業(yè)技術(shù)學(xué)院,河南 開(kāi)封 475004)
隨著經(jīng)濟(jì)、社會(huì)和科技的發(fā)展,單片機(jī)的應(yīng)用不斷深入社會(huì)的各個(gè)領(lǐng)域, 其中MCS-51 系列單片機(jī)更是以?xún)r(jià)格和功能的優(yōu)勢(shì)被廣泛用于各種控制系統(tǒng)之中。 本系統(tǒng)采用51 系列單片機(jī)AT89S51,構(gòu)成控制電路,用匯編語(yǔ)言編寫(xiě)相應(yīng)的軟件程序,實(shí)用性強(qiáng)、操作簡(jiǎn)單。 以下分功能模塊對(duì)其進(jìn)行闡述。
所設(shè)計(jì)的交通燈管理系統(tǒng)能夠真實(shí)模擬雙干線(xiàn)交通信號(hào)燈的管理,設(shè)置兩組紅、黃、綠燈,并配置兩對(duì)LED 顯示器和一個(gè)緊急車(chē)輛放行按鈕。在正常情況下,兩個(gè)干線(xiàn)上的紅、黃、綠燈按四個(gè)狀態(tài)進(jìn)行轉(zhuǎn)換,并以倒計(jì)時(shí)的方式將剩余時(shí)間顯示在與每個(gè)干線(xiàn)對(duì)應(yīng)的兩位LED 顯示器上。 4 個(gè)狀態(tài)分別用S0、S1、S2 和S3 表示。 其工作過(guò)程如下: 起始狀態(tài)S0 為東西向紅燈、 南北向綠燈, 兩個(gè)方向都從45s開(kāi)始倒計(jì)時(shí),持續(xù)40s 后轉(zhuǎn)為狀態(tài)S1:狀態(tài)S1 為東西向紅燈,南北向黃燈以1Hz 頻率閃爍。 狀態(tài)S1 持續(xù)5s 后轉(zhuǎn)為狀態(tài)S2。 東西向綠燈,南北向紅燈,兩個(gè)方向都從35s 開(kāi)始倒計(jì)時(shí)。 持續(xù)30s 后再轉(zhuǎn)為狀態(tài)S3。狀態(tài)S3 為東西向黃燈以1Hz 頻率閃爍,南北向仍然為紅燈,狀態(tài)S3 持續(xù)5s 后,循環(huán)至狀態(tài)S0。兩個(gè)方向重新從45s 開(kāi)始倒計(jì)時(shí)。
所設(shè)計(jì)的交通燈管理系統(tǒng)須滿(mǎn)足急救車(chē)優(yōu)先通過(guò)的要求。 有急救車(chē)到達(dá)時(shí),兩向交通信號(hào)為全紅燈,以便讓急救車(chē)通過(guò)。 急救車(chē)通過(guò)后,交通燈恢復(fù)中斷前狀態(tài)。
本系統(tǒng)硬件電路的設(shè)計(jì)主要通過(guò)3 個(gè)大的電路模塊來(lái)實(shí)現(xiàn):紅綠燈控制電路、倒計(jì)時(shí)顯示電路。緊急狀態(tài)產(chǎn)生與解除電路。
關(guān)于紅綠燈控制電路的設(shè)計(jì), 系統(tǒng)使用AT89S51 的P0 口驅(qū)動(dòng)紅綠燈的亮滅。 P0.0 接?xùn)|西向紅燈,P0.1 接?xùn)|西向黃燈,P0.2 接?xùn)|西向綠燈,P0.5 接南北向紅燈,P0.6 接南北向黃燈,P0.7 接南北向綠燈。 LED1、LED2、LED3 分別為東西向的紅、黃、 綠燈,LED6、LED7、LED8 分別為南北向的紅、黃、綠燈。
關(guān)于倒計(jì)時(shí)顯示電路的設(shè)計(jì),根據(jù)位選線(xiàn)與段選線(xiàn)連接方法的不同,LED 顯示器分為靜態(tài)顯示和動(dòng)態(tài)顯示兩種方式。 段選線(xiàn)控制字符的選擇,位選線(xiàn)控制顯示位的亮、暗。 由于動(dòng)態(tài)顯示的硬件資源利用率高,而且采用串行輸出,形式可以大大節(jié)省單片機(jī)的內(nèi)部資源, 所以系統(tǒng)采用動(dòng)態(tài)顯示方式。串并轉(zhuǎn)換器采用74LS164, 在低電平時(shí)允許通過(guò)8mA 電流, 無(wú)需添加其他驅(qū)動(dòng)電路。 74LS164 為串入/并出的移位寄存器, 并行數(shù)據(jù)輸出端Q0~Q7 通過(guò)限流電阻分別接到顯示器的字形口(a~dp);單片機(jī)的P1.0~P1.3 連接顯示器的字位口。 74LS164 的A、B 為串行數(shù)據(jù)輸入端, 連接單片機(jī)的P1.4;CLK為移位脈沖輸入端,連接單片機(jī)的P1.5。
關(guān)于緊急狀態(tài)產(chǎn)生與解除電路,我們選用兩個(gè)按鈕SW1 和SW2。 SW1 為緊急狀態(tài)產(chǎn)生按鈕,與單片機(jī)的P3.2 引腳連接;SW2 為緊急狀態(tài)解除按鈕,與單片機(jī)的P3.3 引腳連接。 當(dāng)有緊急車(chē)輛要通過(guò)時(shí),按下SW1,兩個(gè)方向紅燈同時(shí)點(diǎn)亮,倒計(jì)時(shí)時(shí)間停止。 當(dāng)緊急車(chē)輛通過(guò)后,再按下SW2,則繼續(xù)緊急車(chē)輛通過(guò)前的狀態(tài)。
由此設(shè)計(jì)出交通燈管理系統(tǒng)電路 (如圖1 所示)。
圖1 交通燈管理系統(tǒng)電路圖Fig.1 Traffic light management system circuit diagram
表1 狀態(tài)控制碼Table 1 Status control code
本系統(tǒng)采用匯編語(yǔ)言編寫(xiě)程序,編程方面需解決以下3 個(gè)方面問(wèn)題。
由硬件電路圖可知, 單片機(jī)的P0 口連接發(fā)光二極管的陰極,所以通過(guò)編寫(xiě)指令將狀態(tài)控制碼送往單片機(jī)的P0 口,即可實(shí)現(xiàn)4 種紅綠燈狀態(tài)。 表1 列出了狀態(tài)控制碼。
(1)倒計(jì)時(shí)時(shí)間控制。 將需要顯示的倒計(jì)時(shí)時(shí)間始終存放在單片機(jī)內(nèi)部RAM 的R3 中。利用單片機(jī)內(nèi)部定時(shí)器T0 進(jìn)行定時(shí), 使定時(shí)器工作在定時(shí)方式1,定時(shí)時(shí)間t 選為10ms。 當(dāng)定時(shí)滿(mǎn)100 次時(shí),說(shuō)明1s 時(shí)間到,這時(shí)只需讓R3 中的倒計(jì)時(shí)數(shù)值減1 即可。
(2)顯示部分。 編寫(xiě)相應(yīng)的顯示子程序,使兩組顯示器顯示出R3 中的倒計(jì)時(shí)時(shí)間。 并把顯示子程序放入定時(shí)器0 中斷子程序中。 這樣可以每10ms調(diào)用一次顯示子程序,使顯示器隨時(shí)顯示出倒計(jì)時(shí)時(shí)間。
本系統(tǒng)以按下緊急按鈕SW1 為中斷申請(qǐng),表示有急救車(chē)通過(guò)。 這時(shí)兩向全為紅燈,倒計(jì)時(shí)時(shí)間停止。 按下解除按鈕SW2,中斷解除,返回原來(lái)的紅綠燈狀態(tài), 倒計(jì)時(shí)時(shí)間繼續(xù)計(jì)時(shí)。 狀態(tài)控制碼如表1所示。 由于緊急通車(chē)狀態(tài)的產(chǎn)生和解除是隨機(jī)的,所以對(duì)于緊急按鈕SW1 和解除按鈕SW2 的檢測(cè)不能間斷,因此,將這兩個(gè)按鈕的檢測(cè)程序放在定時(shí)器0 中斷子程序中,這樣每10ms 就會(huì)檢測(cè)一次中斷按鈕,達(dá)到了緊急通車(chē)狀態(tài)的控制要求。
通過(guò)以上分析,程序包含3 大功能模塊:主程序、定時(shí)器中斷子程序、動(dòng)態(tài)顯示子程序。 其中主程序與定時(shí)器中斷子程序在時(shí)間上是同步運(yùn)行的,動(dòng)態(tài)顯示子程序的功能是顯示R3 中的倒計(jì)時(shí)時(shí)間,供定時(shí)器中斷子程序調(diào)用,結(jié)構(gòu)較為簡(jiǎn)單。 以下給出主程序和定時(shí)器中斷子程序的流程圖。
圖2 主程序流程圖Fig.2 Main program flow
圖3 定時(shí)器斷子程序流程圖Fig.3 Timer interruption subroutine flow
本系統(tǒng)硬件電路簡(jiǎn)單, 軟件程序采用匯編語(yǔ)言編寫(xiě),與硬件電路配合使用,更為高效。 在現(xiàn)有道路條件下,對(duì)于提高交通控制和管理水平,合理使用現(xiàn)有交通設(shè)施,充分發(fā)揮其能力,更加靈活有效地提高道路的利用率,有較高的指導(dǎo)作用,可廣泛用于實(shí)際的交通燈控制系統(tǒng)之中。
[1] 胡健. 單片機(jī)原理及接口技術(shù)[M]. 北京: 機(jī)械工業(yè)出版社,2005:144.
[2] 胡健. 單片機(jī)原理及接口技術(shù)實(shí)踐教程[M]. 北京:機(jī)械工業(yè)出版社,2005:22-23,163.
[3] 陶春鳴. 單片機(jī)實(shí)用技術(shù)[M]. 北京:人民郵電出版社,2008:118.