電子設(shè)計系統(tǒng)作品 基于AT89C51單片機的交通燈控制系統(tǒng)設(shè)計與模擬 [摘要]: 本系統(tǒng)以AT89C51為控制核心,由矩陣鍵盤輸入,LED倒計時、交通燈顯示等模塊組成,模擬了一個交通燈控制系統(tǒng)。系統(tǒng)除基本交通燈功能外,還具有通行時間手動設(shè)置、可倒計時顯示、急車強行通過、狀態(tài)切換等相關(guān)功能。 1作品功能 
狀態(tài)1 狀態(tài)2 
狀態(tài)3 狀態(tài)4 系統(tǒng)功能圖 本系統(tǒng)以AT89C51為控制核心,正常狀態(tài)下實現(xiàn)四種狀態(tài)的依次切換,狀態(tài)1南北直行,通行時間20S,狀態(tài)2南北向左右通行,東西向右通行,通行時間30S.狀態(tài)3東西直行,通行時間20S,狀態(tài)4東西向左右通行,南北向右通行,通行時間30S。 通過按鍵可以實現(xiàn)倒計時時間的停止和啟動,并對時間進行修改。設(shè)置兩個特殊按鍵可以切換到狀態(tài)1和狀態(tài)3,目的是為了在東西或者南北車流量比較少的情況下優(yōu)先放行車流量多的方向。切換不進行直接切換,有一個閃爍切換按鍵,如果這個按鍵按下,黃燈閃爍顯示5秒,然后接受按鍵輸入切換到狀態(tài)1或者狀態(tài)3,后面狀態(tài)的變化依次進行,狀態(tài)4完畢后轉(zhuǎn)回執(zhí)行狀態(tài)1.如果沒有按鍵按下,那么黃燈倒計時到0,系統(tǒng)自動切換到下一狀態(tài)。另外設(shè)置一個急車強行通過鍵,按鍵按下之后,系統(tǒng)對當(dāng)前的狀態(tài)和倒計時時間進行保留,四個方向顯示紅燈,倒計時時間20S。狀態(tài)執(zhí)行完之后,對原通行狀態(tài)和時間返回接著執(zhí)行。 2硬件設(shè)計 
系統(tǒng)框圖 2.1顯示模塊 
數(shù)碼管顯示模塊 單片機I/O口通過反相器和數(shù)碼管的數(shù)據(jù)口和選通口直接相連,由于人的視覺暫留效應(yīng),通過定時器進行動態(tài)掃描,使數(shù)碼管顯示數(shù)字。 2.2輸入模塊 
矩陣鍵盤輸入模塊 對按鍵的掃描盡可能不放在主循環(huán)里一直檢測,放在定時器里面,經(jīng)過一定的時間掃描一次或者把四個輸入口線接一個四輸入與門接入外部中斷,有按鍵按下才開始進行鍵值的掃描。 2.3交通燈模塊 交通燈顯示模塊 交通燈通過反相器接到單片機I/O口,單片機輸出高電平燈亮,反相器具有防止過大的電流倒灌進單片機的作用。 2.4電源模塊 
電源模塊 通過7805芯片的降壓作用,將12V電壓轉(zhuǎn)化為5V輸入到單片機供電。 3軟件設(shè)計 
程序流程圖 在沒有按鍵按下的情況下,系統(tǒng)將按正常狀態(tài)進行循環(huán)顯示,從狀態(tài)1到狀態(tài)4,再回到狀態(tài)1.按鍵0~9為時間設(shè)定鍵,鍵值為10的鍵暫停定時器的計時,11對定時器進行啟動。按鍵12切換到急車強制通行狀態(tài),按鍵13切換到狀態(tài)1,即南北向行駛狀態(tài),按鍵14切換到狀態(tài)3,即東西向行駛狀態(tài)。最后一個按鍵為提示切換鍵,按下這個鍵可以接受轉(zhuǎn)換到狀態(tài)1和3,如果沒有按下這兩個鍵,那么在5S后自動切換到下一狀態(tài)。 
按鍵功能圖 特色功能: - 直接用鍵盤輸入想要的時間,方便快捷。
- 對常規(guī)狀態(tài)進行改變的時候設(shè)定一個切換鍵,切換鍵按下,黃燈閃5秒,這時可以接受狀態(tài)1或3的輸入,切換到南北通行狀態(tài)或東西通行狀態(tài)。
- 切換鍵按下沒有按轉(zhuǎn)換到狀態(tài)1和3的按鍵,那么倒計時到0以后自動轉(zhuǎn)換到下一狀態(tài)。
- 設(shè)置東西南北全是紅燈的急車強制通行狀態(tài),時間20S,狀態(tài)執(zhí)行完畢對原狀態(tài)和原剩余時間進行返回執(zhí)行。
單片機源程序:
- /****************************************************
- *項目名稱:基于AT89C52的交通燈
- *程序作者:宋*杰
- *程序版本:V1.0
- *程序功能:模擬交通燈的循環(huán)變化,按鍵實現(xiàn)特殊狀態(tài)的
- 調(diào)用,0~9的數(shù)字鍵用于輸入通行時間
- ****************************************************/
- #include<reg52.h> //52寄存器庫
- #include"KeyBoard.h" //自定義鍵盤輸入的庫
- #include"KeyControl.h" //按鍵處理頭文件
- #include"Global.h" //全局變量定義頭文件
- #include"7SEG.h" //數(shù)碼管顯示的頭文件
- #include"Lights.h" //紅綠燈狀態(tài)變化
- uchar Status = 0;
- uchar Status_Val = 0;
- uchar Second_Val = 0;
- bit Switch_Flag = 0;
- /****************************************************
- *函數(shù)名稱:main
- *入口參數(shù):無
- *出口參數(shù):無
- *函數(shù)功能:掃描按鍵,對相應(yīng)的鍵值和狀態(tài)執(zhí)行顯示
- ****************************************************/
- void main( void )
- {
- Timer0_Init( );
- LED_Init( );
- while( 1 )
- {
- ScanKey( );
- ReadKey( );
- if ( 0 < KeyNum && KeyNum< 11 )
- {
- R_KeyNum( ); //讀入鍵值
- }
- else if ( KeyNum == 11 )
- {
- Halt( ); //暫停進入時間調(diào)整
- XUAN1 = 0; //選通端打開
- XUAN2 = 0; //時間就會停留不正常
- }
- else if ( KeyNum == 12 )
- {
- Start( ); //用新設(shè)定時間啟動計時
- }
- else if ( KeyNum == 13 )
- {
- Second = 20; //進入四個方向都是紅燈的狀態(tài)
- Status = 4;
- }
- else if ( KeyNum == 14 )
- {
- Status = 5; //進入南北直行狀態(tài)
- }
- else if ( KeyNum == 15 )
- {
- Status = 6; //進入東西直行狀態(tài)
- }
- else if ( KeyNum == 16 )//閃動切換狀態(tài)
- {
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
基于AT89C51單片機的交通燈控制系統(tǒng)設(shè)計與模擬.rar
(183.73 KB, 下載次數(shù): 126)
2018-1-8 14:37 上傳
點擊文件名下載附件
|