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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3461|回復: 0
收起左側

超聲測距單片機課程設計報告書

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



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

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



課程設計項目成績評定表
一、設計任務及要求:
1設計任務:
設計一個倒車距離顯示及報警提醒系統。


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

2> 當小于閾值距離時報警,大于閾值距離時消警。




指導教師簽名:

年   月    日  

二、指導教師評語:

項目成績:


指導教師簽名:

年   月    日


課程設計報告書目錄
設計報告書目錄

一、設計目的
二、設計思路
三、設計過程
3.1、系統總體方案
3.2、模塊電路設計
四、系統調試與結果
五、主要元器件與設備
六、課程設計體會與建議
6.1、設計體會
6.2、設計建議
七、參考文獻
八、附件


單片機開發課程設計
一、設計目的

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

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

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

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

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

2、設計思路1、整體設計思路


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

在LCD1602程序中,要寫入寫、讀、顯示數據函數模塊。

1、寫數據模塊:

圖2 數據傳輸圖
2、讀數據模塊:
圖3 數據傳輸圖
3、顯示模塊:
圖4 顯示原理圖

3、編寫蜂鳴器驅動模塊相關程序思路;

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

當距離不同時,分別調用不同頻率的蜂鳴器驅動函數。

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

高電平持續時間為超聲波發出到返回接收到一個往返的時間。

圖5 超聲波時序圖

三、設計過程1、總體設計方案

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

控制口發一個 10US 以上的高電平,就可以在接收口等待高電平輸出.一有輸出就可以開定時器計時,當此口變為低電平時就可以讀定時器的值,此時就為此次測距的時間,方可算出距離.如此不斷的周期測,就可以達到你移動測量的值了。

  • 超聲波模塊工作原理:

圖6超聲波傳感器實物圖

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

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

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

2、模塊電路

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

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

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

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

  • 最遠探測距離調節



圖7 超聲波模塊圖

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

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

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

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

圖9 LCD1602模塊接口電路圖

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

            

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

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

四、系統調試與結果

程序調試:

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

圖11 程序調試顯示圖

功能調試:

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

圖12 功能調試圖

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

圖13 功能調試圖

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

圖14 功能調試圖

五、主要元器件與設備開發平臺:X86-PC              windows

開發工具:Keil uVersion4

目標平臺:STC89C52RC 單片機

主要元器件:

單片機開發試驗儀:

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

超聲波測距傳感器

六、課程設計體會與建議6.1、設計體會

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

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

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

6.2、設計建議

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

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

七、參考文獻

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

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

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

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

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

[6] 趙春華、張學軍.電子技術基礎仿真實驗. 北京:機械工業出版社出版社,2007年;

設計程序代碼:

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; /*寫指令設置*/
  23.               RW = 0; /*設置寫*/
  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; /*寫數據設置*/
  35.               RW = 0; /*設置寫*/
  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, 數據線8位*/
  53.               write_cmd(0x0c); /*顯示開, 無光標,不閃爍*/
  54.               write_cmd(0x01); /*清屏*/
  55.               write_cmd(0x06); /*寫入數據后光標右移*/
  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變為高電平*/
  123.               while (ECHO == 0){
  124.                             ;
  125.               }            
  126.               /*啟動定時器0,開啟定時*/
  127.               start_timer0();
  128.               /*等待ECHO變為低電平*/
  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.               /*判斷測量長度數據是否無效*/
  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>
復制代碼



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

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




回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品久久久久久久久久久久久 | 亚洲网站在线观看 | 日韩视频专区 | 日韩高清一区 | 欧美日韩成人在线 | 国产精品乱码一区二区三区 | 成人av电影天堂 | 亚洲精品乱码久久久久久按摩 | 久久久久国产一区二区三区四区 | 日韩欧美视频免费在线观看 | 午夜免费福利电影 | 午夜爽爽爽男女免费观看影院 | 中文字幕一级毛片视频 | 久久999| 99爱在线观看 | 中文字幕国产一区 | 97超碰人人草 | 国产成人精品a视频一区www | 日韩中文字幕视频 | 亚洲精品不卡 | 久久久久中文字幕 | 日韩久久久久久 | 成人依人| 99re在线视频 | 国产98色在线 | 日韩 | 国产精品欧美一区二区三区不卡 | 一区二区三区高清 | 99国内精品久久久久久久 | 黄久久久 | 国产综合视频 | 欧美一级在线免费 | 91免费观看在线 | 国产精品一区二区欧美 | 婷婷久久网 | 亚洲一区电影 | 成人在线观看欧美 | 人人干人人看 | 精品一区二区三区在线视频 | 日日碰狠狠躁久久躁婷婷 | 视频一区在线播放 | 日韩一二区 |