交通信號燈系統(tǒng)設計(附Proteus仿真+C程序+論文+原理圖及PCB文件+元器件清單等全套資料)

獲取全套設計資源,請見后文說明…

設計要求
(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ài)表.png
系統(tǒng)結(jié)構(gòu)圖.png

系統(tǒng)設置有4個按鍵,分別為設置鍵,加鍵,減鍵和交通管制鍵。設置鍵是對設置的啟動和確認,加鍵和減鍵是對通行時間做調(diào)整,交通管制鍵是對紅綠燈系統(tǒng)進行強制設置。

當系統(tǒng)上電或手動復位之后,默認模式下會按照斷電前程序里記錄的參數(shù)運行。若此時設置鍵按下,則進入通行時間設置狀態(tài),數(shù)碼管上顯示原本記錄的時間并閃爍,可通過加鍵或減鍵鍵對東西、南北干道等待時間進行修改,修改完成后,按下設置鍵將新參數(shù)保存。

交通管制鍵,用于對十字路口進行交通管制。有五種模式:東西、南北干道紅燈;東西紅燈,南北綠燈;東西綠燈,南北紅燈;東西綠燈,南北綠燈;東西黃燈,南北黃燈。

仿真電路圖

仿真全圖.png

操作說明.jpg

原理圖及PCB

系統(tǒng)原理圖.png

pcb.png

洞洞板實物圖
實物.jpg

仿真結(jié)果分析
在交通燈實物中,是豎著操作,縱向為南北;在仿真電路圖中,從正視看縱向為東西,從左邊斜著看和實物是一樣的。因此,實物和仿真是一一對應的!

加載“基于畢業(yè)51單片機的交通燈設計.hex”文件到單片機,點擊運行,交通燈開始工作(二極管顯示紅、黃、綠三色燈,LED顯示倒計時)。

在程序里我們設置,東西主干道綠燈通行時間為15S,南北支干道通行時間為10S。系統(tǒng)自動進入狀態(tài)S1:東西主干道綠燈亮,南北支干道紅燈亮。


交通燈S1狀態(tài).jpg

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


交通燈S2狀態(tài).jpg

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

交通燈S3狀態(tài).jpg

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


交通燈S4狀態(tài).jpg

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


交通燈按鍵.jpg

設置東西干道時間.jpg

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


5種管制模式.png

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

另一套交通燈設計.png

附贈資源.png

部分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:基于單片機的交通燈設計(另一套交通燈設計)

資源截圖如下

資源1.png

資源2.png
資源3.png

資源4.png
資源5.png
資源6.png

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容