單片機(jī)課程設(shè)計(jì)雙機(jī)通信交通燈_第1頁(yè)
單片機(jī)課程設(shè)計(jì)雙機(jī)通信交通燈_第2頁(yè)
單片機(jī)課程設(shè)計(jì)雙機(jī)通信交通燈_第3頁(yè)
單片機(jī)課程設(shè)計(jì)雙機(jī)通信交通燈_第4頁(yè)
單片機(jī)課程設(shè)計(jì)雙機(jī)通信交通燈_第5頁(yè)
已閱讀5頁(yè),還剩8頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

本文格式為Word版,下載可任意編輯——單片機(jī)課程設(shè)計(jì)雙機(jī)通信交通燈《單片機(jī)課程設(shè)計(jì)》設(shè)殳計(jì)報(bào)告題目雙機(jī)通信專業(yè):

電子信息工程班級(jí):

班學(xué)號(hào):

631

姓名:指導(dǎo)老師:重慶交通大學(xué)信息科學(xué)與工程學(xué)院設(shè)計(jì)時(shí)間:年1月1日到年1月9號(hào)

2/14

1.設(shè)計(jì)任務(wù)說明在課程測(cè)驗(yàn)(交通燈)的根基上,實(shí)現(xiàn)雙機(jī)通信:

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

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

;2、也可通過一個(gè)單片機(jī)系統(tǒng)操縱另一個(gè)單片機(jī)系統(tǒng)交通燈的設(shè)置(如變更不同路口紅綠燈時(shí)間等參數(shù)的設(shè)置)。

3、也可完成經(jīng)指導(dǎo)老師批準(zhǔn)的其它題目,如:

(1)

用單片機(jī)及A/D轉(zhuǎn)換芯片實(shí)現(xiàn)的數(shù)字電壓表(2)

用單片機(jī)及D/A轉(zhuǎn)換芯片實(shí)現(xiàn)的波形發(fā)生器2.總體設(shè)計(jì)本人選擇做雙機(jī)通信交通燈,通過兩個(gè)按鍵分別設(shè)置紅燈、綠燈的時(shí)間參數(shù)。當(dāng)然,設(shè)置時(shí)間參數(shù)的是其中一塊單片機(jī),操縱數(shù)碼管和紅綠燈亮暗的的變化又是另外一塊單片機(jī)。

3.細(xì)致設(shè)計(jì)總設(shè)計(jì)圖如下:

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讎」綠燈時(shí)間操縱紅燈時(shí)間J2_13.ii_.JS_,dpomo口XTAL1*■L1AD1

XTA12PD.i^bi

PE.S^05

PDTMTIRSrT

卩211陶

p士訓(xùn)jn

P2.3W^11FSEWP2.UW.12ALEP2^ll3Eft帆礎(chǔ)*

P2TJIK15

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

柑測(cè)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乙機(jī))

4.程序及說明流程圖:

開頭乙單片機(jī)循環(huán)運(yùn)行紅綠燈,分別對(duì)應(yīng)60秒,30秒等待中斷

4/14

中斷處理:進(jìn)入中斷甲機(jī)按鍵按下,對(duì)應(yīng)的紅綠燈時(shí)間自動(dòng)減一甲機(jī)將數(shù)據(jù)通過串行端口傳送給乙單片機(jī)乙單片機(jī)短暫地顯示剛設(shè)置好的紅綠燈時(shí)間參數(shù)乙單片機(jī)進(jìn)入下一次循環(huán)顯示的時(shí)候,重新取新的時(shí)間參數(shù)

甲單片機(jī)程序代碼如下:

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

5/14

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

voidtimer1()interrupt1{

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

/***********外部中斷0函數(shù)**********************************************/voidint0()interrupt0//對(duì)應(yīng)紅燈時(shí)間參數(shù)設(shè)置{

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

定時(shí)器0函數(shù)//工作方式1,16位計(jì)數(shù)外部中斷1函數(shù)}

6/14

**********************************************/voidint1()interrupt2//對(duì)應(yīng)綠燈時(shí)間參數(shù)設(shè)置{

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

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

init();while(1);}

乙單片機(jī)代碼如下:

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

函數(shù)

7/14

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

voidinit(){

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

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

TR0=1;I//啟動(dòng)定時(shí)器TO工作

}

/**********延時(shí)函數(shù)二個(gè)是綠燈的時(shí)長(zhǎng)參數(shù)ucharg;//作為數(shù)組的下標(biāo),如data_2[g]

uinti;//用于動(dòng)態(tài)顯示字符

uintj;//用于動(dòng)態(tài)顯示字符

/***********初始化函數(shù)uchara=60;//直接賦值給數(shù)碼管的數(shù)據(jù)uchardata_2[]={60,30};//數(shù)組的第一個(gè)數(shù)據(jù)是紅燈的時(shí)長(zhǎng)參數(shù),第uchar數(shù)碼管共uchar數(shù)碼管共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;//以下是動(dòng)態(tài)顯示,d1=0;d2=1;//若是共陽(yáng),位選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];

數(shù)碼管動(dòng)態(tài)//若是共陽(yáng),位選d1,d2取值相反定時(shí)}

9/14

elsea=data_2[0];}

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

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

}

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

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

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

}

TR0=1;//重新開啟定時(shí)器主函

voidmain(){}

10/14

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

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

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

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

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

5.系統(tǒng)測(cè)試

11/14

程序初始化紅燈最長(zhǎng)顯示時(shí)間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秒(圖如上)

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

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

12/14

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

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

分析:本程序?yàn)榱瞬恢劣诩t燈時(shí)間太短時(shí),就直接導(dǎo)致黃燈5秒閃爍,而將紅燈時(shí)間參數(shù)設(shè)置范圍定位10到99秒鐘,按鍵每按一次時(shí)間參數(shù)自動(dòng)減一,數(shù)碼管顯示剛剛設(shè)置好的時(shí)間參數(shù)1至2秒鐘,然后回到斷點(diǎn),持續(xù)顯示之前的交通燈狀態(tài);等到下一次循環(huán)到來時(shí),顯示新的已設(shè)置好的時(shí)間參數(shù)。FD^AbClH.1MD1FD^ADZruj-L"jRD.M

溫馨提示

  • 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)論