freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于車流量檢測的多相位智能交通燈控制器設(shè)計(jì)畢業(yè)論文(編輯修改稿)

2025-07-24 21:29 本頁面
 

【文章內(nèi)容簡介】 北邊直行有車出去、北邊左行有車過來、北邊左行有車出去,并儲(chǔ)存相應(yīng)的車輛數(shù)值。然后分別對較東西方向直行車數(shù)量的大小、東西方向左行車數(shù)量的大小、南北方向直行車數(shù)量的大小、南北方向左行車數(shù)量的大小,取出最大的值(即車輛數(shù))進(jìn)行儲(chǔ)存。其次拿這個(gè)最大值來代入公式Y(jié)=7+2X計(jì)算出Y值(即相應(yīng)綠燈通行時(shí)間初值)儲(chǔ)存起來并放入SBUF寄存器。最后,是數(shù)碼管處理程序,主根通過按鈕選擇用數(shù)碼管顯示最大值的車輛數(shù)還是通行時(shí)間初值。二、接收程序的總流程圖 圖412 接收程序的總流程圖如圖412所示,開始之后,首先是啟到定時(shí)器T0和串行口中斷,將定時(shí)器T0設(shè)為50ms一次中斷,在串行中斷里面執(zhí)行的程序主要是完成數(shù)據(jù)的接收及從SBUF里取出數(shù)據(jù)進(jìn)行儲(chǔ)存,循環(huán)接收循環(huán)刷新覆蓋,同時(shí)狀態(tài)燈模塊和倒計(jì)是模塊進(jìn)入初值工作狀態(tài)。然后,用取得的初值,判斷黃燈倒計(jì)時(shí)為0時(shí),對倒計(jì)是模塊進(jìn)行初值賦值,通過20次中斷對倒計(jì)時(shí)值進(jìn)行一次減1,實(shí)現(xiàn)倒計(jì)時(shí)工作,然后判斷倒計(jì)時(shí)間的狀態(tài)以控制相應(yīng)狀態(tài)燈模塊的狀態(tài),如此控制下去,從南北直行到南北左行,從南北左行到東西直行,從東西直行到東西左行,再回到南北直行,如此循環(huán)下去。第二節(jié) 各功能模塊的程序設(shè)計(jì)這一節(jié)將對各功能模塊的程序設(shè)計(jì),如果實(shí)現(xiàn)控制作出說細(xì)的說明。本節(jié)對應(yīng)相應(yīng)模塊的功能只是選一小段程序作說明,完整的程序請看附錄四 發(fā)送單片機(jī)總程序與附錄五 接收單片機(jī)總程序。 按鍵模塊的程序設(shè)計(jì)在講這個(gè)之前先講一下消抖處理,在按鍵計(jì)數(shù)的過程中,還存在機(jī)械抖動(dòng)與軟件方面的矛盾,即當(dāng)程序檢測到了有按鍵按下,則會(huì)計(jì)一次數(shù),但是實(shí)際上,按鍵閉合后在微觀上還會(huì)彈起,然后閉合,一直到達(dá)穩(wěn)定,顯然后面的彈落是無效的,為了使程序避免這個(gè)問題,可以在檢測到首次閉合時(shí),調(diào)用一定時(shí)間的延時(shí)程序。此處延時(shí)程序完全用軟件完成,利用程序執(zhí)行一條指令的時(shí)間,再加上兩次累減嵌套。本設(shè)計(jì)所用到的按鍵有17個(gè),其中16個(gè)與發(fā)送單片機(jī)的P1口和P2口連接用來模擬車流量的檢測的傳感器,其中一個(gè)是作為切換數(shù)碼管所顯示內(nèi)容的選擇。它們的外電路的連接都是一端接地一端接單片機(jī)相應(yīng)的口,用的是獨(dú)立式接法,低電平對單片起作用。它的程序工作原理為,開始進(jìn)入掃描按鈕后,首先是掃按鈕,哪個(gè)按鈕下了就作出自加自減的相應(yīng)處理,最后返回。它的流程圖如圖421 按鈕模塊流程圖。開始東直行(加)傳感器東直行(加)自加1東直行(減)傳感器東直行(減)自減1NYNY 返回圖421 按鈕模塊流程圖程序控制方式如下(附解釋):/***********************東直行************************************/ if(P10==0amp。amp。ip10!=1){ //當(dāng)P10按下ip10不等于1時(shí) delay(10); //消抖動(dòng)處理 if(P10==0amp。amp。ip10!=1){ ip10=1。 //把ip10置為1 作用為鎖按鈕 dongzhi=dongzhi+1。 //東直行車輛數(shù)加1 } if(P10!=0){ //等待按鈕放開,如果放開重新把ip10置為0 ip10=0。 //解除按鈕封鎖 } if(P11==0amp。amp。ip11!=1amp。amp。dongzhi=1){ //當(dāng)P11按下ip11不等于1東直行車輛數(shù)時(shí) delay(10); //消抖動(dòng)處理if(P11==0amp。amp。ip11!=1amp。amp。dongzhi=1){ ip11=1。 //把ip11置為1作用為鎖按鈕 dongzhi=dongzhi1。 //東直行車輛數(shù)減1 if(dongzhi==0){ dongzhi=0。 } } if(P11!=0){ //等待按鈕放開,如果放開重新把ip11置為0 ip11=0。 //解除按鈕封鎖 }這種設(shè)計(jì)方式比用消抖處理好,因?yàn)橄短幚碛袝r(shí)會(huì)由于延時(shí)子程序的原影響到其他模塊的正??刂?,而且也解決了按鈕一直按著不放還會(huì)一直加或減下去的問題。 延時(shí)子程序的設(shè)計(jì)本設(shè)計(jì)單片機(jī)的工作頻率為12MHZ,機(jī)器周期與主頻有關(guān),機(jī)器周期是主頻的12倍,所以一個(gè)機(jī)器周期的時(shí)間為12*(1/12MHZ)=1us。我們可以知道具體每條指令的周期數(shù),這樣我們就可以通過指令的執(zhí)行條數(shù)來確定1ms的時(shí)間。它的工作原理是:首先這里有一個(gè)While和一個(gè)For循環(huán)的嵌套,先給While循環(huán)的i賦值,然后到For循環(huán)里的j賦值0,其次判斷j是否小125,如果小于則j自加1再循環(huán)回來比較,如果不小于125則跳出,i自減1,如此循環(huán)直到i減到為0整個(gè)延時(shí)才結(jié)束,其程序流程圖如圖422 延時(shí)子程序流程圖。開始給i賦初值給j賦初值0判斷j是否小于125j自加1i自減1i是否等于0返回NNYY圖422 延時(shí)子程序流程圖以下為12M晶振下的1ms延時(shí)子程序:/************************************************************************/void delay(unsigned int i){ unsigned char j。 while(i) { for(j=0。j125。j++) //1ms基準(zhǔn)延時(shí)程序 { 。 } } }這個(gè)程序包函有兩個(gè)循環(huán)語句,i是調(diào)用時(shí)應(yīng)自己要延時(shí)的時(shí)間長短來給值的。如調(diào)用這個(gè)程序讓它延時(shí)1S,我們就可以這樣寫: delay(1000); 顯示子程序的設(shè)計(jì)顯示部分,本設(shè)計(jì)是用到兩位一體共陽數(shù)碼管來作為顯示的,數(shù)碼管的8個(gè)數(shù)據(jù)口的單片P0口的8個(gè)端口,驅(qū)動(dòng)該數(shù)碼管的方法為:比如說要給第一位數(shù)碼管顯示1,第二位數(shù)碼管顯示2,首先要在程序開始時(shí)定義一個(gè)數(shù)組,數(shù)組里有相應(yīng)的共陽數(shù)碼管用的代碼,然后在即行顯示程序時(shí),當(dāng)掃描端點(diǎn)亮第一位數(shù)碼管的同時(shí)從數(shù)組中提取1相應(yīng)的代碼通過P0口輸出給數(shù)碼管,當(dāng)掃描端點(diǎn)亮第二位數(shù)碼管的同時(shí)從數(shù)組中提取2相應(yīng)的代碼通過P0口輸出給數(shù)碼管,其實(shí)就是輪著點(diǎn)亮不同的位的數(shù)碼管,但是由于掃得很快,讓人感覺它是同時(shí)亮而以。其程序控制流程圖如圖423 數(shù)碼管程序控制流程圖。開始給數(shù)碼管家1送數(shù)據(jù)點(diǎn)亮數(shù)碼管1延時(shí)1ms關(guān)閉數(shù)碼管1 返回圖423 數(shù)碼管程序控制流程圖控制程序如下:/************************************************************************/ void DisplaySecond2(unsigned char k){ P0=Tab[k/10]。 //從數(shù)組中取代碼給“十位”數(shù)碼管 P22=0。 //點(diǎn)燈“十位”數(shù)碼管 P23=1。 delay(1)。 //延時(shí)1ms P0=0x00。 P22=1。 //關(guān)閉數(shù)碼管消影處理 P0=Tab[k%10]。 //從數(shù)組中取代碼給“個(gè)位”數(shù)碼管 P22=1。 P23=0。 //點(diǎn)燈“個(gè)位”數(shù)碼管 delay(1)。 //延時(shí)1ms P0=0x00。 P23=1。 //關(guān)閉數(shù)碼管消影處理 delay(1)。 } LED燈控制程序設(shè)計(jì)燈的控制很簡單,這里簡單介紹行了,一個(gè)LED燈,我們把它的正極接VCC,負(fù)極接單片機(jī)控制口,然后在程序里控制相應(yīng)端口為低電平時(shí)(比如:P34=0;),LED燈被點(diǎn)亮,高電平時(shí)(比如:P34=1;),LED燈被熄滅。其具體的工作原理為:開始之后,給所有信號(hào)燈賦值,南北直行燈亮,東西紅燈亮,然后進(jìn)入中斷服務(wù)里控制倒計(jì)時(shí),接下判斷倒計(jì)時(shí)是否為0,如果不為0返回繼續(xù)倒計(jì)時(shí),如果為0則判斷LED_time是否為8,如果YES就處理相應(yīng)的程序段控制相應(yīng)的燈亮與滅,最后返回。其具體的程序流程圖如圖424 LED控制程序流程圖。開始給所有信號(hào)燈賦值,南北直行燈亮,東西紅燈亮中斷倒計(jì)時(shí)是否為0LED_time是否為1倒計(jì)時(shí)是否為8南北直行燈滅南北黃燈亮南北直行燈亮東西黃燈滅南北黃燈滅東西紅燈亮NNYYYN圖424 LED控制程序流程圖 中斷程序的設(shè)計(jì)這里我們所說到的中斷程序就是用定時(shí)器所產(chǎn)生的中斷,定時(shí)器工作的基本原理其實(shí)就是給初值,讓它不斷加1直至減完為模值,這個(gè)初值是送到TH和TL中的。它是以加法記數(shù)的,并能從全1到全0時(shí)自動(dòng)產(chǎn)生溢出中斷請求。因此,我們可以就可以效利用定時(shí)器的計(jì)數(shù)溢出,進(jìn)行各項(xiàng)控制,還有因?yàn)槎〞r(shí)器的計(jì)時(shí)時(shí)間非常精確,對于有用到時(shí)間的地方一般都會(huì)選用定時(shí)器。其程序原理為:開始之后,啟動(dòng)定時(shí)器T0并給其賦初值,下一步定計(jì)器計(jì)數(shù),然后產(chǎn)生中斷請求,從而從入口interrupt 1進(jìn)入中斷子程序,關(guān)閉定時(shí)器T0,在程序里執(zhí)行相應(yīng)控制,最后再重新給定時(shí)器賦初值并啟動(dòng)定時(shí)器T0,其程序流程圖如圖425 中斷程序流程圖。開始啟動(dòng)定時(shí)器T0并賦初值定時(shí)器計(jì)數(shù)中斷關(guān)閉定時(shí)器返回圖425 中斷程序流程圖中斷子程序部分源代碼如下:以下程序?yàn)槎〞r(shí)器的選擇及啟動(dòng),并對計(jì)數(shù)值進(jìn)行初始設(shè)定。EA=1;ET0=1。 //定時(shí)器T0中斷允許TH0=(6553646083)/256。 //將定時(shí)器計(jì)時(shí)時(shí)間設(shè)定為46083TL0=(6553646083)%256。 //=50000微秒=50毫秒 TR0=1。 //啟動(dòng)定時(shí)器T0開始運(yùn)行以下程序?yàn)橹袛嘧佣〞r(shí)器的中斷子程序,每中斷一次就掃一次并重新賦值void interserve1(void ) interrupt 1 //選擇中斷入口,定時(shí)器T0為1 { TR0=0。 //關(guān)閉定時(shí)器T0 //從這里開始,可以加入其他控制語句 TH0=(6553646083)/256。 //重新給計(jì)數(shù)器T0賦初值 TL0=(6553646083)%256。 TR0=1。 //啟動(dòng)定時(shí)器T0 } 車流量計(jì)算公式的程序設(shè)計(jì)本設(shè)計(jì)用以計(jì)算車流量的公式為Y=7+2X,其中X為檢測到的車輛數(shù),Y為控制倒計(jì)時(shí)及綠燈亮的時(shí)間值,其工作原理為:開始之后馬上計(jì)算Y值,下一步判斷X是否大于20,如果大于20就直接給Y賦值47,下一步判斷X是否為0,如果X為0則直接給Y賦值0,其程序流程圖如圖426 車流量計(jì)算公式的程序流程圖。開始y=7+2xX是否大于等于20Y=47X是否等于0Y=0返回YNYN圖426 車流量計(jì)算公式的程序流程圖車流量計(jì)算公式的實(shí)現(xiàn)程序如下:/**********************************************************/void jisuang(){ Y=7+2*X。 if(X=20){Y=47。}if(X==0){Y=0。}}說明:這里用到的X和Y在程序里面沒有用到,而是用其他的變量來代替X和Y,為了簡要說明這里才能X和Y進(jìn)行說明而以。以上公式的由來:一句話,來源于實(shí)踐,為什么這樣說呢?因?yàn)檫@個(gè)數(shù)據(jù)是我到十字路口用秒表測的,測出多組數(shù)據(jù)總結(jié)出來的結(jié)論,雖然達(dá)不到一些專業(yè)的數(shù)學(xué)統(tǒng)計(jì)學(xué)者作出來的那些的準(zhǔn)確性,但也是大概可行的,先說一下2X,由測量和總結(jié)發(fā)現(xiàn),一般在路上算上車與車的間隔平均一輛車占地6米左右,而在交通路口,一輛車的通過時(shí)速一般大概是3米每秒左右,所以一輛車的時(shí)候,就是6米,從停車等待的地點(diǎn)開到本設(shè)計(jì)放車流量檢測傳感器的地點(diǎn)所用的時(shí)間是6247。3=2,故兩秒,如果是兩輛車就是12米,所以算得時(shí)間是12247。3=4,后面的以此類推就得出2X來了。至于7+2X的7是車輛從本設(shè)計(jì)放車流量檢測傳感器的地點(diǎn)到對面路口或左行左邊的路口所用的時(shí)間,這個(gè)時(shí)間是不定的,因?yàn)橛幸恍┙煌诒容^大一些路口比較小,這就造成了時(shí)間的不致。本設(shè)計(jì)沒有實(shí)際的應(yīng)用地方故暫設(shè)計(jì)定為7。 發(fā)送與接收的程序設(shè)計(jì)本設(shè)計(jì)兩片的單片機(jī)是選擇串口通訊的,串行通信是指一個(gè)數(shù)據(jù)的所有位按一定的順序和方式,一位一位地通過串行輸入/輸出口進(jìn)行傳送(通過引腳發(fā)送二進(jìn)制0和1)。在單片機(jī)里通訊用到的寄存器為SBUF寄存器,SBUF是一個(gè)八位的寄存器,即是發(fā)送數(shù)據(jù)的緩沖器又是接收數(shù)據(jù)的緩沖器。單片機(jī)發(fā)送數(shù)據(jù)時(shí),將要發(fā)送的數(shù)據(jù)存放在SBUF寄存器中一位位發(fā)送出去。單片機(jī)接收數(shù)據(jù)時(shí),將接收到的數(shù)據(jù)一位位接收進(jìn)來存放在SB
點(diǎn)擊復(fù)制文檔內(nèi)容
法律信息相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1