久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3461|回復(fù): 0
收起左側(cè)

超聲測距單片機課程設(shè)計報告書

[復(fù)制鏈接]
ID:290947 發(fā)表于 2018-3-12 19:54 | 顯示全部樓層 |閱讀模式
單片機課程設(shè)計報告書



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

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



課程設(shè)計項目成績評定表
一、設(shè)計任務(wù)及要求:
1設(shè)計任務(wù):
設(shè)計一個倒車距離顯示及報警提醒系統(tǒng)。


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

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




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

年   月    日  

二、指導(dǎo)教師評語:

項目成績:


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

年   月    日


課程設(shè)計報告書目錄
設(shè)計報告書目錄

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


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

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

2、掌握C51語言編程方法。

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

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

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

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


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

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

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

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

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

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

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

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

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

圖5 超聲波時序圖

三、設(shè)計過程1、總體設(shè)計方案

1、超聲波測距傳感器的使用:

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

  • 超聲波模塊工作原理:

圖6超聲波傳感器實物圖

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

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

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

2、模塊電路

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

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

(2)模塊自動發(fā)送 8 個 40khz 的方波,自動檢測是否有信號返回;

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

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



圖7 超聲波模塊圖

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

          圖8 超聲波模塊測距接口圖

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

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

圖9 LCD1602模塊接口電路圖

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

            

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

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

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

程序調(diào)試:

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

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

功能調(diào)試:

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

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

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

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

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

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

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

開發(fā)工具:Keil uVersion4

目標(biāo)平臺:STC89C52RC 單片機

主要元器件:

單片機開發(fā)試驗儀:

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

超聲波測距傳感器

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

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

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

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

6.2、設(shè)計建議

我還是比較喜歡課程設(shè)計這一教學(xué)模式,因為這不僅是一個課程設(shè)計,在做一個實際的項目中所面臨的問題遠(yuǎn)超于課本。

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

七、參考文獻(xiàn)

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

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

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

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

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

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

設(shè)計程序代碼:

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行,每個字符是5*8, 數(shù)據(jù)線8位*/
  53.               write_cmd(0x0c); /*顯示開, 無光標(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.               /*啟動定時器0,開啟定時*/
  127.               start_timer0();
  128.               /*等待ECHO變?yōu)榈碗娖?/
  129.               while (ECHO == 1) {
  130.               ;
  131.               }
  132.               /*停止定時器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.               /*判斷測量長度數(shù)據(jù)是否無效*/
  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. …………限于本文篇幅 余下代碼請從51黑下載附件…………
  166. </font>
復(fù)制代碼



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

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




回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日本午夜免费福利视频 | 一区二区在线免费观看 | 欧美精品v国产精品v日韩精品 | 一区二区三区欧美大片 | 在线电影日韩 | 97久久精品午夜一区二区 | 久久精品久久久 | 精品日韩一区 | 亚洲国产一区在线 | 精品国产一区二区三区日日嗨 | 99国产精品一区二区三区 | 羞羞的视频免费在线观看 | 国产欧美日韩在线播放 | 亚洲国产福利视频 | 日韩精品一区二区三区 | 亚洲精品黄色 | 99福利视频 | 在线免费看黄 | 精品欧美一区二区精品久久久 | 日韩成人免费在线视频 | 日本小电影在线 | 在线看日韩av | 精品一区二区免费视频 | 欧美xxxx日本 | 97人人干| 国产精品久久久久久亚洲调教 | 在线播放一区二区三区 | 欧美一级欧美一级在线播放 | 国内精品久久精品 | 欧美精品久久 | 一区二区三区欧美 | 免费观看一级特黄欧美大片 | 国产日韩久久久久69影院 | 欧美一级精品片在线看 | 免费黄色的视频 | 97精品久久 | 久久中文视频 | 亚洲不卡视频 | 国产成人精品一区二区三区四区 | 成人免费网站 | av网站观看 |