找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 3388|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

超聲測(cè)距單片機(jī)課程設(shè)計(jì)報(bào)告書

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:290947 發(fā)表于 2018-3-12 19:54 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
單片機(jī)課程設(shè)計(jì)報(bào)告書



課題名稱:
超聲波測(cè)距設(shè)計(jì)
姓    名:
張周靜
學(xué)    號(hào):
2014022063
學(xué)    院:
電子與信息工程學(xué)院
專    業(yè):
電子信息工程
指導(dǎo)教師:
米曉超(尚觀科技)

張興輝(講  師)
時(shí)    間:
2018年12月



課程設(shè)計(jì)項(xiàng)目成績(jī)?cè)u(píng)定表
一、設(shè)計(jì)任務(wù)及要求:
1設(shè)計(jì)任務(wù):
設(shè)計(jì)一個(gè)倒車距離顯示及報(bào)警提醒系統(tǒng)。


2、要   求:
1> 用超聲波測(cè)距傳感器實(shí)現(xiàn)采集距離并在 LCD 屏上顯示。

2> 當(dāng)小于閾值距離時(shí)報(bào)警,大于閾值距離時(shí)消警。




指導(dǎo)教師簽名:

年   月    日  

二、指導(dǎo)教師評(píng)語(yǔ):

項(xiàng)目成績(jī):


指導(dǎo)教師簽名:

年   月    日


課程設(shè)計(jì)報(bào)告書目錄
設(shè)計(jì)報(bào)告書目錄

一、設(shè)計(jì)目的
二、設(shè)計(jì)思路
三、設(shè)計(jì)過(guò)程
3.1、系統(tǒng)總體方案
3.2、模塊電路設(shè)計(jì)
四、系統(tǒng)調(diào)試與結(jié)果
五、主要元器件與設(shè)備
六、課程設(shè)計(jì)體會(huì)與建議
6.1、設(shè)計(jì)體會(huì)
6.2、設(shè)計(jì)建議
七、參考文獻(xiàn)
八、附件


單片機(jī)開發(fā)課程設(shè)計(jì)
一、設(shè)計(jì)目的

1、熟悉單片機(jī)開發(fā)試驗(yàn)儀的工作原理.

2、掌握C51語(yǔ)言編程方法。

3、熟悉超聲波測(cè)距模塊工作原理。

4、熟悉LCD顯示屏使用方法。

5、熟悉超聲波傳感器、蜂鳴器的原理及使用方法。

2、設(shè)計(jì)思路1、整體設(shè)計(jì)思路


圖1 整體設(shè)計(jì)思路圖(見(jiàn)51hei附件)
2、模塊設(shè)計(jì)思路
1、編寫LCD1602驅(qū)動(dòng)模塊相關(guān)程序思路;

在LCD1602程序中,要寫入寫、讀、顯示數(shù)據(jù)函數(shù)模塊。

1、寫數(shù)據(jù)模塊:

圖2 數(shù)據(jù)傳輸圖
2、讀數(shù)據(jù)模塊:
圖3 數(shù)據(jù)傳輸圖
3、顯示模塊:
圖4 顯示原理圖

3、編寫蜂鳴器驅(qū)動(dòng)模塊相關(guān)程序思路;

用P1^5口接入蜂鳴器,設(shè)計(jì)兩個(gè)不同頻率的延時(shí)模塊。

當(dāng)距離不同時(shí),分別調(diào)用不同頻率的蜂鳴器驅(qū)動(dòng)函數(shù)。

4、編寫超聲波傳感器測(cè)距模塊相關(guān)程序思路。

高電平持續(xù)時(shí)間為超聲波發(fā)出到返回接收到一個(gè)往返的時(shí)間。

圖5 超聲波時(shí)序圖

三、設(shè)計(jì)過(guò)程1、總體設(shè)計(jì)方案

1、超聲波測(cè)距傳感器的使用:

控制口發(fā)一個(gè) 10US 以上的高電平,就可以在接收口等待高電平輸出.一有輸出就可以開定時(shí)器計(jì)時(shí),當(dāng)此口變?yōu)榈碗娖綍r(shí)就可以讀定時(shí)器的值,此時(shí)就為此次測(cè)距的時(shí)間,方可算出距離.如此不斷的周期測(cè),就可以達(dá)到你移動(dòng)測(cè)量的值了。

  • 超聲波模塊工作原理:

圖6超聲波傳感器實(shí)物圖

如上實(shí)物圖示,超聲波傳感器有4個(gè)引腳,VCC電源端、GND接地端、TRIG發(fā)送端、ECHO接收端。

超聲波傳感器采用IO觸發(fā)測(cè)距,trig端發(fā)出超聲波,模塊自動(dòng)發(fā)送8個(gè)40Khz的方波,自動(dòng)檢測(cè)是否有信號(hào)返回,到echo端接收到超聲波,在此過(guò)程中一直持續(xù)高電平信號(hào),高點(diǎn)平的持續(xù)時(shí)間就是超聲波從發(fā)出到接收到這一過(guò)程的時(shí)間。

測(cè)試距離=(高電平時(shí)間*聲速(340m/s))/2

2、模塊電路

1、超聲波測(cè)距模塊工作原理(程序見(jiàn)附件):

(1)采用 IO 觸發(fā)測(cè)距,給至少 10us 的高電平信號(hào);

(2)模塊自動(dòng)發(fā)送 8 個(gè) 40khz 的方波,自動(dòng)檢測(cè)是否有信號(hào)返回;

(3)有信號(hào)返回,通過(guò) IO 輸出一高電平,高電平持續(xù)的時(shí)間就是超聲波從發(fā)射到返回的時(shí)間.測(cè)試距離=(高電平時(shí)間*聲速(340M/S))/2;

  • 最遠(yuǎn)探測(cè)距離調(diào)節(jié)



圖7 超聲波模塊圖

上圖標(biāo)志電阻即 R3,可以調(diào)節(jié)最大探測(cè)距離。R3 電阻為 392,探測(cè)距離最大 4.5M 左右,探測(cè)角度小15度;R3電阻為472,探測(cè)距離最大7M 左右,盲區(qū)在2CM左右,探測(cè)角度小于30度;出廠默認(rèn)392,即最大探測(cè)距離4.5M左右。R3電阻大,接收部分增益高,檢測(cè)距離大,但檢測(cè)角度會(huì)相應(yīng)變大,容易檢測(cè)到前方旁邊的物體。當(dāng)然,客戶在不要求很高的測(cè)試距離的條件下,可以改小R3來(lái)減小探測(cè)角度,這時(shí)最大測(cè)距會(huì)減小。超聲波模塊測(cè)距接口:

          圖8 超聲波模塊測(cè)距接口圖

  • LCD1602模塊工作原理(程序見(jiàn)附件):

字符的顯示 :
    用LCD顯示一個(gè)字符時(shí)比較復(fù)雜,因?yàn)橐粋(gè)字符由6×8或8×8點(diǎn)陣組成,既要找到和顯示屏幕上某幾個(gè)位置對(duì)應(yīng)的顯示RAM區(qū)的8字節(jié),還要使每字節(jié)的不同位為“1”,其它的為“0”,為“1”的點(diǎn)亮,為“0”的不亮。這樣一來(lái)就組成某個(gè)字符。但由于內(nèi)帶字符發(fā)生器的控制器來(lái)說(shuō),顯示字符就比較簡(jiǎn)單了,可以讓控制器工作在文本方式,根據(jù)在LCD上開始顯示的行列號(hào)及每行的列數(shù)找出顯示RAM對(duì)應(yīng)的地址,設(shè)立光標(biāo),在此送上該字符對(duì)應(yīng)的代碼即可。

圖9 LCD1602模塊接口電路圖

  • 蜂鳴器模塊工作原理(程序見(jiàn)附件):

            

圖10 蜂鳴器模塊接口電路圖

蜂鳴器的BZ接到單片機(jī)的P1^5口上,當(dāng)接收到低電平是低電平是,蜂鳴器報(bào)警,當(dāng)是高電平蜂鳴器不響應(yīng)。

四、系統(tǒng)調(diào)試與結(jié)果

程序調(diào)試:

在Keil-uVision4軟件中對(duì)程序進(jìn)行編譯,如下圖所示,在調(diào)試的過(guò)程中,蜂鳴器在不同的測(cè)試距離下應(yīng)該發(fā)出不同頻率的報(bào)警聲。期初,我未能透徹理解蜂鳴器發(fā)聲原理,所以在寫蜂鳴器報(bào)警程序時(shí),遇到了很多問(wèn)題,很長(zhǎng)時(shí)間都不能發(fā)出不同頻率的聲音。最后經(jīng)過(guò)查看資料、研究它的發(fā)聲原理,

圖11 程序調(diào)試顯示圖

功能調(diào)試:

(1)當(dāng)超聲波測(cè)距傳感器此時(shí)與物體距離為0.13m,當(dāng)超聲波測(cè)距傳感器與物體距離小于10時(shí),蜂鳴器報(bào)警會(huì)發(fā)出滴---滴---滴---的聲音。

圖12 功能調(diào)試圖

(2)當(dāng)超聲波測(cè)距傳感器與物體距離為0.13,當(dāng)超聲波測(cè)距傳感器與物體距離在10~30cm之間時(shí),蜂鳴器報(bào)警會(huì)發(fā)出滴滴滴滴滴滴的聲音。

圖13 功能調(diào)試圖

(3)當(dāng)物體與超聲波傳感器的距離超過(guò)30cm時(shí),不發(fā)生報(bào)警。

圖14 功能調(diào)試圖

五、主要元器件與設(shè)備開發(fā)平臺(tái):X86-PC              windows

開發(fā)工具:Keil uVersion4

目標(biāo)平臺(tái):STC89C52RC 單片機(jī)

主要元器件:

單片機(jī)開發(fā)試驗(yàn)儀:

板載硬件:STC89C52RC、DS1302、LED 數(shù)碼管、蜂鳴器、LCD1602、8*8 LED 矩陣、矩陣鍵盤、獨(dú)立按鍵、74LS138 等;

超聲波測(cè)距傳感器

六、課程設(shè)計(jì)體會(huì)與建議6.1、設(shè)計(jì)體會(huì)

   通過(guò)這四天的課程設(shè)計(jì)學(xué)習(xí),不僅加強(qiáng)了我的學(xué)習(xí)理論的能力,而且也增強(qiáng)了我的動(dòng)手寫程序,也讓我更深一步的認(rèn)識(shí)了單片機(jī),當(dāng)然,遇到問(wèn)題是在所難免的,有了問(wèn)題才有進(jìn)步的空間,也只有發(fā)現(xiàn)問(wèn)題,才知道自己的水平是怎樣的,才會(huì)讓自己沉下心去認(rèn)真分析與反思,細(xì)心總結(jié),在學(xué)習(xí)中進(jìn)步。

在項(xiàng)目中,我們要編寫代碼,進(jìn)行功能的測(cè)試。在寫程序時(shí),老師帶著我們寫了主要的部分,讓我們做擴(kuò)展功能,在寫的時(shí)后我犯了不少錯(cuò)誤。C語(yǔ)言語(yǔ)法運(yùn)用的不夠熟練,會(huì)犯很基礎(chǔ)的低級(jí)錯(cuò)誤。

總之,在經(jīng)歷了這次課程設(shè)計(jì)工作之后,讓我明白,不管遇到什么問(wèn)題都要認(rèn)證分析,堅(jiān)持嘗試,不斷的努力去此外,對(duì)于問(wèn)題要認(rèn)真分析,仔細(xì)考慮有關(guān)的方方面面,才能解決問(wèn)題。更要多去練習(xí),相信孰能生巧。

6.2、設(shè)計(jì)建議

我還是比較喜歡課程設(shè)計(jì)這一教學(xué)模式,因?yàn)檫@不僅是一個(gè)課程設(shè)計(jì),在做一個(gè)實(shí)際的項(xiàng)目中所面臨的問(wèn)題遠(yuǎn)超于課本。

在這次單片機(jī)課程設(shè)計(jì)讓我學(xué)到了很多東西,認(rèn)識(shí)到了動(dòng)手寫程序的重要性,希望學(xué)校可以安排多次這樣的課程設(shè)計(jì),多讓我們做一些有意義的設(shè)計(jì),希望老師也能多發(fā)一些這樣的課題讓我們一起討論、學(xué)習(xí)和設(shè)計(jì)。

七、參考文獻(xiàn)

[1] 康華光. 電子技術(shù)基礎(chǔ). 北京:高等教育出版社,1999年;

[2] 彭華林等編. 數(shù)字電子技術(shù). 長(zhǎng)沙:湖南大學(xué)出版社,2004年;

[3] 金唯香等編. 電子測(cè)試技術(shù). 長(zhǎng)沙:湖南大學(xué)出版社,2004年;

[4] 侯建軍. 數(shù)字電路實(shí)驗(yàn)一體化教程. 北京:清華大學(xué)出版社,北京交通大學(xué)出版社,2005年;

[5] 閻石. 數(shù)字電子技術(shù)基礎(chǔ). 北京:高等教育出版社,2001年;

[6] 趙春華、張學(xué)軍.電子技術(shù)基礎(chǔ)仿真實(shí)驗(yàn). 北京:機(jī)械工業(yè)出版社出版社,2007年;

設(shè)計(jì)程序代碼:

main.c程序:

  1. <font style="font-size: 12pt">#include "sr04.h"
  2. #include "timer.h"
  3. #include "delay.h"
  4. #include "buzz.h"
  5. int main(void)
  6. {
  7.               lcd1602_init();
  8.               timer0_init();
  9.               while (1) {
  10.                             display_test_length();
  11.                             delay_ms(300);
  12.               //              sung_time();
  13.               //              delay_ms(300);
  14.               }
  15.               return 0;
  16. }
  17. Lcd1602.c程序:
  18. #include "lcd1602.h"
  19. #include "delay.h"
  20. static void write_cmd(u8 cmd)
  21. {
  22.               RS = 0; /*寫指令設(shè)置*/
  23.               RW = 0; /*設(shè)置寫*/
  24.               E  = 0;
  25.               delay_ms(1);
  26.               DB7_DB0 = cmd;
  27.               E  = 1;
  28.               delay_ms(1);
  29.               E = 0;
  30.               delay_ms(1);
  31. }
  32. static void write_data(u8 dat)
  33. {
  34.               RS = 1; /*寫數(shù)據(jù)設(shè)置*/
  35.               RW = 0; /*設(shè)置寫*/
  36.               E  = 0;
  37.               delay_ms(1);
  38.               DB7_DB0 = dat;
  39.               E  = 1;
  40.               delay_ms(1);
  41.               E = 0;
  42.               delay_ms(1);
  43. }
  44. void lcd1602_init(void)
  45. {
  46.                 delay_ms(15);
  47.               write_cmd(0x30);
  48.               delay_ms(5);
  49.               write_cmd(0x30);
  50.               delay_ms(1);
  51.               write_cmd(0x30);
  52.               write_cmd(0x38); /*顯示2行,每個(gè)字符是5*8, 數(shù)據(jù)線8位*/
  53.               write_cmd(0x0c); /*顯示開, 無(wú)光標(biāo),不閃爍*/
  54.               write_cmd(0x01); /*清屏*/
  55.               write_cmd(0x06); /*寫入數(shù)據(jù)后光標(biāo)右移*/
  56. }
  57. void display_char(u8 x, u8 y, u8 ch)
  58. {
  59.               u8 addr;
  60.               if(y == 0) {
  61.                                addr = 0x80 |  x;
  62.               } else if (y == 1) {
  63.                             addr = 0x80 | x | 0x40;
  64.               } else {
  65.                             return;
  66.               }
  67.               write_cmd(addr);
  68.               write_data(ch);
  69. }
  70. void display_linechar(u8 raw, u8 *buf, u8 num)
  71. {
  72.               u8 i;
  73.               if ((raw != 0) && (raw != 1)) {
  74.                             return;
  75.               }              
  76.               for (i = 0; i < num; i++) {
  77.                             display_char(i, raw, buf[i]);
  78.               }
  79. }
  80. Sr04.c程序:
  81. #include "sr04.h"
  82. #include "delay.h"
  83. #include "buzz.h"
  84. static u8 length_flag = 0;
  85. u8 overflow = 0;
  86. static u8 logo[]   = "uplooking made"; //14
  87. static u8 result[] = "length: -.--m"; //8
  88. static void start_signal(void)
  89. {
  90.               TRIG = 1;
  91.               _nop_();
  92.               _nop_();
  93.               _nop_();
  94.               _nop_();
  95.               _nop_();
  96.               _nop_();
  97.               _nop_();
  98.               _nop_();
  99.               _nop_();
  100.               _nop_();
  101.               _nop_();
  102.               _nop_();
  103.               _nop_();
  104.               _nop_();
  105.               _nop_();
  106.               _nop_();
  107.               _nop_();
  108.               _nop_();
  109.               _nop_();
  110.               _nop_();
  111.               _nop_();
  112.               _nop_();
  113.               _nop_();
  114.               _nop_();
  115.               TRIG = 0;
  116. }

  117. static u16 start_test_length(void)
  118. {
  119.               u16 total_us;
  120.               u16 total_len;
  121.               start_signal();
  122.               /*等待ECHO變?yōu)楦唠娖?/
  123.               while (ECHO == 0){
  124.                             ;
  125.               }            
  126.               /*啟動(dòng)定時(shí)器0,開啟定時(shí)*/
  127.               start_timer0();
  128.               /*等待ECHO變?yōu)榈碗娖?/
  129.               while (ECHO == 1) {
  130.               ;
  131.               }
  132.               /*停止定時(shí)器0*/
  133.               stop_timer0();
  134.               total_us = TH0*256 + TL0; //us
  135.               TH0 = TL0 = 0;
  136.               total_len = total_us*1.7/100;   //cm
  137.               /*判斷測(cè)量長(zhǎng)度數(shù)據(jù)是否無(wú)效*/
  138.               if ((total_len > 700) || (overflow == 1)) {
  139.                             length_flag = 0;
  140.                             overflow = 0;
  141.                             return 0;
  142.               } else {
  143.                             length_flag = 1;
  144.               }
  145.               return total_len;
  146. }                                                                       
  147. void display_test_length(void)
  148. {
  149.               u16 len;
  150.               len = start_test_length();
  151.               if (length_flag == 1) {
  152.               /*if(len<50)
  153.                             {            
  154.                                           BU=0;
  155.                                           delay_10us(100000);            
  156.                             }else if(50<len<80)
  157.                             {                           
  158.                             BU = 0;
  159.                             delay_ms(100);            
  160.                             } */
  161.                             result[8]  = (len/100) + '0';              //m
  162.                             result[10] = ((len%100)/10) + '0'; //.m
  163.                             result[11] = (len%10) + '0';
  164. ……………………

  165. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
  166. </font>
復(fù)制代碼



完整的Word格式文檔51黑下載地址(含源碼):

超聲測(cè)距.doc (2.41 MB, 下載次數(shù): 27)




分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表