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