基于89C52單片機(jī)的紅外遙控雙模式交通燈控制系統(tǒng)
摘要:針對實現(xiàn)交通燈系統(tǒng)的雙模式控制的目的。采用以C 編寫程序,設(shè)計電路的軟件部分和以89C52 單片機(jī)為核心,連同紅外接收模塊、交通燈顯示模塊和其它元器件,設(shè)計電路的硬件部分的軟硬件相結(jié)合的方法。即軟件部分:在KEIL 環(huán)境中編寫并驗證C 程序。硬件部分:通過單片機(jī)控制交通燈和數(shù)碼管的顯示,同時可利用按鍵或紅外遙控切換交通燈系統(tǒng)運行模式,即普通模式和上下班高峰模式。此系統(tǒng)可保證在平時,車輛與行人有較長時間穿過馬路。通過切換運行模式,此系統(tǒng)又可有效防止上下班時交通堵塞和車輛、人員滯留。比起普通交通燈控制系統(tǒng),此系統(tǒng)提高了交通控制的效率,保證交通有序進(jìn)行。
0 引言
近年來,隨著經(jīng)濟(jì)的快速發(fā)展,城市中車輛不斷增多。由此引起交通擁擠、堵塞,交通事故頻發(fā)等一系列問題。交通燈是城市重要的交通指揮系統(tǒng),與人們的日常生活有十分密切的關(guān)系,它不僅關(guān)系到城市交通的有序進(jìn)行,也影響到人們的出行便捷和安全。設(shè)計一個穩(wěn)定、靈活、便捷的交通燈控制系統(tǒng)具有必要性和現(xiàn)實性。然而現(xiàn)實生活中很多交通燈都是按照一個時間間隔切換。而本設(shè)計中交通燈可根據(jù)平時或上下班高峰期來轉(zhuǎn)換紅綠燈切換時間,如上下班高峰期紅燈轉(zhuǎn)換時間設(shè)置為40 秒,平時設(shè)置為60 秒。這樣可有效緩解在上下班時間,由于紅燈設(shè)置時間太長,為了趕時間而闖紅燈現(xiàn)象。同時,有效緩解交通堵塞現(xiàn)象。
1 交通管理方案的論證
1968 年,聯(lián)合國《道路交通和道路標(biāo)志信號協(xié)定》對各種信號燈的含義作了規(guī)定:綠燈亮允許通行;紅燈亮,禁止通行;黃燈亮,提示人們注意紅,綠燈的狀態(tài)即將切換。為了方便說明,現(xiàn)假設(shè)東西,南北走向的兩干道相交于一處十字路口。同時,為了保證行人安全,設(shè)置A,B,C,D 四條人行道。如圖1 所示。
圖1. 路口指示燈示意圖
路口指示燈工作情況說明:當(dāng)東西道為紅燈,此道車輛禁止通行,此時B,D 人行道上行人可通過馬路;同時南北道為綠燈,此道車輛通過,此時A,C 人行道上行人禁止通行,時間為60 秒。黃燈閃爍5 秒,警示車輛和行人紅,綠燈的狀態(tài)即將切換。當(dāng)東西道為綠燈,此道車輛通行,此時B,D 人行道上行人禁止通過馬路;同時南北道為紅燈,此道車輛禁止通過,此時A,C 人行道上行人可通行,時間為60 秒。依此循環(huán),即可指引車輛有序行駛,行人安全通過馬路。
2 系統(tǒng)硬件電路的設(shè)計
2.1 系統(tǒng)電路總體概要
本設(shè)計主要由89C52 單片機(jī)、交通燈顯示模塊、紅外接收模塊、數(shù)碼管、按鍵等組成。
89C52 單片機(jī)為系統(tǒng)主控制器,控制其他模塊協(xié)調(diào)工作;按鍵和紅外接收模塊用來切換系統(tǒng)工作模式:正常模式或上下班高峰模式。即正常模式下,紅燈設(shè)置的時間為60 秒;上下班高峰模式下,紅燈設(shè)置的時間為40 秒。交通燈顯示模塊用以指引各路道車輛的通行,數(shù)碼管為了顯示交通紅綠燈所剩的切換時間,行人依此判斷是否有足夠時間過馬路,是走還是停。其主要框圖如圖2 所示。
圖 2. 系統(tǒng)設(shè)計總框圖
2.2 硬件電路的設(shè)計
2.2.1 控制器的選擇
作為交通智能控制的中心,控制器的選擇十分重要。我們常見的有:(1)現(xiàn)場可編程門陣列FPGA;(2)可編程邏輯控制器PLC;(3)51 系列單片機(jī)等。這是一種較為實用的系統(tǒng),所以要從價格和使用方面等因素綜合考慮。以上3 種控制器都可以很好的完成交通燈的智能控制,而FPGA 和PLC 操作和完成簡單,但成本價格較高,性價比低。對于本設(shè)計,51 系列單片機(jī)完全可以實現(xiàn)其控制,且性能良好,價格低廉。因此選用大家所熟知的89C52單片機(jī)作為控制器。
2.2.2 紅外發(fā)射接收原理
圖3 紅外發(fā)射與接收原理圖
通用紅外遙控系統(tǒng)由發(fā)射和接收兩大部分組成,應(yīng)用編/解碼專用集成電路芯片來進(jìn)行控制如圖3所示。紅外接收頭的工作原理:內(nèi)置接收管將紅外發(fā)射管發(fā)射出來的光信號轉(zhuǎn)換為微弱的電信號,此信號經(jīng)由IC 內(nèi)部放大器進(jìn)行放大,然后通過自動增益控制、帶通濾波、解調(diào)變、波形整形后還原為遙控器發(fā)射出來的原始編碼,經(jīng)由接收頭的信號輸出腳輸入到電器上的編碼識別電路。
2.2.3 硬件電路總圖
本設(shè)計選用 89C52單片機(jī)作為控制器,控制系統(tǒng)的正常運行。本系統(tǒng)有兩種運行模式,普通模式和上下班高峰模式??赏ㄟ^按鍵或紅外遙控對系統(tǒng)運行模式進(jìn)行切換。按鍵切換適于值班人員使用,而紅外遙控切換適于交警巡查時使用,方便快捷?,F(xiàn)簡要介紹該系統(tǒng)工作原理:89C52 單片機(jī)通過鎖存器控制數(shù)碼管顯示紅綠燈時間,東西、南北四組數(shù)碼管時間顯示相同。P1^2~P1^7 控制交通燈的顯示。P1^2~P1^4 控制東西道兩組交通燈的顯示,這兩組紅綠燈通過單片機(jī)控制顯示相同顏色的指示燈并且切換時間相同;而P1^5~P1^7 控制南北道兩組交通燈的顯示,這兩組紅綠燈同樣通過單片機(jī)控制顯示相同顏色的指示燈并且切換時間相同。P3^5 接按鍵S1,通過此按鍵可控制系統(tǒng)運行模式。P3^2 接紅外接收模塊,通過此接口可紅外遙控切換系統(tǒng)運行模式。如圖4 所示:
圖4,硬件電路圖
到此,硬件電路搭建完成。
3 系統(tǒng)軟件的設(shè)計
近年來,單片機(jī)開發(fā)技術(shù)不斷發(fā)展,從普遍使用匯編語言到逐漸使用高級語言,單片機(jī)的開發(fā)軟件也在不斷發(fā)展,Keil 軟件是目前最流行開發(fā)MCS-51 系列單片機(jī)程序的軟件。
Keil 提供了包括C 編譯器、宏匯編、連接器、庫管理和一個功能強大的仿真調(diào)試器等在內(nèi)的完整開發(fā)方案,通過一個集成開發(fā)環(huán)境(uVisON)將這些部分連在一起。
因此該系統(tǒng)的軟件部分在Keil 環(huán)境下進(jìn)行程序的編程,下面主要介紹程序中的主要子程序和一些重要部分:
初始函數(shù)主要是對定時/計數(shù)器和一些參數(shù)初值的設(shè)定:
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uint aa,num,MODEL1,numa,HMODE1;
uchar shi,ge,gtime,rtime;
… …
sbit dula=P1^0; // 段選
sbit wela=P1^1; // 位選
sbit LED1=P1^2; // 東西(紅燈)
sbit LED2=P1^5; // 南北(紅燈)
sbit LED3=P1^6; // 南北(黃燈)
sbit LED4=P1^3; // 東西(黃燈)
sbit LED5=P1^7; // 南北(綠燈)
sbit LED6=P1^4; // 東西(綠燈)
sbit KEY1=P3^5;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar table1[]={0xbf,0x7f};
void delay(uchar z) // 延時函數(shù)
{ uchar x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--); }
void init()
{ TMOD=0x01; // 選擇方式一,16 位計數(shù)器
TH0=15536/256;
TL0=15536%256; // 定時器高、低位,置入初值
EA=1; // 中斷允許總控制位
ET0=1; // 定時器0 中斷允許控制位
TR0=1; // 定時器0 運行控制位
aa=0;
gtime=60;
rtime=40;
num=1;
numa=1;
MODEL1=1;
HMODE1=0;}
定時的函數(shù)及原理:
當(dāng)單片機(jī)工作于定時狀態(tài)時,定時/計數(shù)器對機(jī)器周期進(jìn)行計數(shù),每個機(jī)器周期包括12個振蕩周期,以晶振頻率為12MHZ 為例,則:
1 個機(jī)器周期=12/晶振頻率=12/12000000=0.001ms定時時間為:TC=XTP。其中,TP 為機(jī)器周期,TC 為定時時間。
則應(yīng)裝入計數(shù)/定時器的初值為:
(注:M=2n , TP 為機(jī)器周期,TC 為定時時間)
對于方式1,一次最大的定時時間為:T=(216-0)×0.001=65.536ms ,為了便于計算,設(shè)定每次最大定時時間為50ms,計算應(yīng)裝入的初值:N = 65536 ? 50000 = 15536
顯示子函數(shù):
通過單片機(jī)對鎖存器進(jìn)行位選,段選的控制,使數(shù)碼管顯示需要的數(shù)字。
void display(shi,ge)
{ dula=1;
P0=table[shi];
dula=0;
wela=1;
P0=table1[0];
wela=0;
delay(5);
P0=0xff; // 對數(shù)碼管消影
dula=1;
P0=table[ge];
dula=0;
wela=1;
P0=table1[1];
wela=0;
delay(5);
P0=0xff;}
模式一函數(shù):
void mod1()
{ if(num==1&>ime>5) // 東西道紅燈亮,南北道綠燈亮,最后5 秒切換成黃燈
{ LED5=0;
LED1=0; }
if(num==2) // 東西道綠燈亮,南北道紅燈亮
{ LED2=0;
LED6=0;
LED5=1;
LED3=1;
LED1=1; }
if(num==1&>ime==5) // 東西道紅燈亮,南北道黃燈亮5 秒
{ LED5=1;
LED2=1;
LED3=0; }
shi=gtime/10;
ge=gtime%10;
if(aa==20) // 50ms×20=1s, 即過1s 數(shù)碼管數(shù)字減1
{ aa=0;
gtime--; }
display(shi,ge);
if(gtime==0&&num!=2)
{ gtime=60;
num=2; }
if(gtime==0&&num==2)
{ num=1;
gtime=60;
LED2=1;
LED6=1; } }
模式二函數(shù):
如同模式一,只是參數(shù)有變化。如將gtime=60 換成rtime=40;num=1 換成numa=1;僅此而已。
主函數(shù):
void main()
{ init();
while(1)
/* 模式一,平常模式,紅綠燈切換時間為60 秒*/
{ if(MODEL1==1||HMODE1==0) // 按鍵或紅外控制切換模式
{ mod1(); }
/* 通過按鍵切換工作模式*/
if(KEY1==0)
{ delay(5); //按鍵消抖
while(KEY1==0)
{ MODEL1++;
rtime=40;
if(MODEL1==3)
{ MODEL1=1;
gtime=60; }
while(!KEY1); } }
… …
/*模式二,上下班高峰期模式。紅綠燈切換時間為40 秒*/
if(MODEL1==2||HMODE1==1)
{ mod2(); }
} }
void timer0() interrupt 1
{ TH0=15536/256;
TL0=15536%256;
aa++; }
4 系統(tǒng)的仿真
結(jié)合軟硬件,通過proteus 仿真,此系統(tǒng)可安全、可靠的運行。仿真圖的部分截圖如圖5 所示。
圖5 交通燈控制系統(tǒng)運行示意圖
5 結(jié)論
本設(shè)計的紅外遙控雙模式交通燈控制系統(tǒng),通過硬件電路的搭建和軟件的調(diào)試,最后通過proteus 進(jìn)行仿真。該系統(tǒng)完全可以完成設(shè)計的要求。具有一定的實用價值,同時,該系統(tǒng)還有諸多開發(fā)前景,具備一定的擴(kuò)展能力,如:根據(jù)圖像識別,判斷車輛數(shù)是否增加,以此來判斷該運行哪種模式,有待進(jìn)一步開發(fā)。