版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> 第一節(jié) 系統(tǒng)總體方案</p><p><b> 1.1設(shè)計要求</b></p><p> 1)南北方向(主干道)車道和東西方向(支干道)車道兩條交叉道路上的車輛交替運行,主干道每次通行時間都設(shè)為80秒、支干道每次通行間為60秒。</p><p> 2)在綠燈轉(zhuǎn)為紅燈時,要求黃燈先亮3秒鐘,才能變換運行車道;<
2、/p><p> 3)黃燈亮?xí)r,要求每秒閃亮一次。</p><p> 4)東西方向、南北方向車道除了有紅、黃、綠燈指示外,每一種燈亮的時間都用顯示器進(jìn)行顯示(采用計時的方法)。</p><p><b> 1.2設(shè)計任務(wù)</b></p><p> 1)東西、南北車輛交替運行</p><p> 2
3、)綠燈轉(zhuǎn)為紅燈時,黃燈閃亮(間隔3秒)。</p><p> 3)能顯示剩余時間。</p><p> 4)能對交通運行進(jìn)行控制。</p><p> 5)能夠?qū)r間進(jìn)行修改并正常運行。</p><p><b> 1.3 總體設(shè)計</b></p><p><b> 第二節(jié) 硬件設(shè)計
4、</b></p><p><b> 2.1單片機選型</b></p><p><b> AT89C51</b></p><p><b> 引腳結(jié)構(gòu)圖</b></p><p><b> 2.2 硬件電路圖</b></p>&
5、lt;p><b> 第三節(jié) 軟件設(shè)計</b></p><p><b> 3.1 設(shè)計流程圖</b></p><p> 3.2 緊急中斷流程圖</p><p> 3.3 設(shè)計程序及說明</p><p> #include<reg51.h> </p><
6、p> #define uchar unsigned char </p><p> #define uint unsigned int </p><p> uchar code table[]={ //共陰極數(shù)碼管碼表1-F </p><p> 0x3f,0x06,0x5b,0x4f, </p><p> 0x66,0x6
7、d,0x7d,0x07, </p><p> 0x7f,0x6f,0x77,0x7c, </p><p> 0x39,0x5e,0x79,0x71, </p><p> 0xC9,0xFF,0x40};//設(shè)置碼,測試碼,不計時碼 </p><p> void delay(uint x);//延時函數(shù) </p><
8、p> void display(uchar,uchar,uchar,uchar); //數(shù)碼管顯示函數(shù) </p><p> void mkeys(); //鍵盤函數(shù) </p><p> void traffic(); //交通燈函數(shù) </p><p> uchar num,num1,num2, //1南北 2東西 </p>
9、<p> shi1,ge1,shi2,ge2, </p><p> value1,value2,//南北 綠燈時間 黃燈時間 </p><p> value3,value4,//東西 綠燈時間 黃燈時間 </p><p> count1,count2,flag1,flag2; //南北標(biāo)記 東西標(biāo)記 </p><p&
10、gt; void main() </p><p><b> { </b></p><p> TMOD=0x01; </p><p> TH0=(65536-45872)/256; </p><p> TL0=(65536-45872)%256; </p><p><b>
11、 EA=1; </b></p><p><b> ET0=1; </b></p><p><b> TR0=1; </b></p><p><b> /*初狀態(tài)*/ </b></p><p> value1=60; //南北 黃綠燈默認(rèn)值 <
12、/p><p> value2=3; </p><p> value3=80; //東西 黃綠燈默認(rèn)值 </p><p> value4=3; </p><p> num1=value1; //南北數(shù)碼管先綠燈時間 </p><p> num2=value2+value1;//東西紅燈時間 </
13、p><p> shi1=num1/10; </p><p> ge1=num1%10; </p><p> shi2=num2/10; </p><p> ge2=num2%10; </p><p> P1=0x41;//初始狀態(tài):東西紅燈 南北綠燈 </p><p> whi
14、le(1){ </p><p> if(num==20) //定時器1s </p><p><b> { </b></p><p><b> num=0; </b></p><p><b> num1--; </b></p><p>
15、;<b> num2--; </b></p><p> traffic(); </p><p> shi1=num1/10; </p><p> ge1=num1%10; </p><p> shi2=num2/10; </p><p> ge2=num2%10; </p>
16、<p> } mkeys();//掃描按鍵 </p><p> display(shi1,ge1,shi2,ge2);//調(diào)用數(shù)碼管顯示函數(shù) </p><p><b> } </b></p><p><b> } </b></p><p> void traffic() //
17、紅綠燈主控制程序 </p><p><b> { </b></p><p> if(num1==0){ </p><p> count1++; </p><p> if(count1==1){ </p><p> P1=0x42;//東西紅燈 南北黃燈 </p>&l
18、t;p> num1=value2; </p><p><b> } </b></p><p> if(count1==2){ </p><p> num1=value3+value4;//東西綠燈 南北紅燈 </p><p><b> P1=0x14; </b></p&g
19、t;<p><b> } </b></p><p> if(count1==3){ </p><p> P1=0x41;// 東西黃燈 南北紅燈 </p><p> num1=value4; </p><p> count1=0; </p><p>&
20、lt;b> } </b></p><p><b> } </b></p><p> if(num2==0){ </p><p> count2++; </p><p> if(count2==1){ </p><p> //P1=0x14;//東西綠燈 南北紅燈
21、 </p><p> num2=value3; </p><p><b> } </b></p><p> if(count2==2){ </p><p> P1=0x24;//東西黃燈 南北紅燈 </p><p> num2=value4; </p><p&g
22、t;<b> } </b></p><p> if(count2==3){ </p><p> num2=value1+value2; //東西紅燈 南北綠燈 </p><p> num1=value1; </p><p> count2=0; </p><p><b>
23、} </b></p><p><b> } </b></p><p><b> } </b></p><p> void display(uchar shi1,uchar ge1,uchar shi2,uchar ge2) //數(shù)碼管顯示子函數(shù) </p><p><b>
24、; { </b></p><p> uchar temp; </p><p><b> temp=P2; </b></p><p><b> P2=0xfe; </b></p><p> P0=table[shi1]; </p><p> de
25、lay(5); </p><p><b> P2=0xfd; </b></p><p> P0=table[ge1]; </p><p> delay(5); </p><p><b> P2=0xfb; </b></p><p> P0=table[shi2];
26、</p><p> delay(5); </p><p><b> P2=0xf7; </b></p><p> P0=table[ge2]; </p><p> delay(5); </p><p><b> } </b></p><p
27、> void delay(uint x)//延時子函數(shù) </p><p><b> { </b></p><p> uint i,j; </p><p> for(i=x;i>0;i--) </p><p> for(j=110;j>0;j--); </p><p>&
28、lt;b> } </b></p><p> void mkeys() //4*4矩陣鍵盤功能子函數(shù) </p><p><b> { </b></p><p> uchar temp,key; </p><p> P3=0xfe;//第一行線 </p><p>&l
29、t;b> temp=P3; </b></p><p> temp=temp&0xf0; </p><p> if(temp!=0xf0) </p><p><b> { </b></p><p> delay(10); </p><p><b> t
30、emp=P3; </b></p><p> temp=temp&0xf0; </p><p> if(temp!=0xf0){ </p><p><b> temp=P3; </b></p><p> switch(temp) </p><p><b> {
31、 </b></p><p> case 0xee: </p><p><b> key=0; </b></p><p><b> break; </b></p><p> case 0xde: </p><p><b> key=1; <
32、/b></p><p><b> break; </b></p><p> case 0xbe: </p><p><b> key=2; </b></p><p><b> break; </b></p><p> case 0x7e:
33、 </p><p><b> key=3; </b></p><p><b> break; </b></p><p><b> } </b></p><p> while(temp!=0xf0) </p><p><b> { &l
34、t;/b></p><p><b> temp=P3; </b></p><p> temp=temp&0xf0; </p><p><b> } </b></p><p> if(key==0) {//按鍵1:暫停 </p><p> TR0=~TR
35、0; //定時器取反 </p><p> flag1=~flag1;//南北能夠設(shè)置標(biāo)志 0有效 </p><p> flag2=~flag2;//東西能夠設(shè)置標(biāo)志 </p><p><b> } </b></p><p> if(key==1&&flag1==0){ //按鍵2:設(shè)置時間
36、按鈕 </p><p><b> TR0=0; </b></p><p> P1=0x44;//禁止東南西北車輛 全為紅燈 可以設(shè)置 </p><p> shi1=ge1=shi2=ge2=16; </p><p><b> } </b></p><p> if
37、(key==2&&flag2==0){//按鍵3:設(shè)置完成 重啟 </p><p><b> TR0=1; </b></p><p> num=0; //定時器 初始化 </p><p> P1=0x41; //重新開始初狀態(tài) </p><p> num1=value1; //南北數(shù)碼管
38、先綠燈時間 </p><p> num2=value2+value1;//東西紅燈時間 </p><p> shi1=num1/10; </p><p> ge1=num1%10; </p><p> shi2=num2/10; </p><p> ge2=num2%10; </p><p
39、><b> } </b></p><p> if(key==3&&P1==0x44){ //按鍵4:測試交通燈各個設(shè)備的好壞 </p><p><b> P1=0xff; </b></p><p> delay(1000); </p><p><b> P1
40、=~P1; </b></p><p> shi1=ge1=shi2=ge2=17; </p><p><b> P1=0x44; </b></p><p><b> } </b></p><p><b> } </b></p><p>
41、;<b> } </b></p><p> P3=0xfd;//第二行線 </p><p><b> temp=P3; </b></p><p> temp=temp&0xf0; </p><p> if(temp!=0xf0) </p><p><b
42、> { </b></p><p> delay(10); </p><p><b> temp=P3; </b></p><p> temp=temp&0xf0; </p><p> if(temp!=0xf0){ </p><p><b> tem
43、p=P3; </b></p><p> switch(temp) </p><p><b> { </b></p><p> case 0xed: </p><p><b> key=0; </b></p><p><b> break; &l
44、t;/b></p><p> case 0xdd: </p><p><b> key=1; </b></p><p><b> break; </b></p><p> case 0xbd: </p><p><b> key=2; </b&
45、gt;</p><p><b> break; </b></p><p> case 0x7d: </p><p><b> key=3; </b></p><p><b> break; </b></p><p><b> } &l
46、t;/b></p><p> while(temp!=0xf0) </p><p><b> { </b></p><p><b> temp=P3; </b></p><p> temp=temp&0xf0; </p><p><b> }
47、 </b></p><p> if(key==0&&P1==0x44){ //按鍵5:設(shè)置南北綠燈時間+ </p><p> num1=value1; </p><p> if(num2!=159){ //@@@@保證交通合理,紅燈最大值計時159s,綠燈不再增加 </p><p><b> n
48、um1++; </b></p><p> value1=num1; </p><p><b> } </b></p><p> shi1=num1/10; </p><p> ge1=num1%10; </p><p> num2=value1+value2;//顯示東西紅燈
49、時間 </p><p> shi2=num2/10; </p><p> ge2=num2%10; </p><p><b> } </b></p><p> if(key==1&&P1==0x44){ //按鍵6:設(shè)置南北黃燈時間+ </p><p> num1=va
50、lue2; </p><p> if(num2!=159){ </p><p><b> num1++; </b></p><p> value2=num1; </p><p><b> } </b></p><p> shi1=num1/10; </p>
51、;<p> ge1=num1%10; </p><p> num2=value1+value2;//顯示東西紅燈時間 </p><p> shi2=num2/10; </p><p> ge2=num2%10; </p><p><b> } </b></p><p>
52、 if(key==2&&P1==0x44&&value1>3){ //按鍵7:設(shè)置南北綠燈時間- @@@@保證交通合理,綠燈最小值計時3s,綠燈不再減少 </p><p> num1=value1; </p><p><b> num1--; </b></p><p> value1=num1;
53、</p><p> shi1=num1/10; </p><p> ge1=num1%10; </p><p> num2=value1+value2;//顯示東西紅燈時間 </p><p> shi2=num2/10; </p><p> ge2=num2%10; </p><p>
54、<b> } </b></p><p> if(key==3&&P1==0x44&&value2>3){ //按鍵8:設(shè)置南北黃燈時間- </p><p> num1=value2; </p><p><b> num1--; </b></p><
55、p> value2=num1; </p><p> shi1=num1/10; </p><p> ge1=num1%10; </p><p> num2=value1+value2;//顯示東西紅燈時間 </p><p> shi2=num2/10; </p><p> ge2=num2%10; &
56、lt;/p><p><b> } </b></p><p><b> } </b></p><p><b> } </b></p><p> P3=0xfb;//第三行線 </p><p><b> temp=P3; </b>
57、</p><p> temp=temp&0xf0; </p><p> if(temp!=0xf0) </p><p><b> { </b></p><p> delay(10); </p><p><b> temp=P3; </b></p>
58、<p> temp=temp&0xf0; </p><p> if(temp!=0xf0){ </p><p><b> temp=P3; </b></p><p> switch(temp) </p><p><b> { </b></p><p
59、> case 0xeb: </p><p><b> key=0; </b></p><p><b> break; </b></p><p> case 0xdb: </p><p><b> key=1; </b></p><p>&
60、lt;b> break; </b></p><p> case 0xbb: </p><p><b> key=2; </b></p><p><b> break; </b></p><p> case 0x7b: </p><p><b&
61、gt; key=3; </b></p><p><b> break; </b></p><p><b> } </b></p><p> while(temp!=0xf0) </p><p><b> { </b></p><p>
62、;<b> temp=P3; </b></p><p> temp=temp&0xf0; </p><p><b> } </b></p><p> if(key==0&&P1==0x44){ //按鍵9:設(shè)置東西綠燈時間+ </p><p> num2=valu
63、e3; </p><p> if(num1!=159){ </p><p><b> num2++; </b></p><p> value3=num2; </p><p><b> } </b></p><p> shi2=num2/10; </p>
64、<p> ge2=num2%10; </p><p> num1=value3+value4;//顯示南北紅燈時間 </p><p> shi1=num1/10; </p><p> ge1=num1%10; </p><p><b> } </b></p><p> if
65、(key==1&&P1==0x44){ //按鍵10:設(shè)置東西黃燈時間+ </p><p> num2=value4; </p><p> if(num1!=159){ </p><p><b> num2++; </b></p><p> value4=num2; </p>&l
66、t;p><b> } </b></p><p> shi2=num2/10; </p><p> ge2=num2%10; </p><p> num1=value3+value4;//顯示南北紅燈時間 </p><p> shi1=num1/10; </p><p> ge1=
67、num1%10; </p><p><b> } </b></p><p> if(key==2&&P1==0x44&&value3>3){ //按鍵11:設(shè)置東西綠燈時間- </p><p> num2=value3; </p><p><b> num2-
68、-; </b></p><p> value3=num2; </p><p> shi2=num2/10; </p><p> ge2=num2%10; </p><p> num1=value3+value4;//顯示南北紅燈時間 </p><p> shi1=num1/10; </p&g
69、t;<p> ge1=num1%10; </p><p><b> } </b></p><p> if(key==3&&P1==0x44&&value4>3){ //按鍵12:設(shè)置東西黃燈時間- </p><p> num2=value4; </p><p>
70、;<b> num2--; </b></p><p> value4=num2; </p><p> shi2=num2/10; </p><p> ge2=num2%10; </p><p> num1=value3+value4;//顯示南北紅燈時間 </p><p> shi1=
71、num1/10; </p><p> ge1=num1%10; </p><p><b> } </b></p><p><b> } </b></p><p><b> } </b></p><p> P3=0xf7;//第四行線
72、2個按鍵未用 </p><p><b> temp=P3; </b></p><p> temp=temp&0xf0; </p><p> if(temp!=0xf0) </p><p><b> { </b></p><p> delay(10); <
73、;/p><p><b> temp=P3; </b></p><p> temp=temp&0xf0; </p><p> if(temp!=0xf0){ </p><p><b> temp=P3; </b></p><p> switch(temp) <
74、;/p><p><b> { </b></p><p> case 0xe7: </p><p><b> key=0; </b></p><p><b> break; </b></p><p> case 0xd7: </p>&
75、lt;p><b> key=1; </b></p><p><b> break; </b></p><p> case 0xb7: </p><p><b> key=2; </b></p><p><b> break; </b><
76、;/p><p> case 0x77: </p><p><b> key=3; </b></p><p><b> break; </b></p><p><b> } </b></p><p> while(temp!=0xf0) </p
77、><p><b> { </b></p><p><b> temp=P3; </b></p><p> temp=temp&0xf0; </p><p><b> } </b></p><p> if(key==0&&P1
78、==0x44){ //按鍵13:南北緊急情況:南北綠燈常亮 東西紅燈常亮 </p><p><b> P1=0x41; </b></p><p> shi1=ge1=shi2=ge2=18; </p><p><b> } </b></p><p> if(key==1&&a
79、mp;P1==0x44){ //按鍵14:東西緊急情況:東西綠燈常亮 南北紅燈常亮 </p><p><b> P1=0x14; </b></p><p> shi1=ge1=shi2=ge2=18; </p><p><b> } </b></p><p> if(key==2
80、&&P1==0x44){//按鍵15:編程預(yù)留 </p><p><b> } </b></p><p> if(key==3&&P1==0x44){//按鍵16:編程預(yù)留 </p><p><b> } </b></p><p><b> } &l
81、t;/b></p><p><b> } </b></p><p><b> } </b></p><p> void T0_time() interrupt 1 //定時器T0 中斷子程序 </p><p><b> { </b></p>&l
82、t;p> TH0=(65536-45872)/256; </p><p> TL0=(65536-45872)%256; </p><p> num++; }</p><p> 3.4 主要函數(shù)說明</p><p> 1) 延時函數(shù):delay(uint x); 主要控制數(shù)碼管動態(tài)顯示,x用來控制延時長短 </p&g
83、t;<p> 2) 十字路口剩余時間數(shù)碼管顯示函數(shù):display(uchar,uchar,uchar,uchar); 給P0東西南北方向數(shù)碼管每段十位、個位送數(shù)據(jù) </p><p> 3) 鍵盤函數(shù):mkeys();交通燈時間、狀態(tài)的設(shè)置 </p><p> 4) 交通南北東西燈紅黃綠工作順序函數(shù):traffic()。交通燈運行規(guī)則控制。</p><
84、;p> 第四節(jié) Proteus軟件仿真</p><p><b> 4.1 正常運行</b></p><p><b> 4.2 黃燈閃爍</b></p><p><b> 4.3通行轉(zhuǎn)換</b></p><p> 4.4 設(shè)置信號燈時間</p>&
85、lt;p><b> 綠燈時間</b></p><p><b> 黃燈時間</b></p><p> 4.5 設(shè)置后啟動運行</p><p> 第五節(jié) 課程設(shè)計體會</p><p><b> 第六節(jié) 參考文獻(xiàn)</b></p><p>
86、 【1】祁紅巖,馮麗媛,景維鵬《MCS51 單片機實踐與應(yīng)用》(基于C語言)</p><p> 機械工業(yè)出版社,2012</p><p> 【2】唐穎《單片機技術(shù)及C51程序設(shè)計》 電子工業(yè)出版社,2012</p><p> 【3】李建忠《單片機原理及應(yīng)用》 西安電子科技大學(xué)出版社,2012</p><p>
87、 【4】王章瑞《單片機原理及應(yīng)用課程實驗及課程設(shè)計》</p><p> 【5】戴佳,戴衛(wèi)恒《51單片機C語言應(yīng)用程序設(shè)計實例精講》</p><p><b> 電子工業(yè)出版社</b></p><p> 【6】求是科技《8051系列單片機C程序設(shè)計完全手冊》</p><p><b> 人民郵電出版社<
88、/b></p><p><b> 附錄</b></p><p><b> 1、同組人姓名</b></p><p><b> 2、實驗分工</b></p><p><b> 1)程序設(shè)計:</b></p><p><
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機課程設(shè)計---交通紅綠燈
- 單片機紅綠燈畢業(yè)設(shè)計
- 紅綠燈課程設(shè)計
- 紅綠燈課程設(shè)計
- 利用單片機控制紅綠燈畢業(yè)設(shè)計論文
- 紅綠燈 java課程設(shè)計報告
- 接口課程設(shè)計——模擬紅綠燈實驗
- plc_紅綠燈課程設(shè)計報告
- 太陽能紅綠燈課程設(shè)計
- 紅綠燈數(shù)字電路課程設(shè)計
- 微機原理課程設(shè)計報告---紅綠燈
- java課程設(shè)計報告---紅綠燈控制道路車輛
- 《紅綠燈前
- 課程設(shè)計--人行道紅綠燈控制系統(tǒng)
- 電工電子課程設(shè)計——自動紅綠燈控制系統(tǒng)
- 課程設(shè)計——交通紅綠燈plc控制系統(tǒng)
- 課程設(shè)計---人行道紅綠燈控制系統(tǒng)
- 飲食紅綠燈
- 數(shù)字電路紅綠燈課程設(shè)計實驗報告
- 校園紅綠燈 教學(xué)設(shè)計
評論
0/150
提交評論