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