版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機課程設(shè)計--超聲波測距
- 單片機課程設(shè)計-超聲波測距
- 單片機課程設(shè)計--超聲波測距系統(tǒng)設(shè)計
- 單片機課程設(shè)計--超聲波測距儀
- 基于單片機的超聲波測距課程設(shè)計
- 單片機超聲波測距儀設(shè)計課程設(shè)計
- 基于單片機的超聲波測距課程設(shè)計報告
- 單片機課程設(shè)計---基于單片機的超聲波測距儀
- 單片機課程設(shè)計--超聲波測距儀的設(shè)計
- 單片機課程設(shè)計超聲波測距儀的設(shè)計
- 基于52單片機的超聲波測距系統(tǒng)-課程設(shè)計
- 基于單片機的超聲波測距器課程設(shè)計
- 基于單片機的超聲波測距儀課程設(shè)計
- 51單片機超聲波測距大學(xué)設(shè)計
- 課程設(shè)計--- 基于51單片機的超聲波測距儀設(shè)計
- 單片機超聲波測距畢業(yè)設(shè)計
- 基于單片機的超聲波測距設(shè)計
- 單片機原理與接口技術(shù)課程設(shè)計-單片機與超聲波測距
- 基于單片機的超聲波測距系統(tǒng)設(shè)計
- 單片機課程設(shè)計——超聲波避障小車
評論
0/150
提交評論