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