基于單片機的交通燈課程設(shè)計_第1頁
已閱讀1頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  摘要</b></p><p>  本設(shè)計是一個以微電子技術(shù),計算機和通信技術(shù)為先導的,而計算機技術(shù)怎樣與實際應用更有效的結(jié)合并有效的發(fā)揮其作用是科學界最熱門的話題,也是當今計算機應用中空前活躍的領(lǐng)域。十字路口車輛穿梭,行人熙攘,車行車道,人行人道,有條不紊。那么靠什么來實現(xiàn)這井然秩序呢?靠的就是交通信號燈的自動指揮系統(tǒng)。本系統(tǒng)由單片機系統(tǒng)、按鍵、四位數(shù)碼管顯示、

2、交通燈演示系統(tǒng)組成。設(shè)計一個用于東西、南北走向的交通管理。南北方向(主干道)車道和東西方向(支干道)車道兩條交叉道路上的車輛交替運行,主干道每次通行時間都設(shè)為30秒、支干道每次通行間為20秒。系統(tǒng)除基本交通燈功能外,還具有倒計時、時間設(shè)置、緊急情況處理、分時段調(diào)整信號燈的點亮時間以及根據(jù)具體情況手動控制等功能。本系統(tǒng)結(jié)構(gòu)簡單,操作方便;可實現(xiàn)自動控制,具有一定的智能性;對優(yōu)化城市交通具有一定的意義。本設(shè)計將各任務(wù)進行細分包裝,使各任務(wù)保

3、持相對獨立;能有效改善程序結(jié)構(gòu),便于模塊化處理,使程序的可讀性、可維護性和可移植性都得到進一步的提高。近年來隨著科技的飛速發(fā)展,單片機的應用正在不斷深入,同時帶動傳統(tǒng)控制檢測技術(shù)日益更新。在實時檢測和自動控制的單片機應用系統(tǒng)中,單</p><p>  關(guān)鍵詞:交通燈;單片機;AT89S52</p><p><b>  目錄</b></p><p&g

4、t;  1 概述………………………………………………………………………………3</p><p>  1.1設(shè)計背景………………………………………………………………………3</p><p>  1.2設(shè)計任務(wù)……………………………………………………………………3</p><p>  2 系統(tǒng)總體方案及硬件設(shè)計……………………………………………………… 4<

5、/p><p>  2.1 AT89S52單片機簡介…………………………………………………………4</p><p>  2.2 系統(tǒng)硬件電路的設(shè)計………………………………………………………4</p><p>  3 軟件設(shè)計…………………………………………………………………………7</p><p>  3.1 交通燈的設(shè)計程序流程圖……………

6、………………………………………7</p><p>  3.2定時器0及中斷響應…………………………………………………………8</p><p>  4 Proteus軟件仿真…………………………………………………………………10</p><p>  4.1仿真電路圖…………………………………………………………………… 10</p><p>

7、  4.2 仿真步驟………………………………………………………………………10</p><p>  5 課程設(shè)計體會……………………………………………………………………11</p><p>  參考文獻……………………………………………………………………………11</p><p>  附1: 源程序代碼……………………………………………………………… 12<

8、/p><p>  附2: 系統(tǒng)原理圖……………………………………………………………… 18</p><p><b>  1 概述</b></p><p><b>  1.1 設(shè)計背景</b></p><p>  如今隨著人們生活水平的提高,車輛越來越多,交通事故頻繁發(fā)生。交通信號燈的出現(xiàn),使交通得以有效

9、管制,對于疏導交通流量,提高道路通行能力,減少交通事故有明顯效果。交通燈在城市交通中起著重要的作用,它與人們?nèi)粘I蠲芮邢嚓P(guān),是人們出行的安全保障。因此提供一個可靠、安全、便捷的多功能交通燈控制系統(tǒng)有著現(xiàn)實的必要性。為了解決這些問題,我們更應該提高交通控制和管理水平,合理使用現(xiàn)有交通設(shè)施,充分發(fā)揮其能力,提高交通效率,促進和諧交通的建立。</p><p>  近年來隨著科技的飛速發(fā)展,單片機的應用正在不斷地走向深

10、入,同時帶動傳統(tǒng)控制檢測日新月益更新。在實時檢測和自動控制的單片機應用系統(tǒng)中,單片機往往是作為一個核心部件來使用,僅單片機方面知識是不夠的,還應根據(jù)具體硬件結(jié)構(gòu),以及針對具體應用對象特點的軟件結(jié)合,加以完善。</p><p>  本系統(tǒng)設(shè)計一個基于單片機的交通燈控制系統(tǒng)。能方便的對交通燈進行控制,使交通更和諧。</p><p><b>  1.2設(shè)計任務(wù) </b>&l

11、t;/p><p>  1)設(shè)計一個十字路口的交通燈控制電路,要求南北方向(主干道)車道和東西方向(支干道)車道兩條交叉道路上的車輛交替運行,主干道每次通行時間都設(shè)為30秒、支干道每次通行間為20秒,時間可設(shè)置修改。</p><p>  2)在綠燈轉(zhuǎn)為紅燈時,要求黃燈先亮5秒鐘,才能變換運行車道;</p><p>  3)黃燈亮時,要求每秒閃亮一次。</p>

12、<p>  4)東西方向、南北方向車道除了有紅、黃、綠燈指示外,每一種燈亮的時間都用顯示器進行顯示(采用計時的方法)。</p><p>  5)一道有車而另一道無車(實驗時用開關(guān) K0 和 K1 控制),交通燈控制系統(tǒng)能立即讓有車道放行。 </p><p>  6)有緊急車輛要求通過時,系統(tǒng)要能禁止普通車輛通行,A、B道均為紅燈,緊急車由K2 開關(guān)模擬。</p>

13、<p>  2 系統(tǒng)總體方案及硬件設(shè)計</p><p>  2.1 AT89S52單片機簡介</p><p>  AT89S52是一種低功耗、高性能CMOS8位微控制器。片上Flash允許程序存儲器在系統(tǒng)可編程,亦適于常規(guī)編程器。在單芯片上,擁有靈巧的8位CPU和在系統(tǒng)可編程Flash,使得AT89S52為眾多嵌入式控制應用系統(tǒng)提供高靈活、超有效的解決方案。AT89S52具有以下

14、標準功能:8k字節(jié)Flash,256字節(jié)RAM,32位I/O口線,看門狗定時器,2個數(shù)據(jù)指針,三個16位定時器/計數(shù)器,一個6向量2級中斷結(jié)構(gòu),全雙工串行口,片內(nèi)晶振及時鐘電路。空閑模式下,CPU停止工作,允許RAM、定時器/計數(shù)器、串口、中斷繼續(xù)工作。鑒于以上的優(yōu)點本系統(tǒng)采用AT89S52作為主控芯片,實現(xiàn)對整個系統(tǒng)的控制。</p><p>  2.2 系統(tǒng)硬件電路的設(shè)計</p><p>

15、;<b>  (1)時鐘電路設(shè)計</b></p><p>  圖2-1時鐘電路原理圖</p><p>  如圖2-1所示,采用內(nèi)部時鐘產(chǎn)生方式,在XTAL1和XTAL2兩端跨接晶體或陶瓷振蕩器,與內(nèi)部反相器構(gòu)成穩(wěn)定的自擊蕩器。其發(fā)出的時鐘脈沖直接送入片內(nèi)定時控制部件。</p><p><b> ?。?)復位電路設(shè)計</b>

16、</p><p>  圖2-2上電+按鈕電平復位電路原理圖</p><p>  如圖2-2所示,采用上電+按鈕電平復位方式,當按下按鈕時,RST管腳高電平觸發(fā)。為保證復位可靠,RC時間常數(shù)應大于兩個機器周期,一般電容去22uF,電阻取1K。</p><p> ?。?)燈控制電路設(shè)計</p><p>  圖2-3交通燈狀態(tài)顯示電路</p&

17、gt;<p>  如圖2-3所示,交通燈狀態(tài)顯示電路由東西南北四個方向各三個LED燈組成,分別顯示四個方向上紅、黃、綠三個狀態(tài),用以指示十字路口各方向車輛的行駛。通過軟件編程,可使路口交通變化情況為:南北方向(主干道)車道和東西方向(支干道)車道兩條交叉道路上的車輛交替運行,主干道每次通行時間都設(shè)為30秒、支干道每次通行間為20秒;在綠燈轉(zhuǎn)為紅燈時,要求黃燈先亮5秒鐘,才能變換運行車道;黃燈亮時每秒閃亮一次。</p&

18、gt;<p> ?。?)倒計時顯示電路設(shè)計</p><p>  圖2-4 數(shù)碼管顯示電路原理圖</p><p>  如圖2-4所示,由一個共陽極四位數(shù)碼管來實現(xiàn)倒計時。由于P0口輸出電流小,需外接上拉電阻,COME端接5V電源。</p><p> ?。?)按鍵控制電路設(shè)計</p><p>  圖2-5鍵盤電路原理圖</p&

19、gt;<p>  如圖2-5所示,開光控制由PD1-PD5四個連接到單片機的控制按鈕組成。通過軟件編程,按下PD1電路進入外部中斷響應,數(shù)碼顯示時間將停止倒計時,此時,可通過按鈕PD3和PD4設(shè)置通行時間,每按一下PD3時間增加1s,而按下PD4時間減少1s。按下PD5將使程序重新進入循環(huán)點亮狀態(tài)。</p><p><b>  3軟件設(shè)計</b></p><

20、p>  3.1 交通燈的設(shè)計程序流程圖</p><p>  3.2定時器0及中斷響應</p><p><b>  N</b></p><p><b>  Y</b></p><p><b>  N</b></p><p><b>  Y&

21、lt;/b></p><p>  4 Proteus軟件仿真</p><p><b>  4.1 仿真圖</b></p><p><b>  4.2 仿真步驟</b></p><p>  (1)根據(jù)電路圖選擇器件連接電路</p><p> ?。?)雙擊AT89S52裝

22、入源程序編譯生成的HEX文件</p><p> ?。?)單擊運行按鈕運行仿真</p><p> ?。?)根據(jù)仿真情況與程序?qū)崿F(xiàn)任務(wù)對比,對于不能實現(xiàn)的任務(wù)修改并調(diào)試程序,重新裝載重新運行調(diào)試仿真,直到能完全實現(xiàn)所要求的功能為止</p><p> ?。?)進一步改進和簡化程序在進行調(diào)試仿真</p><p><b>  5 課程設(shè)計體會

23、</b></p><p>  通過這次單片機實訓課程學習,才深刻體會到自己實際操作能力的匱乏。從剛開始老師對單片機的整體介紹及其應用前景,對單片機產(chǎn)生了濃厚的興趣,并利用自己的課余時間提前學習有關(guān)單片機的基本知識。但空有理路知識,卻無半點的實際操作經(jīng)驗。后來在老師的建議下,選擇運用單片機設(shè)計一個交通燈控制系統(tǒng),從簡單開始,后期逐步復雜化。</p><p>  從給定電路圖的分析

24、到實際電路元件的識別、焊接,再到后期的程序設(shè)計以及系統(tǒng)調(diào)試,初步掌握了運用單片機系統(tǒng)設(shè)計特定功能的設(shè)計步驟,也對單片機有了更深的體會。了解和掌握了一些簡單的編程思想,對單片機各管腳的功能,I/O口的使用條件都有了更深的理解。這次的課程設(shè)計讓我把單片機的理論知識運用的實踐中,實現(xiàn)了理論與實踐的相結(jié)合,從中更懂得了理論是實踐的基礎(chǔ),實踐更能檢驗理論的真實性,讓我受益匪淺。</p><p><b>  參考文

25、獻:</b></p><p>  [1] 李朝青.單片機原理及接口技術(shù)(修訂版).北京:北京航空航天大學出版社,1998[2] 李廣弟.單片機基礎(chǔ).北京:北京航空航天大學出版社,1992[3] 何立民.單片機應用技術(shù)大全.北京:北京航空航天大學出版社, 1994[4] 張毅剛. 單片機原理及接口技術(shù).哈爾濱:哈爾濱工業(yè)大學出版社,1990[5] 譚浩強.單片機課程設(shè)計. 北京:清華大學出版社,

26、1989</p><p>  [6] 余發(fā)山.單片機原理及應用技術(shù) 焦作:中國礦業(yè)大學出版社,2007</p><p><b>  附錄1 源程序代碼</b></p><p>  //#include<REG51.H> </p><p>  #include<AT89X51.H> /

27、/ 對單片機的口進行了定義</p><p>  #define uint unsigned int</p><p>  #define uchar unsigned char</p><p>  uchar code a[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//段碼組合,共陰極</p&

28、gt;<p>  uchar code b[4]={0xfe,0xfd,0xfb,0xf7}; //位碼組合 低有效</p><p>  uchar code c[4]={0xcc,0xd4,0x78,0xb8};/*P1 綠紅、黃紅、紅綠、紅黃*/ </p><p>  //12MHz </p><p>  //*************

29、************************************************************************</p><p>  uchar NB=25,DX=30,NBG=25,DXG=15,H=5; /*數(shù)碼管顯示值設(shè)置*/</p><p>  uchar i,k=0,cnt=0,j=0; </p><p>  sbi

30、t K0=P3^5; /*支干道通行*/</p><p>  sbit K1=P3^6; /*主干道通行*/</p><p>  sbit K4=P3^7; /*返回*/</p><p>  sbit K3=P3^2;/*設(shè)置時間*/</p><p>  sbit K2=P3^3;/*緊急剎車*/&l

31、t;/p><p>  void delay(uchar t);/*定義延時程序*/</p><p>  void key();/*定義鍵盤程序*/</p><p>  void display();/*定義顯示程序*/</p><p>  void settime();/*定義時間設(shè)置顯示程序*/</p>&l

32、t;p>  //*************************程序初始*********************************************</p><p>  void init(void)</p><p><b>  {</b></p><p>  TMOD=0x01; /*使用定時器0模式一*/<

33、;/p><p>  TH0=0x3c; /*(65536-5000)/256*/</p><p>  TL0=0xb0; /*(65536-5000)%256*/</p><p>  IT0=1; //開中斷</p><p><b>  ET0=1;</b></p><p>

34、<b>  TR0=1;</b></p><p><b>  EA=1;</b></p><p><b>  EX0=1;</b></p><p><b>  EX1=1;</b></p><p>  P1=c[k]; //開啟交通燈</p

35、><p><b>  }</b></p><p>  //*************************中斷0處理程序***************************************</p><p>  void int0(void) interrupt 0 //通行時間設(shè)置</p><p><

36、b>  { </b></p><p><b>  EA=0;</b></p><p>  P1=0xd8;/*紅燈全亮*/</p><p><b>  for(;;)</b></p><p><b>  {</b></p><p&

37、gt;  settime();</p><p>  if(K1==0) /*P3^6=0設(shè)置主干道通行時間*/</p><p><b>  { </b></p><p>  delay(40);</p><p><b>  if(K1==0)</b></p><p&

38、gt;<b>  {</b></p><p>  while(!K1)</p><p><b>  { </b></p><p>  settime();</p><p><b>  }</b></p><p>  NBG++;/*主干道通行時間

39、加1*/</p><p>  if(NBG==100)</p><p><b>  NBG=0;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  if(K0==0) /*P3

40、^5=0設(shè)置支干道通行時間*/</p><p><b>  { </b></p><p>  delay(40);</p><p><b>  if(K0==0)</b></p><p><b>  {</b></p><p>  while(!K0)

41、</p><p><b>  {</b></p><p>  settime();</p><p><b>  }</b></p><p>  DXG++;/*支干道通行時間加1*/</p><p>  if(DXG==100)</p><p&

42、gt;<b>  DXG=0;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  if(K4==0) /*P3^7=0返回*/ </p><p><b>  { </b>&l

43、t;/p><p>  delay(40);</p><p><b>  if(K4==0)</b></p><p><b>  {</b></p><p>  while(!K4)</p><p><b>  {</b></p><p&

44、gt;<b>  }</b></p><p>  k=0;P1=c[k];</p><p>  NB=NBG,DX=NBG+H;</p><p>  display(); </p><p><b>  EA=1;</b></p><p><b>  break;&

45、lt;/b></p><p>  } </p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  /******************

46、*****************中斷1處理程序********************</p><p>  void int1(void) interrupt 2 //緊急情況</p><p>  { </p><p>  /*東西南北紅燈亮*/</p><p>  EA=0;</

47、p><p>  TR0=!TR0; /*停止計數(shù)*/</p><p>  for(;;) /*主支干道顯示全為0*/</p><p>  { P1=0xd8,P0=a[0];</p><p><b>  P2=0xfe;</b></p><p>  delay(

48、20);</p><p><b>  P2=0xfd;</b></p><p>  delay(20);</p><p><b>  P2=0xfb;</b></p><p>  delay(20);</p><p><b>  P2=0xf7;</b>

49、</p><p>  delay(20);</p><p>  if(K4==0) /*返回*/</p><p><b>  { </b></p><p>  delay(20);</p><p><b>  EA=1;</b></p><

50、p>  P1=c[k]; /*返回緊急前狀態(tài)開始計數(shù)*/</p><p>  TR0=!TR0;/*重啟計數(shù)*/</p><p>  break; </p><p><b>  }</b></p><p><b>  }</b></p>

51、<p><b>  }</b></p><p>  void time1(void) interrupt 1/*交通燈控制程序*/</p><p><b>  {</b></p><p>  TH0=0x3c;/*定時50ms*/</p><p>  TL0

52、=0xb0; </p><p><b>  cnt++;</b></p><p>  if(cnt>=20) /*每20*50ms=1s自減一*/</p><p><b>  {</b></p><p><b>  NB--;</b&

53、gt;</p><p><b>  DX--;</b></p><p><b>  cnt=0;</b></p><p>  if(NB==0||DX==0)</p><p><b>  {</b></p><p><b>  k++;<

54、/b></p><p>  if(k>3)/*k取0,1,2,3*/</p><p><b>  k=0;</b></p><p><b>  switch(k)</b></p><p><b>  {</b></p><p&

55、gt;  case 0:NB=NBG,DX=NBG+H;j=0;P1=c[k];break; /*主干道通行顯示綠紅*/</p><p>  case 1:NB=H;j=1;P1=c[k];break; /*主干道黃燈閃爍*/</p><p>  case 2:NB=DXG+H,DX=DXG;j=0;P1=c[k];break; /*支干道通行顯示紅綠*/</p

56、><p>  case 3:DX=H;j=2;P1=c[k];break; /*支干道黃燈閃爍*/</p><p><b>  }</b></p><p><b>  } </b></p><p><b>  }</b></p><p>&

57、lt;b>  }</b></p><p>  void delay(uchar t) //延時程序延時0.1*nms </p><p><b>  { </b></p><p><b>  uchar i; </b></p><p><b>  do <

58、/b></p><p><b>  { </b></p><p>  for(i=0;i<20;i++) </p><p><b>  ;;; </b></p><p>  } while(t--); </p><p><b>  } </b>

59、;</p><p>  void settime()</p><p><b>  {</b></p><p>  P2=0xfe,P0=a[(NBG+H)%10];/*顯示主干道通行時間 */</p><p>  delay(20); </p><p>  P2=0xfd,P0=a[(NBG+

60、H)/10];</p><p>  delay(20); </p><p>  P2=0xfb,P0=a[(DXG+H)%10];/*顯示支干道通行時間*/</p><p>  delay(20); </p><p>  P2=0xf7,P0=a[(DXG+H)/10];</p><p>  delay(20)

61、;</p><p><b>  }</b></p><p>  void key()//鍵盤程序用KO K1模擬一道有車一道無車</p><p><b>  {</b></p><p>  if(K1==0) /*主干道有車支干道無車*/</p><p&g

62、t;<b>  { </b></p><p>  delay(40);</p><p>  if(K1==0) </p><p><b>  { </b></p><p>  while(!K1)</p><p><b>  { </b><

63、;/p><p>  display();</p><p><b>  }</b></p><p>  k=0,P1=c[k];cnt=0;</p><p>  NB=NBG, DX=NBG+H;</p><p>  display();</p><p><b>  }

64、</b></p><p><b>  }</b></p><p>  if(K0==0) /*支干道有車主干道無車*/</p><p><b>  { </b></p><p>  delay(40);</p><p><b>  if

65、(K0==0)</b></p><p><b>  {</b></p><p>  while(!K0)</p><p><b>  {</b></p><p>  display(); </p><p><b>  }</b></p&

66、gt;<p>  k=2,P1=c[k];cnt=0;</p><p>  NB=DXG+H,DX=DXG;</p><p>  display(); </p><p><b>  }</b></p><p><b>  }</b></p><p><b&

67、gt;  }</b></p><p>  void display()//顯示程序</p><p><b>  {</b></p><p>  P2=0xfe,P0=a[NB%10]; /*由k的不同值進入確定顯示數(shù)值*/</p><p>  delay(20);</p>

68、<p>  P2=0xfd,P0=a[NB/10];</p><p>  delay(20);</p><p>  P2=0xfb,P0=a[DX%10];</p><p>  delay(20);</p><p>  P2=0xf7,P0=a[DX/10];</p><p>  delay(20);<

69、;/p><p><b>  }</b></p><p>  void main(void)</p><p><b>  {//主程序</b></p><p><b>  init();</b></p><p><b>  for(;;)<

70、/b></p><p><b>  {</b></p><p>  display();</p><p><b>  key();</b></p><p><b>  //黃燈閃爍程序</b></p><p>  while(j==1)

71、/*主干道黃燈閃爍*/</p><p>  {</p><p>  P1=0xdc;/*給黃燈一高電平黃燈滅*/ </p><p>  for(i=83;i>0;i--){display();}/*執(zhí)行for循環(huán)延時*/</p><p>  P1=c[k];

72、/*再給黃燈一低電平黃燈亮*/</p><p>  for(i=83;i>0;i--){display();}</p><p><b>  }</b></p><p>  while(j==2)</p><p>  { /*支干道黃燈閃爍*/</p><

73、;p><b>  P1=0xf8;</b></p><p>  for(i=83;i>0;i--){display();}</p><p><b>  P1=c[k];</b></p><p>  for(i=83;i>0;i--){display();}</p><p><

溫馨提示

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

評論

0/150

提交評論