自己用單片機(jī)做的十字路口交通燈設(shè)計(jì)_第1頁(yè)
自己用單片機(jī)做的十字路口交通燈設(shè)計(jì)_第2頁(yè)
自己用單片機(jī)做的十字路口交通燈設(shè)計(jì)_第3頁(yè)
自己用單片機(jī)做的十字路口交通燈設(shè)計(jì)_第4頁(yè)
自己用單片機(jī)做的十字路口交通燈設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩10頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

交通燈亮的時(shí)間,是各地交通警察根據(jù)交通流量設(shè)置的;

交通燈切換的順序是:綠--黃--紅--綠……(循環(huán));統(tǒng)一約定: A道為主干道(南北干道);B道為支干道(東西干道);A道左轉(zhuǎn)綠(南拐西、北拐東);B道左轉(zhuǎn)綠(西拐北、東拐南);數(shù)碼管數(shù)碼管北西南綠直行數(shù)碼管北黃燈緩紅燈停綠左轉(zhuǎn)東圖1十字路口交通燈配置示意圖LED循環(huán)說明:將南北方向允許直行命名為狀態(tài)1,南北方向允許左轉(zhuǎn)命名為狀態(tài)2,南北方向行車到東西方向行車的轉(zhuǎn)換階段命名為狀態(tài)3,將東西方向允許直行命名為狀態(tài)4,東西方向允許左轉(zhuǎn)命名為狀態(tài)5,東西方向行車到南北方向行車的轉(zhuǎn)換階段命名為狀態(tài)6。黃燈每隔500ms亮一次,之后滅500ms(亮滅一次叫作閃爍一次1s),一共閃爍5次,持續(xù)5s。各個(gè)狀態(tài)之間的變換情況如下:狀態(tài)1狀態(tài)1狀態(tài)2狀態(tài)3狀態(tài)4狀態(tài)5狀態(tài)6狀態(tài)1具體顯示周期如下:40s20s5s45s狀態(tài)1狀態(tài)2狀態(tài)3狀態(tài)4狀態(tài)5狀態(tài)6南北路口直行綠燈亮左轉(zhuǎn)綠燈亮黃燈亮緩行紅燈亮禁行東西路口紅燈亮禁行直行綠燈亮左轉(zhuǎn)綠燈亮黃燈亮緩行65s20s20s5s圖4寫程序時(shí)應(yīng)注意:當(dāng)東西路口紅燈亮禁行的同時(shí),南北路口的狀態(tài)由狀態(tài)1->狀態(tài)2->狀態(tài)3;當(dāng)南北路口紅燈亮禁行的同時(shí),東西路口的狀態(tài)由狀態(tài)4->狀態(tài)5->狀態(tài)6;所以應(yīng)多設(shè)兩個(gè)狀態(tài):東西紅燈亮狀態(tài)、南北紅燈亮狀態(tài),所以總共8種狀態(tài);這兩個(gè)狀態(tài)比較特殊;因?yàn)椋簴|西紅燈亮狀態(tài)與 南北路口的狀態(tài)1、2、3是同步進(jìn)行的; 南北紅燈亮狀態(tài)與東西路口的狀態(tài)4、5、6是同步進(jìn)行的; 接線說明:數(shù)碼管上顯示數(shù)字的連接方式:位選:P1(JP8)與J16用排線連接; 段選:P0(JP10)與J12用排線連接;LED燈的連接方式:P2(JP11)與JP1用排線連接;按鍵的連接方式:P3(JP9)與JP5用排線連接;中斷:T0--定時(shí)器/計(jì)數(shù)器0中斷的序號(hào)為1,該中斷由T0計(jì)數(shù)器計(jì)滿回零引起;INT1--外部中斷1的序號(hào)為2,該中斷由P3.3端口線引入,由低電平或下降沿引起;程序流程圖:LED紅綠燈顯示:當(dāng)P2端口輸出高電平,即P2各端口=1時(shí),根據(jù)發(fā)光二極管的單向?qū)щ娦钥芍?,這是發(fā)光二極管熄滅;當(dāng)P2各端口輸出低電平,即P2各端口=0時(shí),發(fā)光二極管亮。通過設(shè)置P2口不同時(shí)段輸出電平的不同來控制發(fā)光二極管模擬交通燈的各種狀態(tài)。8種狀態(tài)的定義如下:sbitSN_GREEN=P2^0; //南北直走綠燈sbitSN_LEFT_GREEN=P2^1; //南北左轉(zhuǎn)綠燈sbitSN_YELLOW=P2^2; //南北黃燈sbitSN_RED=P2^3; //南北紅燈sbitEW_GREEN=P2^4; //東西直走綠燈sbitEW_LEFT_GREEN=P2^5; //東西左轉(zhuǎn)綠燈sbitEW_YELLOW=P2^6; //東西黃燈sbitEW_RED=P2^7; //東西紅燈倒計(jì)時(shí)顯示:數(shù)碼管的顯示采用動(dòng)態(tài)共陰數(shù)碼管的動(dòng)態(tài)顯示,通過P1口的P1.0至P1.1控制南北方向的數(shù)碼管位選信號(hào),P1口的P1.4至P1.5控制東西方向的數(shù)碼管位選信號(hào),然后通過P0口作為數(shù)碼管的段選信號(hào),通過位選信號(hào)的分時(shí)選擇來控制數(shù)碼管的十位,個(gè)位分別顯示,又由于這期間的掃描間隔時(shí)間很短,延時(shí)去抖,若延時(shí)太長(zhǎng)數(shù)碼管會(huì)有閃爍感,所以我們看起來數(shù)碼管的十位,個(gè)位是同時(shí)亮的。然后利用定時(shí)器倒計(jì)時(shí),通過數(shù)碼管顯示出來。緊急模式: sbitK4=P3^3; //緊急模式的按鍵控制位K4通過在程序里設(shè)置外部中斷INT1為最高優(yōu)先級(jí)。當(dāng)檢測(cè)到有按鈕按下時(shí),產(chǎn)生中斷,停止剛才的程序,轉(zhuǎn)向中斷執(zhí)行。程序代碼: /* 十字路口交通燈控制-----C語言程序 數(shù)碼管上顯示數(shù)字的連接方式: 位選:P1(JP8)與J16用排線連接 段選:P0(JP10)與J12用排線連接 LED燈的連接方式:P2(JP11)與JP1用排線連接 按鍵的連接方式:P3(JP9)與JP5用排線連接*/#include<reg51.h>#defineucharunsignedchar#defineuintunsignedintuchardisp_bit[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //位選控制:8個(gè)動(dòng)態(tài)共陰數(shù)碼管的位置uchardisp_tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //段選控制:數(shù)碼管的LED的字模0-9/*定義控制位*/sbitSN_GREEN=P2^0; //南北直走綠燈sbitSN_LEFT_GREEN=P2^1; //南北左轉(zhuǎn)綠燈sbitSN_YELLOW=P2^2; //南北黃燈sbitSN_RED=P2^3; //南北紅燈sbitEW_GREEN=P2^4; //東西直走綠燈sbitEW_LEFT_GREEN=P2^5; //東西左轉(zhuǎn)綠燈sbitEW_YELLOW=P2^6; //東西黃燈sbitEW_RED=P2^7; //東西紅燈sbitK4=P3^3; //緊急模式控制位ucharSN_FLAG=0; //南北4個(gè)狀態(tài)標(biāo)志位,分別為0,1,2,3,默認(rèn)初值為0ucharEW_FLAG=0; //東西4個(gè)狀態(tài)標(biāo)志位,分別為0,1,2,3,默認(rèn)初值為0ucharnum=0; //計(jì)算中斷1秒所需的次數(shù)ucharYELLOW_num=0; //黃燈每隔500ms亮一次,或每隔500ms滅一次(亮滅一次則需1000ms叫作閃爍一次1s),一共閃爍5次,持續(xù)5sucharvalue_one=40,value_two=20,value_three=5,value_four=65,value_five=45; //倒計(jì)時(shí)的值,正常模式ucharvalue_time=0; //倒計(jì)時(shí)的值,緊急模式voiddelay(uinti); //延時(shí)去抖voidSN_display(ucharSN_Time); //顯示南北數(shù)碼管的倒計(jì)時(shí)voidEW_display(ucharEW_Time); //顯示東西數(shù)碼管的倒計(jì)時(shí)voidmain(void){ IT1=0; //INT1負(fù)跳變觸發(fā) TMOD=0x01; //設(shè)置定時(shí)器0為工作方式1 TH0=(65536-50000)/256;//裝初值12M晶振定時(shí)50ms數(shù)為50000 TL0=(65536-50000)%256; EA=1; //開總中斷 ET0=1; //開定時(shí)器T0中斷 EX1=1; //開外部INT1中斷 TR0=1; //啟動(dòng)定時(shí)器T0 PX1=1; //中斷優(yōu)先級(jí)高 while(1) //等待中斷發(fā)生 { switch(SN_FLAG) { case0: SN_GREEN=0; //開啟南北直走綠燈 SN_display(value_one); //顯示南北直走綠燈的倒計(jì)時(shí) break; case1: SN_LEFT_GREEN=0; //開啟南北左轉(zhuǎn)綠燈 SN_display(value_two); //顯示南北左轉(zhuǎn)綠燈的倒計(jì)時(shí) break; case2: SN_display(value_three); //顯示南北黃燈的倒計(jì)時(shí) break; case3: SN_RED=0; //開啟南北紅燈 SN_display(value_five); //顯示南北紅燈的倒計(jì)時(shí) break; } switch(EW_FLAG) { case0: EW_RED=0; //開啟東西紅燈 EW_display(value_four); //顯示東西紅燈的倒計(jì)時(shí) break; case1: EW_GREEN=0; //開啟東西直走綠燈 EW_display(value_two); //顯示東西直走綠燈的倒計(jì)時(shí) break; case2: EW_LEFT_GREEN=0; //開啟東西左轉(zhuǎn)綠燈 EW_display(value_two); //顯示東西左轉(zhuǎn)綠燈的倒計(jì)時(shí) break; case3: EW_display(value_three); //顯示東西黃燈的倒計(jì)時(shí) break; } } }voidT0_time(void)interrupt1 //中斷函數(shù){ TH0=(65536-50000)/256; //重裝初值是為了確保定時(shí)器的每次中斷都是50ms TL0=(65536-50000)%256; YELLOW_num++; if(YELLOW_num==10) //若到了10次,50ms*10=500ms時(shí)間到,將YELLOW_num清0,重新計(jì)時(shí) { YELLOW_num=0; if(SN_FLAG==2) //開啟南北黃燈 { SN_YELLOW=~SN_YELLOW; //南北黃燈每隔500ms亮一次,或每隔500ms滅一次 } if(EW_FLAG==3) //開啟東西黃燈 { EW_YELLOW=~EW_YELLOW; //東西黃燈每隔500ms亮一次,或每隔500ms滅一次 } } num++; if(num==20) //若到了20次,50ms*20=1s時(shí)間到,將num清0,重新計(jì)時(shí) { num=0; switch(SN_FLAG) { case0: value_one--; if(value_one==0) //南北直走綠燈的倒計(jì)時(shí)的初值40減到了0,則將其重新賦值為40 { SN_GREEN=1; //關(guān)閉南北直走綠燈 value_one=40; SN_FLAG=1; //轉(zhuǎn)至下一個(gè)狀態(tài) } break; case1: value_two--; if(value_two==0) //南北左轉(zhuǎn)綠燈的倒計(jì)時(shí)的初值20減到了0,則將其重新賦值為20 { SN_LEFT_GREEN=1; //關(guān)閉南北左轉(zhuǎn)綠燈 value_two=20; SN_FLAG=2; //轉(zhuǎn)至下一個(gè)狀態(tài) } break; case2: value_three--; if(value_three==0) { SN_YELLOW=1; value_three=5; SN_FLAG=3; } break; case3: value_five--; if(value_five==0) { SN_RED=1; value_five=45; SN_FLAG=0; } break; } switch(EW_FLAG) { case0: value_four--; if(value_four==0) //東西紅燈的倒計(jì)時(shí)的初值65減到了0,則將其重新賦值為65 { EW_RED=1; //關(guān)閉東西紅燈 value_four=65; EW_FLAG=1; //轉(zhuǎn)至下一個(gè)狀態(tài) } break; case1: value_two--; if(value_two==0) //東西直走綠燈的倒計(jì)時(shí)的初值20減到了0,則將其重新賦值為20 { EW_GREEN=1; //關(guān)閉東西直走綠燈 value_two=20; EW_FLAG=2; //轉(zhuǎn)至下一個(gè)狀態(tài) } break; case2: value_two--; if(value_two==0) { EW_LEFT_GREEN=1; value_two=20; EW_FLAG=3; } break; case3: value_three--; if(value_three==0) { EW_YELLOW=1; value_three=5; EW_FLAG=0; } break; } } }voiddelay(uinti) //延時(shí)去抖{ uintj=100; for(i;i>0;i--) for(j;j>0;j--);}voidSN_display(ucharSN_Time) //顯示南北數(shù)碼管的倒計(jì)時(shí){ ucharshi,ge; shi=SN_Time/10; //十位 ge=SN_Time%10; //個(gè)位 //南北數(shù)碼管的十位 P1=disp_bit[0]; //位選 P0=disp_tab[shi]; //段選 delay(1); //掃描間隔時(shí)間,延時(shí)去抖,太長(zhǎng)數(shù)碼管會(huì)有閃爍感 //南北數(shù)碼管的個(gè)位 P1=disp_

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論