單片機課程設計雙機通信交通燈_第1頁
單片機課程設計雙機通信交通燈_第2頁
單片機課程設計雙機通信交通燈_第3頁
單片機課程設計雙機通信交通燈_第4頁
單片機課程設計雙機通信交通燈_第5頁
已閱讀5頁,還剩8頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

本文格式為Word版,下載可任意編輯——單片機課程設計雙機通信交通燈《單片機課程設計》設殳計報告題目雙機通信專業:

電子信息工程班級:

班學號:

631

姓名:指導老師:重慶交通大學信息科學與工程學院設計時間:年1月1日到年1月9號

2/14

1.設計任務說明在課程測驗(交通燈)的根基上,實現雙機通信:

1、可以是PC機與單片機的通信,通過PC機上的軟件(如串口調試助手等)

操縱單片機交通燈的設置(如變更不同路口紅綠燈時間等參數的設置)

;2、也可通過一個單片機系統操縱另一個單片機系統交通燈的設置(如變更不同路口紅綠燈時間等參數的設置)。

3、也可完成經指導老師批準的其它題目,如:

(1)

用單片機及A/D轉換芯片實現的數字電壓表(2)

用單片機及D/A轉換芯片實現的波形發生器2.總體設計本人選擇做雙機通信交通燈,通過兩個按鍵分別設置紅燈、綠燈的時間參數。當然,設置時間參數的是其中一塊單片機,操縱數碼管和紅綠燈亮暗的的變化又是另外一塊單片機。

3.細致設計總設計圖如下:

R122]"?.屆ESP兀冏LD-IED.D1

「/MruirULlHiUUML1AD1PD2MD2金L2PD耶旳bDJAbi

PQWP6RSTPDJ^iCT

P2.1JCR9

pai^inPEN卩刊川AIEP2.^%12EAP2SM.13陋加*

P2JA15PHP3H/RXP3.1/DCiP1^P3Z/1N1EPL?Pt*F33/fRrTTPd.RDP15叮屯LP1J6P3OHRPk?PS.T/RN-

CUM;昨丘』》臨5ILD-gD2a?3L--Z2._2J_n

LIZl122135口25_3L...26__2L...3LD1111213li_|iLLf讎」綠燈時間操縱紅燈時間J2_13.ii_.JS_,dpomo口XTAL1*■L1AD1

XTA12PD.i^bi

PE.S^05

PDTMTIRSrT

卩211陶

p士訓jn

P2.3W^11FSEWP2.UW.12ALEP2^ll3Eft帆礎*

P2TJIK15

p^nmxDpinP3/I/TVDP1.1P^lSINTTnP1^

柑測TTF1JP3.4/TIiF1.4舊旳_F15舊JEW尺P1

Pl.T

LED-VfeLLQWL18FGIDF1

2

J

*

5

6

T

丄.BIDr-iiJ:*in

31ABCDE

3/14

LED-REDD1R2220IEtGREENIIHLrIXYELLOWCLOCK=12.0MHz30C51乙機)

4.程序及說明流程圖:

開頭乙單片機循環運行紅綠燈,分別對應60秒,30秒等待中斷

4/14

中斷處理:進入中斷甲機按鍵按下,對應的紅綠燈時間自動減一甲機將數據通過串行端口傳送給乙單片機乙單片機短暫地顯示剛設置好的紅綠燈時間參數乙單片機進入下一次循環顯示的時候,重新取新的時間參數

甲單片機程序代碼如下:

#ineludereg51.h#defineucharunsignedchar#defineuintunsignedintucharx=100;〃紅燈最長時間設置為99秒uchary=51;//綠燈最長時間設置為50秒uchart;/***********串行口發送與接收中斷處理函數**********************************************/voidinit(){IP=0x02;//中斷優先級設置(T0中斷為最高優先級,然后是INT0,最后是INT1)TMOD=0X21;//T1定時計數器工作于方式2,作為波特率發生器,SMOD此處默認取0//T0工作方式1,16位計數TH仁0Xe6;TL1=0Xe6;//8位自動重裝,波特率設置為1200TR1=1;//啟動T1定時計數器SCON=0x40;//串行方式1,串行接收遏止

5/14

EX0=1;//開啟外部中斷0EX1=1;//開啟外部中斷1IT0=1;//INT0,外部中斷0,下降沿觸發IT1=1;//INT1,外部中斷1,下降沿觸發EA=1;//開總中斷}

voidtimer1()interrupt1{

//TMOD=0x01;TR0=0;TH0=(65536-10000)/256;//對于12MHz的晶振,此處定時50ms賦值0X3cb0TL0=(65536-10000)%256;//若定時10ms,賦值0XD8F05m賦值0Xec78TR0=1;//啟動定時器T0工作t--;}

/***********外部中斷0函數**********************************************/voidint0()interrupt0//對應紅燈時間參數設置{

TH0=(65536-10000)/256;//對于12MHz的晶振,此處定時50ms賦值0X3cb0TL0=(65536-10000)%256;//若定時10ms,賦值0XD8F05m賦值0Xec78ET0=1;//開T0中斷苦求t=6;//設定延時長短TR0=1;//啟動定時器T0工作while(t);//延時消抖TR0=0;//遏止T0定時器工作,防止后面程序運行時被中斷IE0=0;//再次清外部中斷0苦求標志x--;if(x==10)x=99;TI=0;//清發送中斷苦求標志,先發再查SBUF=1;//作為標識標志,發送給乙機while(!TI);//查詢方式TI=0;SBUF=x;

定時器0函數//工作方式1,16位計數外部中斷1函數}

6/14

**********************************************/voidint1()interrupt2//對應綠燈時間參數設置{

TH0=(65536-10000)/256;//對于12MHz的晶振,此處定時50ms賦值0X3cb0TL0=(65536-10000)%256;//若定時10ms,賦值0XD8F05m賦值0Xec78ET0=1;//開T0中斷苦求TR0=1;//啟動定時器T0工作t=6;while(t);//延時消抖TR0=0;IE1=0;//再次清外部中斷1苦求標志y--;if(y==10)y=50;TI=0;SBUF=0;while(!TI);//查詢方式TI=0;SBUF=y;}

/***********main(){

init();while(1);}

乙單片機代碼如下:

#includereg51.h#defineucharunsignedchar#defineuintunsignedintuchart=0;//用于timer0函數,設置數碼管顯示的數字跳變的時間間隔ucharw=0;//切換紅綠燈標志位uchark=255;//用于串口中斷處理,甲機的按鍵按一次,那么向乙機發送兩個單字節數據//前一個數據用于辨識將要設置的時間參數屬于紅燈還是綠燈//后一個數據是想要設置的時間參數,直接賦值給相應的色燈ucharf1;//用于串口中斷處理,辨識設置的時間參數屬于紅燈還是綠燈

函數

7/14

ucharf2=0;//標志位,表示有串行中斷發生時,要將已設置好的時間參數顯示出來,1有效uintn;//用于設定要設置的時間參數在數碼管上顯示停留的時間長短codetab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//陰//codetab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//陽作為高位數碼管的公共端作為低位數碼管紅燈數據輸出位設置sbitgreen=P2A3;sbityellow=P2A4;//sbitr_ed=P0A5;//sbitg_reen=P0A6;//sbity_ellow=P0A7;//ucharr_g_y;

voidinit(){

IP=0x10;//中斷優先級設置(串口中斷為最高優先級)TMOD=0X21;//T1定時計數器工作于方式2,作為波特率發生器,SMOD此處默認取0//T0定時計數器工作于方式1,用于定時TH1=0Xe6;TL1=0Xe6;//8位自動重裝TR1=1;//啟動T1定時計數器SCON=0x50;//串行方式1,串行接收允許TH0=(65536-50000)/256;//定時50msTL0=(65536-50000)%256;EA=1;//開總中斷ET0=1;//開T0中斷苦求

ES=1;//允許串行口中斷

TR0=1;I//啟動定時器TO工作

}

/**********延時函數二個是綠燈的時長參數ucharg;//作為數組的下標,如data_2[g]

uinti;//用于動態顯示字符

uintj;//用于動態顯示字符

/***********初始化函數uchara=60;//直接賦值給數碼管的數據uchardata_2[]={60,30};//數組的第一個數據是紅燈的時長參數,第uchar數碼管共uchar數碼管共sbitd仁P2P;〃d1sbitd2=P2A1;〃d2sbitred=P2A2;//

8/14

********************************************"voiddelay(uintz){uinti;for(i=0;iz;i++);voiddisplay(ucharc){uchara=c;i=a/10;j=a%10;//以下是動態顯示,d1=0;d2=1;//若是共陽,位選d1,d2取值相反P1=tab[i];delay(30);P1=0;delay(30);d1=1;d2=0;P1=tab[j];delay(30);P1=0;delay(30);}

************/voidtimer0()interrupt1{

TR0=0;TH0=(65536-50000)/256;TL0=(65536-50000)%256;TR0=1;t++;if(t==7){a=a-1;t=0;}if(a=5t%2==0){yellow=~yellow;if(a==0){w++;red=~red;green=~green;yellow=0;if(w%2==1)a=data_2[1];

數碼管動態//若是共陽,位選d1,d2取值相反定時}

9/14

elsea=data_2[0];}

/***********串行口發送與接收中斷處理函數**********************************************/voidt_r()interrupt4{

TR0=0;//暫停定時器工作,進入紅綠燈時間設置狀態//寫接收數據的程序f2=1;n=1000;//設置變更后的時間參數在數碼管上顯示停留的時間,每次中斷后,n務必重新賦值,//保證其在數碼管上的顯示數據停留一個固定的時間段顯示處理程序寫在主函數中RI=0;//清接收中斷苦求標志//r_ed=red;//g_reen=green;//y_ellow=yellow;//r_g_y=P1;k++;//奇數,偶數次的接收數據,存放于不同位置if(k%2==0)//全局變量k初值為255,上一條指令自加后,為0;模除2,余0,為偶數,{//那么本次中斷的目的是辨識將要設置的時間參數屬于紅燈還是綠燈f1=SBUF;if(f1==1)g=0;//辨識將要設置的時間參數屬于紅燈還是綠燈,此處為紅燈elseg=1;//此處為綠燈。

}

else//模除2,余1,為奇數,那么本次中斷的目的是{//把要設置的時間參數賦值給相應的色燈。

data_2[g]=SBUF;//接收數據,設置相應色燈的時間參數//while(n--)//短暫延時,顯示您所設置的時間參數,

//display(data_2[g]);//

}

TR0=1;//重新開啟定時器主函

voidmain(){}

10/14

green=0;yellow=0;red=1;init();while(1){if(f2==1){

ET0=0;//作用如下一行//TR0=0;//暫停定時器工作,(主函數中怎么將TR0清零無效,??????)/**switch(g)//switch語句用來處理發送給乙單片機的LED燈變化數據{

case0:{red=1;green=0;yellow=0;}break;case1:{red=0;green=1;yellow=0;}break;default:;}

**/while(n--)display(data_2[g]);//短暫延時,顯示您所設置的時間參數//red=r_ed;green=g_reen;yellow=y_ellow;//P1=r_g_y;、//單步調試都可以,proteus仿真就不行??whyf2=0;//TR0=1;//重新開啟定時器ET0=1;}

display(a);//始終點亮數碼管,并等待定時中斷和串行口中斷}}

5.系統測試

11/14

程序初始化紅燈最長顯示時間EI-HECi..4t1rto:[U-■■苔二由-lHla^9RBHd:

.i.■■■*njn

■1

■■*■■■*Ii.|^l-WIBilly!cLpc^izHi科=氨;i..ri■卩pgmp匚祁PC-SfASFVAM

PQ7UII7pmjASPS/昭PZ2TA1DPl小F孟祁阿FZJ*AOrAi4P^T^JLtCP^JQ"PCIFZinxi60秒(圖如上)

紅燈結果5秒鐘黃燈閃爍(如上圖)

.LEDABD:TAL3■^|.|..|.|||.|.|..^.|-FZ-WlfffLE-C.ELUW^.產訓Q耳即IjABCDEFGDF12:TAL1J.LED^HE^MPQnADiC卩04*人站PD3A7FDaAfrlPDL^AD*P6S瞋祐RDKAGMipni^AvP2ITA3F2.IWP23A1CP33TAH1F2.4!A13陀來口R.srr紅燈60秒鐘完后,綠燈顯示30秒鐘(如上圖)

12/14

綠燈結果5秒鐘時,黃燈閃爍(如上圖)

任何時刻,皆可以設置紅燈的時間參數(如上圖)

分析:本程序為了不至于紅燈時間太短時,就直接導致黃燈5秒閃爍,而將紅燈時間參數設置范圍定位10到99秒鐘,按鍵每按一次時間參數自動減一,數碼管顯示剛剛設置好的時間參數1至2秒鐘,然后回到斷點,持續顯示之前的交通燈狀態;等到下一次循環到來時,顯示新的已設置好的時間參數。FD^AbClH.1MD1FD^ADZruj-L"jRD.M

溫馨提示

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

評論

0/150

提交評論