獲取全套設計資源,請見后文說明…
設計要求
(1)利用51單片機設計一個交通燈控制系統(tǒng),來實現(xiàn)行人與車流的分流的目的。該系統(tǒng)主要應用在十字路口,縱向為主干道,橫向為支干道;
(2)主、支干道交替通行,兩個干道上的交通燈工作方式同時進行,主干道每次綠燈放行15秒,支干道每次放行10秒,放行時間可通過按鍵更改;
(3)每次綠燈變紅之前,黃燈先閃爍3秒,此時,另一干道上仍保持紅燈;
(4)通過按鍵實現(xiàn)對十字路口交通管制功能;
(5)給出整個系統(tǒng)的結(jié)構(gòu)圖、軟硬件流程圖;
設計概述
東西主干道和南北支干道各由一組三色交通燈來控制,分別是主干道方向的紅、黃、綠以及支干道方向的紅、黃、綠。
邏輯分析可知,當主干道為綠燈通行時,支干道必須為紅燈禁行;綠燈結(jié)束后,主干道進入黃燈閃爍等待狀態(tài),支干道紅燈;黃燈結(jié)束后,主干道變?yōu)榧t燈禁行,支干道變?yōu)榫G燈通行;支干道綠燈結(jié)束后,支干道進入黃燈閃爍等待狀態(tài),主干道紅燈,如此循環(huán)。
從這個過程中可以看出,交通燈控制共分4個狀態(tài),分別為:S1狀態(tài),主干道方向為綠燈,支干道方向為紅燈;S2狀態(tài),主干道方向為黃燈閃爍,支干道紅燈;S3狀態(tài),主干道方向為紅燈,支干道方向為綠燈;S4狀態(tài),支干道方向為黃燈閃爍,主干道紅燈。這四個狀態(tài)不斷循環(huán)。由此我們可以列出4個狀態(tài)的列表和做出4個狀態(tài)的流程圖。


系統(tǒng)設置有4個按鍵,分別為設置鍵,加鍵,減鍵和交通管制鍵。設置鍵是對設置的啟動和確認,加鍵和減鍵是對通行時間做調(diào)整,交通管制鍵是對紅綠燈系統(tǒng)進行強制設置。
當系統(tǒng)上電或手動復位之后,默認模式下會按照斷電前程序里記錄的參數(shù)運行。若此時設置鍵按下,則進入通行時間設置狀態(tài),數(shù)碼管上顯示原本記錄的時間并閃爍,可通過加鍵或減鍵鍵對東西、南北干道等待時間進行修改,修改完成后,按下設置鍵將新參數(shù)保存。
交通管制鍵,用于對十字路口進行交通管制。有五種模式:東西、南北干道紅燈;東西紅燈,南北綠燈;東西綠燈,南北紅燈;東西綠燈,南北綠燈;東西黃燈,南北黃燈。
仿真電路圖


原理圖及PCB


洞洞板實物圖

仿真結(jié)果分析
在交通燈實物中,是豎著操作,縱向為南北;在仿真電路圖中,從正視看縱向為東西,從左邊斜著看和實物是一樣的。因此,實物和仿真是一一對應的!
加載“基于畢業(yè)51單片機的交通燈設計.hex”文件到單片機,點擊運行,交通燈開始工作(二極管顯示紅、黃、綠三色燈,LED顯示倒計時)。
在程序里我們設置,東西主干道綠燈通行時間為15S,南北支干道通行時間為10S。系統(tǒng)自動進入狀態(tài)S1:東西主干道綠燈亮,南北支干道紅燈亮。

可以看出,東西主干道綠燈通行時間為15S,南北支干道紅燈等待時間為15S。東西、南北干道LED倒計時12S后,系統(tǒng)進入S2狀態(tài):東西主干道黃燈閃爍3S,南北支干道紅燈。

3S后,系統(tǒng)進入S3狀態(tài):東西主干道紅燈,南北綠干道綠燈,通行時間為10S。仿真結(jié)果如下所示。

7S后,系統(tǒng)進入S4狀態(tài):南北干道黃燈閃爍3S,東西干道仍為紅燈。然后進入S1狀態(tài),不斷循環(huán)。

按下“設置”鍵后,系統(tǒng)進入設置模式,通過“加”鍵和“減”鍵設置東西干道綠燈通行時間。再次按下“設置”鍵,可以設置南北干道通行時間。通行時間設置完成后,再次按下“設置”鍵,系統(tǒng)回到運行狀態(tài)。


從上圖看出,東西主干道通行時間由原來的15S設置為16S??梢酝ㄟ^“交通管制”鍵,對交通燈系統(tǒng)進行管制。

另一套交通燈設計
為給大家多點設計思路,現(xiàn)提供另外一套交通燈設計。該設計非原創(chuàng)。其仿真效果、C程序、論文和原理圖如下所示。


部分C代碼
u8 Key_Scan()
{
static u8 key_up=1;//按鍵按松開標志
if(key_up&&(Key1==0||Key2==0||Key3==0||Key4==0))
{
delay_1ms(10);//去抖動
key_up=0;
if(Key1==0) return 1;
else if(Key2==0)return 2;
else if(Key3==0)return 3;
else if(Key4==0)return 4;
}
else if(Key1==1&&Key2==1&&Key3==1&&Key4==1)
key_up=1;
return 0;// 無按鍵按下
}
uchar flag_s;
uchar menu_1;//縱橫加減標示
/********************設置函數(shù)*****************/
void key_with()
{
if(key_can == 4) //交通管制按鍵
{
flag_jdgz ++;
if(flag_jdgz > 5)
flag_jdgz = 0;
if(flag_jdgz == 1) // 全部亮紅燈
{
dx_red = 0; //亮
nb_red = 0; //亮
dx_green = 1; //滅
dx_yellow = 1; //滅
nb_green = 1; //滅
nb_yellow = 1; //滅
}
if(flag_jdgz == 2) // 東西綠燈 南北紅燈
{
dx_red = 0; //亮
nb_green = 0; //亮
dx_green = 1; //滅
dx_yellow = 1; //滅
nb_red = 1; //滅
nb_yellow = 1; //滅
}
if(flag_jdgz == 3) // 南北綠燈 東西紅燈
{
dx_green = 0; //亮
nb_red = 0; //亮
dx_red = 1; //滅
dx_yellow = 1; //滅
nb_green = 1; //滅
nb_yellow = 1; //滅
}
if(flag_jdgz == 4) // 南北綠燈 東西綠燈
{
dx_green = 0; //亮
nb_green = 0; //亮
dx_red = 1; //滅
dx_yellow = 1; //滅
nb_red = 1; //滅
nb_yellow = 1; //滅
}
if(flag_jdgz == 5) // 南北黃燈 東西黃燈
{
dx_red = 1; //滅
dx_green = 1; //滅
nb_red = 1; //滅
nb_green = 1; //滅
nb_yellow = 0; //亮
dx_yellow = 0; //亮
}
}
if(key_can == 1) //設置鍵
{
menu_1 ++;
if(menu_1 >= 3)
{
menu_1 = 0;
}
}
if(menu_1 == 1) //設置東西的時間
{
if(key_can == 2)
{
dx_time ++ ; //加1
if(dx_time > 99)//時間最大值為99s
dx_time = 99;
}
if(key_can == 3)
{
dx_time -- ; //減1
if(dx_time <= 5)//時間最小值為5s
dx_time = 5;
}
dis_smg[0] = DisplayOther[2] ; //顯示為B
dis_smg[1] = DisplayOther[2] ; //顯示為B
dis_smg[2] = smg_du[(dx_time-1) % 10] ; //顯示東西設置的時候
dis_smg[3] = smg_du[(dx_time-1) / 10] ;
}
if(menu_1 == 2) //設置南北的時間
{
if(key_can == 2)
{
nb_time ++ ; //加1
if(nb_time > 99) //時間最大值為99s
nb_time = 99;
}
if(key_can == 3)
{
nb_time -- ; //減1
if(nb_time <= 5)//時間最小值為5s
nb_time = 5;
}
dis_smg[0] = smg_du[(nb_time-1) % 10] ; //顯示為A
dis_smg[1] = smg_du[(nb_time-1) / 10] ; //顯示為A
dis_smg[2] = DisplayOther[2] ; //顯示東西設置的時候
dis_smg[3] = DisplayOther[2] ;
}
}
分享的資源有
(1)基于51單片機的交通燈系統(tǒng)畢業(yè)設計論文完整版;
(2)Proteus仿真文件;
(3)Keil C程序文件;
(4)參考資料;
(5)Visio流程圖;
(6)PCB文件及原理圖;
(7)元器件介紹及清單;
(8)參考設計1:基于單片機的交通燈設計(另一套交通燈設計)
資源截圖如下






獲取交通燈系統(tǒng)設計論文、Proteus仿真、C程序、PCB及原理圖、Visio流程圖、元器件清單等全套資料。請搜索關注我的公眾號:交院小智