標(biāo)題: 基于單片機(jī)交通顯示系統(tǒng)源代碼與Proteus仿真 [打印本頁]
作者: 柴新宇 時(shí)間: 2020-12-30 22:51
標(biāo)題: 基于單片機(jī)交通顯示系統(tǒng)源代碼與Proteus仿真
由單片機(jī),交通燈狀態(tài)顯示系統(tǒng)、LED數(shù)碼顯示系統(tǒng)等幾大部分組成。系統(tǒng)除基本的交通燈功能外,還具有倒計(jì)時(shí)、緊急情況處理等功能,較好的模擬實(shí)現(xiàn)了十字路口可能出現(xiàn)的狀況。
本系統(tǒng)采用單片機(jī)C語言編寫,主要編寫了主程序,LED數(shù)碼管顯示程序等?傮w上完成了軟件的編寫。
交通顯示系統(tǒng)
1. 設(shè)計(jì)要求- 東西干道和南北干道的通行分左行,右行,直行,其中左行,右行固定15秒;直行固定30秒。
(2)信號燈分綠燈,紅燈,黃燈,每次綠燈換紅燈時(shí),黃燈亮3秒。
(3)東西干道和南北干道交替控制,每次干道綠燈交替時(shí),有3秒鐘所有干道的交通燈都是黃燈閃爍3秒鐘,提示已經(jīng)進(jìn)入路口的車輛迅速通過。
(4)當(dāng)遇到突發(fā)狀況時(shí),各個(gè)方向靜止通行,顯示紅燈,并維持5秒倒計(jì)時(shí)。
2.分析(1)分析目前交通路口的基本控制技術(shù)以及各種通行方案,并以此為基礎(chǔ)提出自己的交通控制的初步方案。
(2)及系統(tǒng)應(yīng)擁有的各項(xiàng)功能,在這里,本設(shè)計(jì)除了有信號燈狀態(tài)控制能實(shí)現(xiàn)基本的交通功能,還增加了倒計(jì)時(shí)顯示提示。
(3)進(jìn)行顯示電路,燈狀態(tài)電路,按鍵電路的設(shè)計(jì)和各器件的選擇及連接,大體分配各個(gè)器件及模塊的基本功能要求。
(4)進(jìn)行軟件系統(tǒng)的設(shè)計(jì),對于本系統(tǒng),本人采用C語言編寫,對單片機(jī)內(nèi)部結(jié)構(gòu)和工作情況做了充足的研究,了解定時(shí)器,中斷以及延時(shí)原理,總體上完成了軟件的設(shè)計(jì)。
圖1系統(tǒng)框圖
3. 硬件設(shè)計(jì)分析
3.1單片機(jī)選型:AT89C51
與MCS-51單片機(jī)產(chǎn)品兼容,8k字節(jié)在系統(tǒng)可編程Flash存儲(chǔ)器,1000次可檫寫周期,全靜態(tài)操作:0Hz~33Hz,三級加密程序存儲(chǔ)器,32個(gè)可編程I/O口線,三個(gè)16位定時(shí)器/計(jì)數(shù)器八個(gè)中斷源、全雙工UART串行通道、低功耗空閑和掉電模式、掉電后中斷可喚醒、看門狗定時(shí)器、雙數(shù)據(jù)指針、掉電標(biāo)識符。
當(dāng)8051的ALE及/PSEN兩引腳輸出高電平,RST引腳高電平到時(shí),單片機(jī)復(fù)位。RST/VPD端的高電平,若直接由啟動(dòng)瞬間產(chǎn)生,則為啟動(dòng)復(fù)位,若通過按動(dòng)按鈕產(chǎn)生高電平復(fù)位稱手動(dòng)復(fù)位。圖中,上電時(shí),接通電源,電容器C相當(dāng)于瞬間短路,+5V加到了RST/VPD端,該高電平使8051全機(jī)復(fù)位。若運(yùn)行過程中,需要程序從頭執(zhí)行,只需按動(dòng)按鈕S,則直接把+5V加到了RST/VPD端,從而復(fù)位。顯然,該電路即可以上電復(fù)位,也可以手動(dòng)復(fù)位,是常用復(fù)位電路之一[5]。
3.3數(shù)碼管顯示
圖4數(shù)碼管顯示
此處采用的數(shù)碼管時(shí)共陰極數(shù)碼管,G、F、E、D、C、B、A七個(gè)端口是輸入端口,對其各位進(jìn)行賦值,置位則亮,復(fù)位則滅,用此來顯示出相應(yīng)的數(shù)字;1、2兩端用來控制高位和低位的選通顯示,只要對端口置位,便可以選擇該端口,并對其所代表的位進(jìn)行賦值,顯示。正常通行狀況下,數(shù)碼管從30秒開始倒計(jì)時(shí),各個(gè)方向,對應(yīng)點(diǎn)亮紅綠黃燈。遇到突發(fā)狀況,數(shù)碼管從5秒開始倒計(jì)時(shí),各方向禁止通行,點(diǎn)亮紅燈。
3.4紅綠燈顯示
圖5紅綠燈顯示
每個(gè)路口都采用了3個(gè)LED燈來顯示,分別代表紅綠黃三種燈,來模擬路口交通的變換。其中D7和D8表示轉(zhuǎn)彎模塊[6]。
以南北方向舉例,正常狀況下,從30秒開始倒計(jì)時(shí),南北方向可直行,即綠燈(D6)亮起,東西方向禁止通行,亮紅燈(D2)。當(dāng)顯示至15秒時(shí),南北方向可直行和轉(zhuǎn)彎,即兩個(gè)綠燈(D6和D7)亮起,東西方向禁止通行,亮紅燈(D2)。當(dāng)顯示至3秒時(shí),通知車輛快速通過,南北黃燈(D5)閃爍,東西方向禁止通行,亮紅燈(D2)。
3.5鍵盤:獨(dú)立鍵盤+中斷
圖6獨(dú)立鍵盤+中斷
采用開關(guān)來控制進(jìn)入中斷,可以在路口出現(xiàn)緊急情況時(shí),拉動(dòng)開關(guān)。使紅綠燈發(fā)生相應(yīng)的改變,已處理緊急情況下車輛通行。
當(dāng)發(fā)生突發(fā)情況時(shí),如救護(hù)車通過,接通上面的按鍵,各個(gè)方向中止當(dāng)前狀態(tài),即禁止通行,各個(gè)方向點(diǎn)亮紅燈,并維持5秒倒計(jì)時(shí)。當(dāng)結(jié)束5秒倒計(jì)時(shí),各個(gè)方向恢復(fù)到中止前的狀態(tài)。
3.6系統(tǒng)原理圖
圖7總電路圖
4. 軟件設(shè)計(jì)4.1總體流程
圖8流程圖
4.2循環(huán)流程控制思路
圖9流程控制圖
仿真分析5.1正常運(yùn)行狀態(tài)
圖10正常運(yùn)行狀態(tài)
5.2左右行顯示
圖11左右行顯示
5.3黃燈閃爍顯示
圖12黃燈閃爍顯示
單片機(jī)源程序如下:
- #include<reg51.h>
- #include<intrins.h>
- #defineuintunsignedint
- #defineucharunsignedchar
- uchartemp,aa,nn;
- sbitrn=P2^0; //南北紅燈
- sbitnb=P2^1; //南北黃燈
- sbitgn=P2^2; //南北綠燈
- sbitrw=P2^3; //東西方向紅燈
- sbitdx=P2^4; //東西方向黃燈
- sbitgw=P2^5; //東西方向綠燈
- sbitshi=P3^6; //十位
- sbitge=P3^7;//個(gè)位
- bitflag=0;
- ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,
- 0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,
- 0x79,0x71};/*將數(shù)字0123456789的16進(jìn)制數(shù)定義成數(shù)組用以顯示*/
- voiddelay(uintz);//延遲
- voiddisp(uintn);
- voidnb_flash(void);
- voiddx_flash(void);
- voidxint0();
- voidtimer0();
- voidLED_ON();
- voidxint1();
- voidnanbei();
- voiddongxi();/*將所使用的子函數(shù)定義*/
- voidmain()
- {
- uintnum;
- num=0;
- aa=0;
- TMOD=0x01; //方式116位定時(shí)器
- TH0=(65536-50000)/256;//定義裝入定時(shí)器高8位的時(shí)間常數(shù)
- TL0=(65536-50000)%256;//定義裝入定時(shí)器低8位的時(shí)間常數(shù)
- EA=1; //開關(guān)總中斷
- ET0=1; //允許定時(shí)器T0中斷
- TR0=1; //打開定時(shí)器T0
- EX0=1; //允許外部中斷0中斷
- IT0=0; //禁止T0溢出中斷
- EX1=1; //允許外部中斷1中斷
- IT1=1;/*中斷初始化*/ //允許T1溢出
- while(1)
- {
- nanbei();
- nb_flash();
- dongxi();
- }
- }
- voiddelay(uintz) //延遲
- {uintx,y;
- for(x=z;x>0;x--)
- for(y=110;y>0;y--);
- }
- voidtimer0()interrupt1
- {
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- aa++;
- if(aa==9)
- {
- aa=0;
- flag=1;
- }
- }
- voiddisp(uintn)/*顯示子函數(shù)*/
- {
- while(!flag) //flag=0
- {
- ge=0;
- P0=table[n%10];
- delay(50);
- shi=1;
- ge=1;
- shi=0;
- P0=table[n/10];
- delay(50);
- shi=1;
- ge=1;
- }
- if(flag==1)
- flag=0;
- }
- voidnanbei()/*南北方向的紅綠燈和數(shù)碼管顯示子函數(shù)*/
- {
- uintnum;
- num=30;
- disp(num);
- while(num<=30&&num>15)
- {
- num--;
- P2=0xf3;
- disp(num);
- }
- while(num<=15&&num>4)/*南北方向及轉(zhuǎn)彎的紅綠燈和數(shù)碼管顯示子函數(shù)*/
- {
- num--;
- P2=0xb3;
- disp(num);
- }
- }
- voidnb_flash(void)/*南北方向的黃燈和數(shù)碼管顯示子函數(shù)*/
- {
- uinta;
- for(a=3;a>0;a--)
- {
- P2=0xf5;
- nb=1; //
- delay(100);
- nb=0; //
- disp(a);
- }
- }
- voiddongxi()/*東西方向的紅綠燈和數(shù)碼管顯示子函數(shù)*/
- {
- uintnum;
- num=30;
- while(num<=30&&num>15)
- {
- P2=0xde;
- disp(num);
- num--;
- }
- while(num<=15&&num>3)/*東西方向及轉(zhuǎn)彎的紅綠燈和數(shù)碼管顯示子函數(shù)*/
- {
- num--;
- P2=0x5e;
- disp(num);
- }
- while(num<=3&&num>0)/*東西方向的黃燈和數(shù)碼管顯示子函數(shù)*/
- {
- P2=0xee;
- dx=1; //
- delay(100);
- dx=0; //
- disp(num);
- num--;
- }
- }
- voidxint0()interrupt2/*中斷定義*/
- {
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- LED_ON(); //
- }
- voidLED_ON() //中斷2全紅燈
- {
- uintb;
- rn=0; //南北紅
- rw=0; //東西紅
- gn=1; //南北綠
- gw=1; //東西綠
- nb=1; //南北黃
- dx=1; //東西黃
- for(b=5;b>0;b--)
- {
- ge=0;
- shi=1;
- P0=table[b];
- delay(1000);
- ge=1;
- shi=1;
- }
- return;
- }
復(fù)制代碼
全部資料51hei下載地址:
基于單片機(jī)交通顯示系統(tǒng)的設(shè)計(jì)與仿真.zip
(522.66 KB, 下載次數(shù): 11)
2020-12-30 22:50 上傳
點(diǎn)擊文件名下載附件
程仿真+報(bào)告
下載積分: 黑幣 -5
歡迎光臨 (http://www.torrancerestoration.com/bbs/) |
Powered by Discuz! X3.1 |