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

下載本文檔

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

文檔簡介

1、<p><b>  課程設(shè)計報告</b></p><p>  設(shè)計名稱: 超聲波測距 </p><p>  班 級: </p><p>  學(xué) 號: </p><p>  姓 名:

2、 </p><p>  指導(dǎo)教師: </p><p>  基于單片機的超聲波測距設(shè)計</p><p><b>  1設(shè)計目的</b></p><p>  我所設(shè)計的基于ATMEL公司AT89C52單片機的超聲波測距,是利用該51單片機和HC-SR04超聲波模塊來測量距離。&

3、lt;/p><p>  超聲波是只頻率高于20kHz以上的聲波,它屬于機械波。遵循一般機械波在彈性介質(zhì)種的傳播規(guī)律,如在介質(zhì)的分界面處發(fā)生反射和折射的現(xiàn)象,在進入介質(zhì)后被介質(zhì)吸收而發(fā)生衰減等。正是因為這些性質(zhì),使得超聲波可以被用于距離的測量中。超聲測距是一種非接觸檢測技術(shù),不受光線,被測對象的顏色等的影響,抗干擾能力強。利用超聲波檢測往往比較迅速、方便、計算簡單、易于實現(xiàn)實時控制,并且在測量精度方面能達(dá)到工業(yè)實用的指

4、標(biāo)要求,因而超聲波測距被廣泛的應(yīng)用于生活中的各個方面,甚至于很多機器人能及時避開障礙物也是用的超聲波測距。因此研究超聲波測距是非常有意義的?;谑忻嫔蠁纹瑱C成本低、精度高、易于控制、操作簡單,故本設(shè)計采用AT89C52單片機和HC-SR04超聲波模塊來測量距離。</p><p><b>  2 設(shè)計方案</b></p><p>  本設(shè)計采用以AT89C52單片機為核

5、心的低成本、高精度、微型化數(shù)字顯示超聲波測距儀的硬件電路和軟件設(shè)計方法。整個電路采用模塊化設(shè)計,由主程序、預(yù)置子程序、發(fā)射子程序、接收子程序、顯示子程序等模塊組成。各探頭的信號經(jīng)單片機綜合分析處理,實現(xiàn)超聲波測距儀的各種功能。在此基礎(chǔ)上設(shè)計了系統(tǒng)的總體方案,最后通過硬件和軟件實現(xiàn)了各個功能模塊。</p><p><b>  基本工作原理: </b></p><p> 

6、 (1)采用IO口TRIG觸發(fā)測距,給最少10us的高電平信呈。 </p><p>  (2)模塊自動發(fā)送8個40khz的方波,自動檢測是否有信號返回; </p><p>  (3)有信號返回,通過IO口ECHO輸出一個高電平,高電平持續(xù)的時間就是超聲</p><p>  波從發(fā)射到返回的時間。測試距離=(高電平時間*聲速(340M/S))/2; </p>

7、;<p><b>  硬件設(shè)計:</b></p><p>  超聲波測距按模塊可化分為:</p><p>  ·1 單片機主控芯片</p><p>  ·2 超聲波發(fā)射部分(包括功率驅(qū)動電路、超聲波發(fā)生器)</p><p>  ·3 超聲波接收部分(包括超聲波接受器、放大電路、

8、鎖相環(huán)電路)</p><p>  ·4 顯示部分 (顯示電路 LCD1602)</p><p>  * 5 超聲波是一種聲波,屬于機械波,其速度和使用環(huán)境的溫度及空氣的濕度、是否有塵埃物質(zhì)都有較大的響,所以若要測量得更加精確,則必須要相關(guān)的傳感器來檢測使用的環(huán)境。此處只列出溫度的影響情況。</p><p><b>  2)軟件設(shè)計<

9、;/b></p><p><b>  ·1主程序設(shè)計:</b></p><p>  主程序?qū)φ麄€單片機系統(tǒng)進行初始化后,先將超聲波的回波接受標(biāo)志位置位并且使單片機P2.1端口輸出一個低電平用來啟動超聲波發(fā)射電路,,同時將定時器T0啟動,然后調(diào)用距離計算的子程序,再根據(jù)定時器T0記錄的時間計算出所需要測量的距離,然后再調(diào)用顯示子程序,再將測出的距離以十進

10、制的形式送至LCD1206液晶顯示屏顯示。最后主程序通過對回?fù)苄盘柕慕邮?,完成后續(xù)的工作,假如標(biāo)志位清 0則說明接受到了回波信號,那么主程序就返回到初始端重新將回?fù)芙邮諛?biāo)志置位并且在單片機的P2.0端口上發(fā)送低電平到超聲波的發(fā)射電路,就這樣連續(xù)不斷的來運行,循環(huán)不斷的工作用來實現(xiàn)測距。</p><p><b>  ·2顯示程序</b></p><p>  初

11、始化-->寫命令-->寫數(shù)據(jù)</p><p>  *將各類函數(shù)聲明都寫到同一個頭文件中,方便查看各個函數(shù)的參數(shù)以及功能。</p><p><b>  硬件電路</b></p><p><b>  HC-SR04</b></p><p>  超聲波測距模塊說明書 </p>&

12、lt;p><b>  產(chǎn)品特點: </b></p><p>  HC-SR04超聲波測距模塊可提供2cm-400cm的非接觸式距離感測功能,測距精度可達(dá)高到3mm;模塊包括超聲波發(fā)射器、接收器與控制電路。 </p><p>  注:1、此模塊不宜帶電連接,若要帶電連接,則先讓模塊的GND端先連接,否則會影響 </p><p><b&

13、gt;  模塊的正常工作。</b></p><p>  單片機主控芯片原理圖:</p><p>  LCD1602液晶屏顯示電路圖:</p><p>  HC-SR04模塊硬件電路:</p><p><b>  軟件程序</b></p><p>  ·1主程序(main.c)

14、</p><p>  #include<reg51.h></p><p>  #include<intrins.h></p><p>  #include"lcd.h"</p><p>  sbit Trig = P2^1;</p><p>  sbit Echo = P2

15、^0;</p><p>  unsigned char Us[]="Ultrasonic Range";</p><p>  unsigned char code ASCII[15] = {'0','1','2','3','4','5','6','

16、;7','8','9','.','-','M'};</p><p>  static unsigned char DisNum = 0; //顯示用指針 </p><p>  unsigned int time=0;</p><p>  unsigned long S

17、=0;</p><p>  bit flag =0;</p><p>  unsigned char disbuff[4] ={ 0,0,0,0,};</p><p>  /*******************************************************************************</p>

18、<p>  * 函 數(shù) 名 : main</p><p>  * 函數(shù)功能 : 主函數(shù)</p><p>  * 輸 入 : 無</p><p>  * 輸 出 : 無</p><p>  *************************************

19、******************************************/</p><p>  void Conut(void)</p><p><b>  {</b></p><p>  time=TH0*256+TL0;</p><p><b>  TH0=0;</b></p&

20、gt;<p><b>  TL0=0;</b></p><p>  S=(time*1.7)/100; //算出來是CM</p><p>  if((S>=700)||flag==1) //超出測量范圍顯示“-”</p><p><b>  { </b></p><p>

21、;<b>  flag=0;</b></p><p>  DisplayOneChar(0, 1, ASCII[11]);</p><p>  DisplayOneChar(1, 1, ASCII[10]);//顯示點</p><p>  DisplayOneChar(2, 1, ASCII[11]);</p><p>

22、;  DisplayOneChar(3, 1, ASCII[11]);</p><p>  DisplayOneChar(4, 1, ASCII[12]);//顯示M</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {&l

23、t;/b></p><p>  disbuff[0]=S%1000/100;</p><p>  disbuff[1]=S%1000%100/10;</p><p>  disbuff[2]=S%1000%10 %10;</p><p>  DisplayOneChar(0, 1, ASCII[disbuff[0]]);</p&g

24、t;<p>  DisplayOneChar(1, 1, ASCII[10]);//顯示點</p><p>  DisplayOneChar(2, 1, ASCII[disbuff[1]]);</p><p>  DisplayOneChar(3, 1, ASCII[disbuff[2]]);</p><p>  DisplayOneChar(4,

25、1, ASCII[12]);//顯示M</p><p><b>  }</b></p><p><b>  }</b></p><p>  void zd0() interrupt 1 //T0中斷用來計數(shù)器溢出,超過測距范圍</p><p><b>  {</b>&l

26、t;/p><p>  flag=1; //中斷溢出標(biāo)志</p><p><b>  }</b></p><p>  void StartModule() //啟動模塊</p><p><b>  {</b></p><p>  Trig=1;

27、 //啟動一次模塊</p><p><b>  _nop_(); </b></p><p><b>  _nop_(); </b></p><p><b>  _nop_(); </b></p><p><b>  _no

28、p_(); </b></p><p><b>  _nop_(); </b></p><p><b>  _nop_(); </b></p><p><b>  _nop_(); </b></p><p><b>  _nop_(); </b>

29、</p><p><b>  _nop_(); </b></p><p><b>  _nop_(); </b></p><p><b>  _nop_(); </b></p><p><b>  _nop_(); </b></p><

30、p><b>  _nop_(); </b></p><p><b>  _nop_(); </b></p><p><b>  _nop_(); </b></p><p><b>  _nop_(); </b></p><p><b>  

31、_nop_();</b></p><p><b>  _nop_(); </b></p><p><b>  _nop_(); </b></p><p><b>  _nop_(); </b></p><p><b>  _nop_();</b>

32、;</p><p><b>  Trig=0;</b></p><p><b>  }</b></p><p>  void delayms(unsigned int ms)</p><p><b>  {</b></p><p>  unsigned

33、char i;</p><p>  for(ms;ms>0;ms--)</p><p><b>  {</b></p><p>  for(i=110;i>0;i--);</p><p><b>  }</b></p><p><b>  }</b

34、></p><p>  void main(void)</p><p><b>  {</b></p><p>  TMOD=0x01; //設(shè)T0為方式1,GATE=1;</p><p><b>  TH0=0;</b></p><p>  TL0=0;

35、 </p><p>  ET0=1; //允許T0中斷</p><p>  EA=1; //開啟總中斷</p><p>  InitLcd1602();</p><p>  LcdShowStr(0,0,Us);</p><p><b>  while(1)&l

36、t;/b></p><p><b>  {</b></p><p>  StartModule();</p><p>  while(!Echo);//當(dāng)RX為零時等待</p><p>  TR0=1; //開啟計數(shù)</p><p>  while(Echo);//當(dāng)R

37、X為1計數(shù)并等待</p><p>  TR0=0;//關(guān)閉計數(shù)</p><p>  Conut();//計算</p><p>  delayms(80);</p><p><b>  }</b></p><p><b>  }</b></p>&l

38、t;p>  ·2LCD1602液晶顯示函數(shù)聲明(LCD.h)</p><p>  #ifndef __LCD_H_</p><p>  #define __LCD_H_</p><p>  /**********************************</p><p>  當(dāng)使用的是4位數(shù)據(jù)傳輸?shù)臅r候定義,</p

39、><p>  使用8位取消這個定義</p><p>  **********************************/</p><p>  #define LCD1602_4PINS</p><p>  /**********************************</p><p><b>  包

40、含頭文件</b></p><p>  **********************************/</p><p>  #include<reg51.h></p><p>  //---重定義關(guān)鍵詞---//</p><p>  #ifndef uchar</p><p>  #def

41、ine uchar unsigned char</p><p><b>  #endif</b></p><p>  #ifndef uint </p><p>  #define uint unsigned int</p><p><b>  #endif</b></p><p

42、>  /**********************************</p><p><b>  PIN口定義</b></p><p>  **********************************/</p><p>  #define LCD1602_DB P0 //data bus 數(shù)據(jù)總線</p&

43、gt;<p>  sbit LCD1602_RS = P3^5;</p><p>  sbit LCD1602_RW = P3^6;</p><p>  sbit LCD1602_EN = P3^4; </p><p>  /**********************************</p><p><b>

44、;  函數(shù)聲明</b></p><p>  **********************************/</p><p>  /*在51單片機12MHZ時鐘下的延時函數(shù)*/</p><p>  void Lcd1602_Delay1ms(uint c); //誤差 0us</p><p>  void Read_Bu

45、sy(); //忙檢測函數(shù),判斷bit7是0,允許執(zhí)行;1禁止</p><p>  void Lcd1602_Write_Cmd(unsigned char cmd); //寫命令</p><p>  void Lcd1602_Write_Data(unsigned char dat); //寫數(shù)據(jù)</p><p>  void Lc

46、dSetCursor(unsigned char x,unsigned char y); //坐標(biāo)顯示</p><p>  void LcdShowStr(unsigned char x,unsigned char y,unsigned char *str); //顯示字符串</p><p>  void InitLcd1602(); //1602初始化

47、</p><p>  void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData);</p><p><b>  #endif</b></p><p>  ·3LCD1602液晶顯示函數(shù)及初始化(LCD.c)</p><p>

48、;  #include"lcd.h"</p><p>  void Read_Busy() //忙檢測函數(shù),判斷bit7是0,允許執(zhí)行;1禁止</p><p><b>  {</b></p><p>  unsigned char sta; //</p><p>  LC

49、D1602_DB = 0xff;</p><p>  LCD1602_RS = 0;</p><p>  LCD1602_RW = 1;</p><p><b>  do</b></p><p><b>  {</b></p><p>  LCD1602_EN = 1;<

50、;/p><p>  sta = LCD1602_DB;</p><p>  LCD1602_EN = 0; //使能,用完就拉低,釋放總線</p><p>  }while(sta & 0x80);</p><p><b>  }</b></p><p>  void Lcd1602_W

51、rite_Cmd(unsigned char cmd) //寫命令</p><p><b>  {</b></p><p>  Read_Busy();</p><p>  LCD1602_RS = 0;</p><p>  LCD1602_RW = 0;</p><p>  LCD160

52、2_DB = cmd;</p><p>  LCD1602_EN = 1;</p><p>  LCD1602_EN = 0; </p><p><b>  }</b></p><p>  void Lcd1602_Write_Data(unsigned char dat) //寫數(shù)據(jù)</p>&

53、lt;p><b>  {</b></p><p>  Read_Busy();</p><p>  LCD1602_RS = 1;</p><p>  LCD1602_RW = 0;</p><p>  LCD1602_DB = dat;</p><p>  LCD1602_EN = 1;&

54、lt;/p><p>  LCD1602_EN = 0;</p><p><b>  }</b></p><p>  void LcdSetCursor(unsigned char x,unsigned char y) //坐標(biāo)顯示</p><p><b>  {</b></p><

55、p>  unsigned char addr;</p><p>  if(y == 0)</p><p>  addr = 0x00 + x;</p><p><b>  else</b></p><p>  addr = 0x40 + x;</p><p>  Lcd1602_Write_

56、Cmd(addr|0x80);</p><p><b>  }</b></p><p>  //按指定位置顯示一個字符</p><p>  void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)</p><p><b>

57、;  {</b></p><p><b>  Y &= 0x1;</b></p><p>  X &= 0xF; //限制X不能大于15,Y不能大于1</p><p>  if (Y) X |= 0x40; //當(dāng)要顯示第二行時地址碼+0x40;</p><p>  X |= 0x80; //

58、算出指令碼</p><p>  Lcd1602_Write_Cmd(X); //發(fā)命令字</p><p>  Lcd1602_Write_Data(DData); //發(fā)數(shù)據(jù)</p><p><b>  }</b></p><p>  void LcdShowStr(unsigned char x,unsigned ch

59、ar y,unsigned char *str) //顯示字符串</p><p><b>  {</b></p><p>  LcdSetCursor(x,y); //當(dāng)前字符的坐標(biāo)</p><p>  while(*str != '\0')</p><p><b>  {&l

60、t;/b></p><p>  Lcd1602_Write_Data(*str++);</p><p><b>  }</b></p><p><b>  }</b></p><p>  void InitLcd1602() //1602初始化</p>

61、<p><b>  {</b></p><p>  Lcd1602_Write_Cmd(0x38); //設(shè)置16*2顯示,5*7點陣,8位數(shù)據(jù)接口</p><p>  Lcd1602_Write_Cmd(0x0c);//設(shè)置開顯示,不顯示光標(biāo)</p><p>  Lcd1602_Write_Cmd(0x06);//寫一個字

62、符后地址指針加1</p><p>  Lcd1602_Write_Cmd(0x01); //清屏,顯示清0,數(shù)據(jù)指針清0 </p><p><b>  }</b></p><p><b>  5 調(diào)試結(jié)果及說明</b></p><p>  最終調(diào)試出了正確的結(jié)果,理論上HC-SR04能測精

63、確測量的量程是四米,然而實際精確測量的范圍只有2.5米。這與實驗使用的單片機型號有很重要的關(guān)系。所用的AT89C52單片機內(nèi)部本來就焊接了很多電路,在本次超聲波測距課設(shè)中都不會用到,其中的一部分電路還會影響其正常工作的性能。另外AT89C52單片機的晶振為11.0592MHz,T0中斷計數(shù)也有些微小的誤差。不僅如此,超聲波的聲速還受到溫度、空氣濕度、空氣中固體顆粒塵埃物的含量有關(guān),甚至還與不同障礙物表面材料的不同介質(zhì)有關(guān)。使用的超聲波接

64、受器和發(fā)射器是分開的,中間存在夾角,而在本次課程設(shè)計中并未考慮此因素,若想更精確一般回再乘以超聲波感應(yīng)夾角一半的余弦值。除此之外,還有我們很少考慮到的余弦波的影響……。</p><p>  *超生波測距被廣泛地應(yīng)用于生活中,本次設(shè)計也還可以做一些拓展,例如再加上蜂鳴器,當(dāng)距離小于1米是蜂鳴器開始響,此項常用于車尾,倒車是后方距離太小就會發(fā)出警報。</p><p><b>  參考

65、文獻:</b></p><p>  胡漢才.單片機原理及其接口技術(shù).清華大學(xué)出版社,2004   </p><p>  王安敏,張凱.基于AT89C52 單片機的超聲波測距系統(tǒng),儀表技術(shù)與傳感器</p><p>  楊居義.單片機課程設(shè)計指導(dǎo),清華大學(xué)出版社</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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論