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