版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p> 基于AT89S52交通燈設計</p><p> 學 院: 電子信息工程 </p><p> 專業(yè)班級: 2008電信(1)班 </p><p> 姓 名: </p><p> 學 號:
2、 </p><p> 指導老師: </p><p> 完成日期:2011/6/11</p><p><b> 摘要</b></p><p> 交通燈在我們日常生活中隨處可見,它在交通系統(tǒng)中處于至關重要的位置。交通燈的使用大大減少了交通繁忙路口的事故
3、發(fā)生,給行人和車輛提供一個安全的交通環(huán)境,人們的生命和財產安全有了保障。本設計旨在模擬十字路口的交通燈,以AT89S51單片機為基礎,結合按鍵和數碼管等元器件設計出一個簡單且完全的交通燈系統(tǒng)。</p><p> 關鍵詞:交通燈 AT89S52 單片機</p><p><b> 一、設計任務</b></p><p> (1)、設計一個十
4、字路口的交通燈控制電路,要求南北方向和東西方向兩條交叉道路上的車輛交替運行,每次通行時間都設30秒,時間可設置修改。</p><p> (2)、在綠燈轉為紅燈時,要求黃燈先亮5秒鐘,才能變換運行車道,且黃燈亮時,要求每秒亮一次。</p><p> (3)、有緊急車輛要求通過時,系統(tǒng)要能禁止東西和南北兩條路上所有的車輛通行。</p><p> 二、AT89S52
5、單片機及其他元器件簡介</p><p> (1)AT89S52單片機</p><p> AT89S52是一種低功耗、高性能CMOS8位微控制器。片上Flash允許程序存儲器在系統(tǒng)可編程,亦適于常規(guī)編程器。在單芯片上,擁有靈巧的8位CPU和在系統(tǒng)可編程Flash,使得AT89S52為眾多嵌入式控制應用系統(tǒng)提供高靈活、超有效的解決方案。AT89S52具有以下標準功能:8K字節(jié)Flash,2
6、56字節(jié)RAM,32位I/O口線,看門狗定時器,2個數據指針,三個16位定時器/計數器,一個6位向量2級中斷結構,全雙工串行口,片內晶振及時鐘電路。空閑模式下,CPU停止工作,允許RAM、定時器計數器、串口、中斷繼續(xù)工作。鑒于以上的優(yōu)點本系統(tǒng)采用AT89S52作為主控芯片,實現對整個系統(tǒng)的控制。(2)芯片74LS245</p><p> 74LS245是我們常用的芯片,用來驅動led或者其他的設備,它是8路同
7、相三態(tài)雙向總線收發(fā)器,可雙向傳輸數據。當19腳E為H時,A、B為高阻。E為L時,DIR為L時,數據由B傳向A;DIR為H時,由A傳向B。(3)兩位共陰數碼管</p><p> 16腳和11腳對應A、15腳和10腳對應B、3腳和8腳對應C、2腳和6腳對應D、1腳和5腳對應E、18腳和12腳對應F、17腳7腳對應G、4腳和9腳對應DP。公共腳為14腳和13腳,分別對應左邊和右邊顯示的數字。</p>
8、<p> 三、系統(tǒng)硬件電路設計</p><p><b> (1)時鐘電路設計</b></p><p> 如圖所示,采用內部時鐘產生方式,在XTAL1和XTAL2兩端跨接晶體或陶瓷振蕩器,與內部反相器構成穩(wěn)定的自擊震蕩。其發(fā)出的時鐘脈沖直接送入片內定時控制部件。</p><p> ?。?) 復位電路設計</p>&l
9、t;p> 如上圖所示,采用上電+按鈕電平復位方式,當按下按鈕時,RST管腳高電平觸發(fā)。為保證復位可靠,RC時間常數應大于兩個機器周期,電容取10uf,電阻取1000歐。</p><p> ?。?) 燈控制電路設計</p><p> 如上圖所示,交通燈狀態(tài)顯示電路由東西南北四個方向各三個LED燈組成,分別顯示四個方向上紅、黃、綠三個狀態(tài),用以指示十字路口各方向車輛的行駛。通過軟件編
10、程,可使路口交通變化情況為:南北方向和東西方向兩條交叉道路上的車輛交替運行,主干道每次通行時間都設為30秒。在綠燈轉為紅燈時,要求黃燈先亮5秒鐘,才能變換運行車道;黃燈亮時每秒閃亮一次。</p><p> ?。?) 按鍵控制電路設計</p><p> 開關控制由7個連接到單片機的控制按鈕組成。通過軟件編程,使得各個開關的功能如上圖所示, 基本滿足了交通燈的需要。</p>&
11、lt;p> 四、元件清單及實物圖</p><p><b> 1、程序清單</b></p><p><b> 2、原理圖</b></p><p><b> 五、實驗心得</b></p><p> 這次交通燈的制作是我學會了不少的東西,首先是proteus和keil
12、的使用。單片機程序的編寫和原理圖的仿真都是在這兩個軟件的運行下才可以進行的。這個實驗最重要的是讓我對51系列的單片機有了更深層次的了解,這一學期 開接觸單片機的時候覺得這是一門極其高深的課程,老師講的什么基本完全不懂,課后看仍舊是一頭霧水。通過交通燈的學習和制作,對單片機有了初步的了解,知道了它的組成、工作原理等等。</p><p> 在軟件編寫這一塊,開始時遇到了很大的難題,因為兩百行的程序,哪怕有一個錯誤,
13、修改起來也不是十分方便。時常沒有心思去尋找和改正錯誤,所以軟件這一塊花了很大的一部分時間。幾次調試后總算出現“0 warning”和“0 error”的字樣。</p><p> 焊接也是比較麻煩,由于萬能板買小了,再加上需要連接的線有很多根,所以首先必須考慮到元器件的排布問題,盡量讓自己的焊接的時候方便一點。借鑒別人的經驗,數碼管和排阻之間用排線相連接,很大程度上節(jié)省焊接的時間,并且讓板子看起來更加整潔、美觀。
14、</p><p> 除了學會很多東西以為,也發(fā)現了自己的不足。由于自己在這一方面只是的短缺,所以很多問題都需要查閱資料或者向別的同學請教。比如說proteus和keil的使用方法,都是看著別人操作幾遍之后才慢慢學會。還有在焊接這一方面也存在著很大問題。由于焊接在萬能板反面,所以有時候會把單片機的引腳看錯,然后用吸槍慢慢清理。這不僅浪費時間而且還可能破壞萬能板。在焊接過程中還出現短路問題,一不小心錫絲用多了就有可
15、能造成兩個點之間的短路問題,這一點說明了焊接能力還有待提升。</p><p> 實驗的結果是成功的,模擬出了交通燈的功能,各個按鍵的功能也和模擬時一致,看著數字的跳動自己信息也感到十分開心。雖然想過在這個交通燈里加入一些額外的功能,但終究由于自己知識的局限性而放棄,有點遺憾,不過能夠學到東西就好。此次試驗增長了自己的單片機知識外也讓我知道實踐和理論學習的差別。實踐過程中學到的知識自己記得會更加牢固一些,不容易忘
16、記??偟膩碚f,單片機的制作讓我收獲不小。</p><p><b> 附1 源程序代碼</b></p><p> #include <reg51.h></p><p> #define uchar unsigned char</p><p> #define uint unsigned int<
17、/p><p> uchar data buf[4];</p><p> uchar data sec_dx=20;//東西數默認</p><p> uchar data sec_nb=30;//南北默認值</p><p> uchar data set_timedx=20;</p><p> uchar data
18、 set_timenb=30;</p><p><b> int n;</b></p><p> uchar data b;//定時器中斷次數</p><p> sbit k1=P1^6;//定義5組開關</p><p> sbit k2=P1^7;</p><p> sbit k
19、3=P2^7;</p><p> sbit k4=P3^0;</p><p> sbit k5=P3^1;</p><p> sbit Yellow_nb=P2^5;//南北黃燈標志</p><p> sbit Yellow_dx=P2^2;//東西黃燈標志</p><p> sbit Green_n
20、b=P2^4;</p><p> sbit Green_dx=P2^1;</p><p> sbit Buzz=P3^7;</p><p> bit Buzzer_Indicate;</p><p> bit time=0;//燈狀態(tài)循環(huán)標志</p><p> bit set=1;//調時方向切換鍵標志&
21、lt;/p><p> uchar code table[11]={ //共陰極字型碼</p><p> 0x3f, //--0</p><p> 0x06, //--1</p><p> 0x5b, //--2</p><p> 0x4f, //--3</p><p> 0x
22、66, //--4</p><p> 0x6d, //--5</p><p> 0x7d, //--6</p><p> 0x07, //--7</p><p> 0x7f, //--8</p><p> 0x6f, //--9</p><p> 0x00 //--N
23、ULL</p><p><b> };</b></p><p><b> //函數的聲明部分</b></p><p> void delay(int ms);//延時子程序</p><p> void key();//按鍵掃描子程序</p><p> void ke
24、y_to1();//鍵處理子程序</p><p> void key_to2();</p><p> void key_to3();</p><p> void display();//顯示子程序</p><p> void logo(); //開機LOGO</p><p> void Buzzer();
25、</p><p><b> //主程序</b></p><p> void main()</p><p><b> {</b></p><p> TMOD=0X01;</p><p><b> TH0=0XD8;</b></p>
26、<p><b> TL0=0XF0;</b></p><p><b> EA=1;</b></p><p><b> ET0=1;</b></p><p><b> TR0=1;</b></p><p><b> EX0=1
27、;</b></p><p><b> EX1=1;</b></p><p><b> logo();</b></p><p> P2=0Xc3;// 開始默認狀態(tài),東西綠燈,南北黃燈</p><p> sec_nb=sec_dx+5; </p><p>&
28、lt;b> while(1)</b></p><p><b> { </b></p><p> key(); //調用按鍵掃描程序</p><p> display(); //調用顯示程序</p><p><b> Buzzer();</b></p>&l
29、t;p><b> }</b></p><p><b> }</b></p><p><b> //函數的定義部分</b></p><p> void key()//按鍵掃描子程序</p><p><b> {</b></p>
30、<p><b> if(k1!=1)</b></p><p><b> {</b></p><p> delay(10);</p><p><b> if(k1!=1)</b></p><p><b> {</b></p>
31、;<p> while(k1!=1)</p><p><b> { </b></p><p> key_to1();</p><p> for(n=0;n<40;n++)</p><p> { display();}</p><p><b> }</
32、b></p><p><b> }</b></p><p><b> }</b></p><p><b> if(k2!=1)</b></p><p><b> {</b></p><p> delay(10);&l
33、t;/p><p><b> if(k2!=1)</b></p><p><b> {</b></p><p> while(k2!=1)</p><p><b> { </b></p><p> key_to2();</p><
34、p> for(n=0;n<40;n++)</p><p> { display();}</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b&g
35、t; if(k3!=1)</b></p><p><b> {</b></p><p> TR0=1; //啟動定時器</p><p> Buzzer_Indicate=0;</p><p> sec_nb=set_timenb;//從中斷回復,仍顯示設置過的數值</p>&l
36、t;p> sec_dx=set_timedx;</p><p> if(time==0)</p><p> { P2=0X99;sec_nb=sec_dx+5; }</p><p> else { P2=0xC3;sec_dx=sec_nb+5; }</p><p><b> } </b></p&
37、gt;<p><b> if(k4!=1)</b></p><p><b> {</b></p><p><b> delay(5);</b></p><p><b> if(k4!=1)</b></p><p><b>
38、 { </b></p><p> while(k4!=1);</p><p><b> set=!set;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> i
39、f(k5!=1)</b></p><p><b> {</b></p><p><b> delay(5);</b></p><p><b> if(k5!=1)</b></p><p><b> {</b></p>&l
40、t;p> while(k5!=1)</p><p> key_to3();</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> void display(
41、) //顯示子程序</p><p><b> {</b></p><p> buf[1]=sec_dx/10; //第1位 東西秒十位</p><p> buf[2]=sec_dx%10; //第2位 東西秒個位</p><p> buf[3]=sec_nb/10; //第3位 南北秒十位</p>
42、<p> buf[0]=sec_nb%10; //第4位 南北秒個位</p><p> P1=0xff; // 初始燈為滅的</p><p><b> P0=0x00;</b></p><p> P1=0xfe; //片選LCD1</p><
43、p> P0=table[buf[1]];</p><p><b> delay(1);</b></p><p><b> P1=0xff;</b></p><p><b> P0=0x00;</b></p><p> P1=0xfd;
44、 //片選LCD2</p><p> P0=table[buf[2]];</p><p><b> delay(1);</b></p><p><b> P1=0xff;</b></p><p><b> P0=0x00;</b></p><p&g
45、t; P1=0Xfb; //片選LCD3</p><p> P0=table[buf[3]];</p><p><b> delay(1);</b></p><p><b> P1=0xff;</b></p><p><b> P0=0x00;</b></
46、p><p><b> P1=0Xf7;</b></p><p> P0=table[buf[0]]; //片選LCD4</p><p><b> delay(1);</b></p><p><b> }</b></p><p> void
47、time0(void) interrupt 1 using 1 //定時中斷子程序</p><p><b> {</b></p><p><b> b++;</b></p><p> if(b==19) // 定時器中斷次數</p><p><b&g
48、t; {b=0;</b></p><p><b> sec_dx--;</b></p><p><b> sec_nb--;</b></p><p> if(sec_nb<=5&&time==0) //東西黃燈閃</p><p> { Green
49、_dx=0;Yellow_dx=!Yellow_dx;} </p><p> if(sec_dx<=5&&time==1) //南北黃燈閃</p><p> { Green_nb=0;Yellow_nb=!Yellow_nb;} </p><p> if(sec_dx==0&&sec
50、_nb==5) </p><p><b> sec_dx=5;</b></p><p> if(sec_nb==0&&sec_dx==5)</p><p><b> sec_nb=5;</b></p><p> if(time==0&&sec_nb==0)&l
51、t;/p><p> { P2=0x99;time=!time;sec_nb=set_timenb;sec_dx=set_timenb+5;}</p><p> if(time==1&&sec_dx==0)</p><p> {P2=0Xc3;time=!time;sec_dx=set_timedx;sec_nb=set_timedx+5;}<
52、/p><p><b> }</b></p><p><b> }</b></p><p> void key_to1()//鍵盤處理子程序之+</p><p><b> {</b></p><p> TR0=0; //關定時器&
53、lt;/p><p> if(set==0)</p><p> set_timenb++; //南北加1S</p><p><b> else</b></p><p> set_timedx++; //東西加1S</p><p> if(set_timenb==100)</p
54、><p> set_timenb=1;</p><p> if(set_timedx==100)</p><p> set_timedx=1; //加到100置1</p><p> sec_nb=set_timenb ; //設置的數值賦給東西南北</p><p> sec_dx=set_timedx;
55、</p><p><b> }</b></p><p> void key_to2() //鍵盤處理子程序之-</p><p><b> {</b></p><p> TR0=0; //關定時器</p><p> if(set==0)<
56、/p><p> set_timenb--; //南北減1S</p><p><b> else</b></p><p> set_timedx--; //東西減1S</p><p> if(set_timenb==0)</p><p> set_timenb=99;</p>
57、<p> if(set_timedx==0 )</p><p> set_timedx=99; //減到1重置99</p><p> sec_nb=set_timenb ; //設置的數值賦給東西南北</p><p> sec_dx=set_timedx;</p><p><b> }</b&
58、gt;</p><p> void key_to3() //鍵盤處理之緊急車通行</p><p><b> {</b></p><p><b> TR0=0;</b></p><p><b> P2=0Xc9;</b></p><p> s
59、ec_dx=00;</p><p> sec_nb=00;</p><p> Buzzer_Indicate=1;</p><p><b> }</b></p><p> void int0(void) interrupt 0 using 1 //只允許東西通行</p><p><
60、b> {</b></p><p><b> TR0=0;</b></p><p><b> P2=0Xc3;</b></p><p> Buzzer_Indicate=0;</p><p> sec_dx=00;</p><p> sec_nb=
61、00;</p><p><b> }</b></p><p> void int1(void) interrupt 2 using 1 //只允許南北通行 </p><p><b> {</b></p><p><b> TR0=0;</b></p>
62、<p><b> P2=0X99;</b></p><p> Buzzer_Indicate=0;</p><p> sec_nb=00;</p><p> sec_dx=00;</p><p><b> }</b></p><p> void lo
63、go()//開機的Logo "- - - -"</p><p> { for(n=0;n<50;n++)</p><p><b> {</b></p><p><b> P0=0x40;</b></p><p><b> P1=0xfe;</b&g
64、t;</p><p><b> delay(1);</b></p><p><b> P1=0xfd;</b></p><p><b> delay(1);</b></p><p><b> P1=0Xfb;</b></p><
65、p><b> delay(1);</b></p><p><b> P1=0Xf7;</b></p><p><b> delay(1);</b></p><p> P1 = 0xff;</p><p><b> }</b></p&g
66、t;<p><b> }</b></p><p> void Buzzer()</p><p><b> {</b></p><p> if(Buzzer_Indicate==1)</p><p> Buzz=!Buzz;</p><p> else
67、 Buzz=0;</p><p><b> }</b></p><p> void delay(int ms)//延時子程序</p><p><b> {</b></p><p><b> uint j,k;</b></p><p> fo
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于at89s52單片機交通燈控制系統(tǒng)設計畢業(yè)論文
- 基于at89s52單片機的交通燈控制系統(tǒng)設計畢業(yè)論文
- 單片機交通燈課程設計--基于單片機的交通燈控制設計
- 單片機交通燈課程設計--基于單片機的交通燈系統(tǒng)的設計
- 課程設計-- 基于at89s52單片機的密碼鎖設計
- 課程設計---基于at89s52單片機簡易電子琴設計
- 單片機課程設計---基于at89s52單片機的溫度控制系統(tǒng)
- 基于89c51單片機交通燈課程設計
- 課程設計---基于at89s52單片機簡易電子琴設計
- 交通燈單片機課程設計--基于單片機的交通燈顯示系統(tǒng)
- 交通燈單片機課程設計--基于單片機的交通燈顯示系統(tǒng)
- 單片機課程設計---基于at89s52 單片機的溫度控制系統(tǒng)
- 單片機交通燈課程設計--基于單片機的交通燈系統(tǒng)的設計
- 單片機交通燈課程設計
- 單片機課程設計---交通燈
- 單片機交通燈課程設計
- 單片機課程設計-交通燈
- 單片機課程設計--交通燈
- 單片機課程設計(交通燈)
- 單片機課程設計--基于單片機的交通燈設計
評論
0/150
提交評論