2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩16頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  物理與信息工程學院</b></p><p><b>  單片機</b></p><p><b>  課</b></p><p><b>  程</b></p><p><b>  設(shè)</b></p&

2、gt;<p><b>  計</b></p><p>  題 目:基于51單片機的交通燈</p><p>  學 院:物理與信息工程學院</p><p>  專 業(yè):自動化</p><p><b>  目錄</b></p><p>  概述--

3、----------------------------------------------3</p><p>  系統(tǒng)各部分硬件的設(shè)計------------------------4</p><p>  總的硬件設(shè)計流程---------------------------4</p><p>  各硬件部分的電路設(shè)計---------------------5&

4、lt;/p><p>  軟件的分塊流程圖及程序編寫---------------7</p><p>  軟件仿真圖---------------------------------------15</p><p>  5、心得體會-----------------------------------------16</p><p><b&g

5、t;  1、概述</b></p><p>  背景:交通的發(fā)達,標志著城市的發(fā)達,相對交通的管理則顯得越來越重要。對于復雜的城市交通系統(tǒng),為了確保安全,保證正常的交通秩序,十字路口的信號控制必需按照一定的規(guī)律變化,以便于車輛行人能順利地通過十字路口。正常情況下,十字路口的紅綠燈應交替變換,考慮緊急情況下,如有救護車或警車到來時,應優(yōu)先讓其通過。 </p><p>  交通燈在安

6、全行車過程中起著十分重要的作用, 現(xiàn)在交通燈一般設(shè)在十字路口, 在醒目位置用紅、綠、黃三種顏色的指示燈, 加上一個倒計時的顯示計時器來控制行車, 對于一般情況下的安全行車、車輛分流發(fā)揮著作用, 但根據(jù)實際行車過程中出現(xiàn)的情況, 主要有如下幾個缺點: 1兩車道讓車輪流放行時間相同且固定, 在十字路口, 經(jīng)常一個車道為主干道,車輛較多, 放行時間應該長些; 另一車道為副干道, 車輛較少,放行時間短些。2 沒有考慮緊急車通過時, 兩車道應采取

7、的措施, 譬如, 有消防車通過執(zhí)行緊急任務時, 兩車道的車都應停止, 讓緊急車通過。根據(jù)行車過程中出現(xiàn)的實際情況, 如何全面有效地利用交通燈指示交通情況, 本人嘗試用單片機來控制交通燈, 在軟、硬件方面采取一些改進措施, 使交通燈在控制中靈活而有效。</p><p><b>  實現(xiàn)的任務:</b></p><p> ?、艈纹瑱C來實現(xiàn),根據(jù)設(shè)計要求,交通信號燈控制器的

8、外部輸出信號為主、副車道紅、黃、綠燈共12個驅(qū)動信號;編程使相應位復/置位來實現(xiàn)信號燈的亮/滅控制,使得十字路口的紅、綠燈交替點亮;在燈色交換時,黃燈閃爍提醒。</p><p> ?、圃O(shè)計要求有緊急車輛通過時,十字路口均顯示紅燈??梢酝ㄟ^軟件中斷來完成緊急任務,定義T0為計數(shù)中斷并為下降沿觸發(fā),編寫對應中斷向量子程序和中斷服務程序,完成中斷處理。</p><p> ?、窃O(shè)計還對定時控制有所

9、要求。對于精確定時,應該用計數(shù)器加以控制,硬件實現(xiàn)復雜度增加??紤]到該設(shè)計對時間精度要求不高,所以采用軟件定時可以大大簡化電路。先計算出程序單部執(zhí)行的時間,設(shè)置循環(huán)參數(shù),利用if語句按設(shè)計要求完成定時控制。</p><p>  (4)當南北方向車輛較多,東西方向車倆較少時,通過開關(guān)來改變各方向的燈來調(diào)節(jié)。 </p>&l

10、t;p>  系統(tǒng)硬件的設(shè)計與流程</p><p> ?、啪д窈蛷臀浑娐罚簡纹瑱C系統(tǒng)的必要組成部分,控制單片機的機器周期和功能復位通用的晶振電路</p><p>  單片機的晶振電路是一種典型電路,分為內(nèi)部時鐘方式和外部時鐘方式兩種。</p><p>  ⑵輸入控制:是指在一定要求下,采取何種形式的控制方式來實現(xiàn)單片機不同功能的轉(zhuǎn)換,以及控制指令以何種方式傳送到

11、單片機</p><p> ?、禽敵鲲@示:是指單片機將需要顯示的數(shù)據(jù)發(fā)送到LED、液晶等顯示模塊,并控制LED等顯示模塊按照一定的格式顯示的功能。</p><p> ?、韧鈬δ芷骷簡纹瑱C只是控制器件,對應與一定的設(shè)計要求,需要加入特定功能的器件。單片機的最簡單系統(tǒng)是指單片機能正常工作所必須的外圍元件,主要由單片機、晶振電路和復位電路構(gòu)成。而輸入/輸出部分則通過單片機的I/O口實現(xiàn)。<

12、;/p><p>  開關(guān)用來實現(xiàn)特殊的功能,當有救護車等出現(xiàn)時,按下開關(guān),所有燈變成紅燈,讓救護車通行。</p><p>  軟件的分塊流程與程序編寫</p><p><b>  編寫延時程序</b></p><p>  void delay0(uint z)</p><p><b>  

13、{</b></p><p><b>  uint i,j;</b></p><p>  for(i=0;i<z;i++)//z為1是1ms</p><p>  for(j=0;j<110;j++);</p><p><b>  }</b></p><

14、p>  /*********************************************************</p><p><b>  500ms延時函數(shù)</b></p><p>  晶振:11.0592MHz</p><p>  *********************************************

15、************/</p><p>  void delay(uchar y) </p><p><b>  {</b></p><p><b>  uchar k;</b></p><p><b>  uint i;</b></p><p> 

16、 for(;y>0;y--)</p><p><b>  {</b></p><p>  for(i=1250;i>0;i--) </p><p><b>  {</b></p><p>  for(k=180;k>0;k--);</p><p><b

17、>  }</b></p><p><b>  }</b></p><p><b>  } </b></p><p>  2、定時1ms的程序代碼</p><p>  當單片機的晶振為12MHz時,計數(shù)值1代表的時間就是1us。</p><p>  計數(shù)器的容

18、量是16位,也就是最大的計數(shù)值達到65536,因此計數(shù)計到65536就會產(chǎn)生溢出。</p><p>  Void t0(void)interrupt 1 using 0</p><p><b>  {</b></p><p>  TH0=(65536-1000)/256; //設(shè)置定時器高8位初值</p><p> 

19、 TL0=(65536-1000)%256; //設(shè)置定時器低8位初值</p><p><b>  外部中斷</b></p><p>  void xint0() interrupt 0 //外部中斷INT0</p><p>  { GREEN_ZHU_ON();</p><p><b>  }&

20、lt;/b></p><p>  void xint1() interrupt 2 //外部中斷INT1</p><p>  { GREEN_ZHI_ON(); </p><p><b>  }</b></p><p>  void GREEN_ZHU_ON()//外部中斷INT0顯示子程序</p&g

21、t;<p><b>  {P1=0xdb;</b></p><p><b>  P3_0=0;</b></p><p><b>  P3_1=1;</b></p><p><b>  P3_4=1;</b></p><p><b>

22、  P3_7=0;</b></p><p>  delay0(10000);</p><p><b>  }</b></p><p>  void GREEN_ZHI_ON()//外部中斷INT1顯示子程序</p><p><b>  { P1_2=0;</b></p>

23、<p><b>  P3_0=0;</b></p><p><b>  P1_5=1;</b></p><p><b>  P3_7=1;</b></p><p><b>  P1_0=1;</b></p><p><b>  P1_6

24、=1;</b></p><p><b>  P1_3=0;</b></p><p><b>  P3_1=0;</b></p><p><b>  P1_1=1;</b></p><p><b>  P1_4=1;</b></p>

25、<p><b>  P3_4=1;</b></p><p><b>  P0=0xff;</b></p><p><b>  P2=0X00;</b></p><p>  delay0(1000);</p><p><b>  return;</b&

26、gt;</p><p><b>  }</b></p><p><b>  四、總的程序</b></p><p>  #include<reg51.h></p><p>  #include<intrins.h>//做移位的一個頭文件頭文件</p><p&

27、gt;  #define uchar unsigned char//宏定義</p><p>  #define uint unsigned int//宏定義</p><p>  sbit P1_0=P1^0;</p><p>  sbit P1_1=P1^1;</p><p>  sbit P1_2=P1^2;</p>

28、<p>  sbit P1_3=P1^3;</p><p>  sbit P1_4=P1^4;</p><p>  sbit P1_5=P1^5;</p><p>  sbit P1_6=P1^6;</p><p>  sbit P1_7=P1^7;</p><p>  sbit P3_0=P3^0;&l

29、t;/p><p>  sbit P3_1=P3^1;</p><p>  sbit P3_4=P3^4;</p><p>  sbit P3_7=P3^7;</p><p>  uint aa,a,b,c=10; </p><p>  /*數(shù)碼管顯示0-9*/</p><p>  uint code

30、 table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};</p><p><b>  /*子函數(shù)聲明*/</b></p><p>  void delay0(uint z);</p><p>  void display(uint a,uint b);</p>

31、<p>  void flag1();</p><p>  void flag2();</p><p>  void flag3();</p><p>  void flag4();</p><p>  void xint0();</p><p>  void xint1();</p>

32、<p>  void xtimer0();</p><p>  void GREEN_ZHU_ON();</p><p>  void GREEN_ZHI_ON();</p><p>  /*********************************************************/</p><p>

33、  void main()</p><p><b>  {</b></p><p>  EA=1;//開中斷</p><p>  EX0=1;//允許外部中斷INT0中斷</p><p>  IT0=0;//定義INT0觸發(fā)方式</p><p>  PX0=1;//中斷優(yōu)先級高</p&g

34、t;<p>  EX1=1;//允許外部中斷INT1中斷</p><p>  IT1=0;//定義INT1觸發(fā)方式</p><p>  PX1=1;//中斷優(yōu)先級高</p><p><b>  while(1)</b></p><p>  {flag1(); //東西方向綠燈亮,南北方向紅燈亮</p

35、><p>  flag2(); //東西方向黃燈亮,南北方向紅燈亮</p><p>  flag3(); //東西方向紅燈亮,南北方向綠燈亮</p><p>  flag4(); //東西方向紅燈閃爍,南北方向黃燈亮</p><p><b>  }</b></p><p><b>  }&l

36、t;/b></p><p>  void flag1()//東西方向綠燈亮,南北方向紅燈亮30s </p><p><b>  {</b></p><p><b>  int time;</b></p><p>  time=11;//變量賦初值</p><p>  

37、TMOD=0x01;//定時器T0工作于方式1</p><p>  TH0=(65536-50000)/256;</p><p>  TL0=(65536-50000)%256;//定時50ms</p><p>  EA=1;//開中斷</p><p>  ET0=1;//開定時中斷</p><p>  TR0=1;/

38、/開定時器T0</p><p><b>  while(1)</b></p><p>  { P1=0x9e; //東西方向綠燈亮,南北方向紅燈亮30ms</p><p><b>  P3_0=1;</b></p><p><b>  P3_1=1;&

39、lt;/b></p><p><b>  P3_4=1;</b></p><p><b>  P3_7=0;</b></p><p>  if(aa==20)//定時20*50MS=1S</p><p><b>  {</b></p><p>  

40、aa=0;//定時完成一次后清0</p><p>  time--;//變量自減</p><p>  if(time==5)</p><p><b>  {</b></p><p>  break; //跳出整個循環(huán)</p><p><b>  }</b></p&g

41、t;<p>  b=time%100/10;//顯示十位</p><p>  a=time%10;//顯示個位 </p><p><b>  }</b></p><p>  display(a,b);</p><p><b>  }</b></p><p>

42、<b>  }</b></p><p>  void flag2()</p><p>  { int time;</p><p>  time=6;//變量賦初值</p><p>  TMOD=0x01;//定時器T0工作于方式1</p><p>  TH0=(65536-50000)/256;

43、</p><p>  TL0=(65536-50000)%256;//定時50ms</p><p>  EA=1;//開中斷</p><p>  ET0=1;//開定時中斷</p><p>  TR0=1;//開定時器T0</p><p>  while(1) //東西方向黃燈閃爍,南北方向紅燈閃爍</p

44、><p><b>  {</b></p><p><b>  P1_0=1;</b></p><p><b>  P1_1=0;</b></p><p><b>  P1_2=1;</b></p><p><b>  P1_3

45、=1;</b></p><p><b>  P1_4=1;</b></p><p><b>  P1_6=1;</b></p><p><b>  P1_7=0;</b></p><p><b>  P3_0=1;</b></p>

46、<p><b>  P3_1=1;</b></p><p><b>  P3_4=1;</b></p><p>  if(aa==20)//定時20*50MS=1S</p><p><b>  {</b></p><p>  aa=0;//定時完成一次后清0<

47、/p><p>  time--;//變量自減</p><p>  P1_1=~P1_1;</p><p>  P1_7=~P1_7;</p><p>  if(time<0)</p><p><b>  {</b></p><p><b>  break;<

48、;/b></p><p><b>  }</b></p><p>  b=time%100/10;//顯示十位</p><p>  a=time%10;//顯示個位 </p><p><b>  }</b></p><p>  display(a,b);</p

49、><p><b>  }</b></p><p><b>  }</b></p><p>  void flag3() //東西方向紅燈亮,南北方向綠燈亮 20ms</p><p>  {int time;</p><p>  time=21;//變量賦初值</p&

50、gt;<p>  TMOD=0x01;//定時器T0工作于方式1</p><p>  TH0=(65536-50000)/256;</p><p>  TL0=(65536-50000)%256;//定時50ms</p><p>  EA=1;//開中斷</p><p>  ET0=1;//開定時中斷</p>&l

51、t;p>  TR0=1;//開定時器T0</p><p><b>  while(1)</b></p><p><b>  {</b></p><p><b>  P1=0xf3;</b></p><p><b>  P3_0=0;</b><

52、/p><p><b>  P3_1=0;</b></p><p><b>  P3_4=1;</b></p><p><b>  P3_7=1;</b></p><p>  if(aa==20)//定時20*50MS=1S</p><p><b>

53、  {</b></p><p>  aa=0;//定時完成一次后清0</p><p>  time--;//變量自減</p><p>  if(time==6)</p><p><b>  {</b></p><p><b>  break;</b></p&

54、gt;<p><b>  }</b></p><p>  b=time%100/10;//顯示十位</p><p>  a=time%10;//顯示個位 </p><p><b>  }</b></p><p>  display(a,b);</p><p>

55、;<b>  }</b></p><p><b>  }</b></p><p>  void flag4()//東西方向紅燈閃爍,南北方向黃燈亮</p><p>  {int time;</p><p>  time=6;//變量賦初值</p><p>  TMOD

56、=0x01;//定時器T0工作于方式1</p><p>  TH0=(65536-50000)/256;</p><p>  TL0=(65536-50000)%256;//定時50ms</p><p>  EA=1;//開中斷</p><p>  ET0=1;//開定時中斷</p><p>  TR0=1;//開定時

57、器T0</p><p><b>  while(1)</b></p><p><b>  {</b></p><p><b>  P1_0=1;</b></p><p><b>  P1_1=1;</b></p><p><b

58、>  P1_3=1;</b></p><p><b>  P1_4=0;</b></p><p><b>  P1_5=1;</b></p><p><b>  P1_6=1;</b></p><p><b>  P1_7=1;</b>&

59、lt;/p><p><b>  P3_1=1;</b></p><p><b>  P3_4=0;</b></p><p><b>  P3_7=1;</b></p><p>  if(aa==20)//定時20*50MS=1S</p><p><b&

60、gt;  {</b></p><p>  aa=0;//定時完成一次后清0</p><p>  time--;//變量自減</p><p>  P1_4=~P1_4;</p><p>  P3_4=~P3_4;</p><p>  if(time<0)</p><p><

61、b>  {</b></p><p><b>  break;</b></p><p><b>  }</b></p><p>  b=time%100/10;//顯示十位</p><p>  a=time%10;//顯示個位 </p><p><b

62、>  }</b></p><p>  display(a,b);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  /*顯示子函數(shù)*/</b></p><p>  void d

63、isplay(uint a,uint b)</p><p><b>  {</b></p><p><b>  P0=0xfe;</b></p><p>  P2=table[b];//顯示十位</p><p>  delay0(5);</p><p>  P2=0xff;/

64、/消隱</p><p><b>  P0=0xfd;</b></p><p>  P2=table[a];//顯示個位</p><p>  delay0(5);</p><p>  P2=0xff;//消隱</p><p><b>  }</b></p><

65、;p>  void xint0() interrupt 0 //外部中斷INT0</p><p>  { GREEN_ZHU_ON();</p><p><b>  }</b></p><p>  void xint1() interrupt 2 //外部中斷INT1</p><p>  { GRE

66、EN_ZHI_ON();</p><p><b>  }</b></p><p>  void GREEN_ZHU_ON()//外部中斷INT0顯示子程序</p><p><b>  {P1=0xdb;</b></p><p><b>  P3_0=0;</b></p&

67、gt;<p><b>  P3_1=1;</b></p><p><b>  P3_4=1;</b></p><p><b>  P3_7=0;</b></p><p>  delay0(10000);</p><p><b>  }</b>

68、</p><p>  void GREEN_ZHI_ON()//外部中斷INT1顯示子程序</p><p><b>  { P1_2=0;</b></p><p><b>  P3_0=0;</b></p><p><b>  P1_5=1;</b></p>&

69、lt;p><b>  P3_7=1;</b></p><p><b>  P1_0=1;</b></p><p><b>  P1_6=1;</b></p><p><b>  P1_3=0;</b></p><p><b>  P3_1=

70、0;</b></p><p><b>  P1_1=1;</b></p><p><b>  P1_4=1;</b></p><p><b>  P3_4=1;</b></p><p><b>  P0=0xff;</b></p>

71、<p><b>  P2=0X00;</b></p><p>  delay0(1000);</p><p><b>  return;</b></p><p><b>  }</b></p><p>  /*定時中斷子函數(shù)*/</p><p&g

72、t;  void xtimer0() interrupt 1</p><p><b>  {</b></p><p>  TH0=(65536-50000)/256;</p><p>  TL0=(65536-50000)%256;//定時50ms</p><p><b>  aa++;</b>

73、</p><p><b>  }</b></p><p><b>  /*延時子函數(shù)*/</b></p><p>  void delay0(uint z)</p><p><b>  {</b></p><p><b>  uint i,j

74、;</b></p><p>  for(i=0;i<z;i++)//z為1是1ms</p><p>  for(j=0;j<110;j++);</p><p><b>  }</b></p><p>  /*******************************************

75、**************</p><p><b>  500ms延時函數(shù)</b></p><p>  晶振:11.0592MHz</p><p>  *********************************************************/</p><p>  void delay(ucha

76、r y) </p><p><b>  {</b></p><p><b>  uchar k;</b></p><p><b>  uint i;</b></p><p>  for(;y>0;y--)</p><p><b>  {&

77、lt;/b></p><p>  for(i=1250;i>0;i--) </p><p><b>  {</b></p><p>  for(k=180;k>0;k--);</p><p><b>  }</b></p><p><b>  }&

78、lt;/b></p><p><b>  } </b></p><p><b>  軟件仿真圖</b></p><p><b>  5心得體會</b></p><p>  通過做這次課程設(shè)計報告,我自己收獲了很多知識,也有很多的感受和體會。</p><

79、p>  首先,我感觸最深的是,理論的學習必須與實際的動手操作相結(jié)合。在剛剛學習單片機時,我們對于知識的學習主要來自于書本以及老師的講解,平時的上機實驗也主要是以熟悉軟件為目的,學習怎么應用軟件。我們自己很少動手設(shè)計程序及用仿真進行驗證。</p><p>  在做實驗設(shè)計的過程中,我了解到只會書本的知識對于我們自行設(shè)計并沒有很大的用處,并且學習是不容許有參假的成分,如果你讀不懂程序,不會應用軟件,那么你很難完

80、成自己的設(shè)計報告。</p><p>  其次,通過這次的報告的設(shè)計,增強了我自主學習的能力,以前的學習主要來自于課本,我很少會通過其他途徑進行學習。由于在完成這次的報告的過程中,我們會遇到很多我們以前沒有見過的問題,那么,通過上網(wǎng)查找答案及向?qū)W長詢問,往往能幫助我們學到更多的知識。</p><p>  第三點也是我覺得自己存在的很嚴重的一點的毛病就是,在學習,我自己不是一個特別愿意與人交流

81、的人。在做這次的報告時,我自己能感覺到自己的缺點所帶來的弊端,有時自己長久發(fā)現(xiàn)不了的問題,經(jīng)別人一點撥就很輕松的解決,所以,學習不能閉門造車,要學會與別人多交流。</p><p>  然后我覺得這次的做報告的經(jīng)歷有苦有樂,對于我做的這個題目,對有的同學來說很簡單,但是對我來說卻有一定的難度,在設(shè)計報告之前,很多別人寫的程序,我都看得不大懂,然后對使用protues也不是很熟練,所以做起來比較痛苦,也是一個模塊要做

溫馨提示

  • 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

提交評論