找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2640|回复: 0
收起左侧

超声波测距资料(HC-SR04)Arduino UNO与单片机例程

[复制链接]
ID:261077 发表于 2017-12-13 14:36 | 显示全部楼层 |阅读模式
1、库文件使用:请将库文件解压后以文件夹格式拖至Arduino文件夹下的Libraries文件夹里。
    例:C:\Program Files (x86)\Arduino\libraries
注:无库文件的,为Arduino IDE自带库,无需添加。
2、原理图与技术手册为厂家提供,仅供参考使用,不提供技术支持。
0.png

所有资料51hei提供下载:
超声波模块.rar (5.46 MB, 下载次数: 23)


单片机源程序如下:
  1. /**********************HL-1实验开发板例程************************
  2. *                文件名称:led.c
  3. *                功能描述:本例程为超声波测距的学习。使用前先根据超声波模块的IO修改本程序的端口定义。
  4. *                                        本例程为网络资料搜集整理 。
  5. *                使用环境:TS-51A开发板 + STC89C52 + 11.0592M晶振 + Keil C51 V9.0
  6. *                QQ      : 10903659
  7. *                QQ群    :336397723  336398729   336398900
  8. ******************************************************************/
  9. /**********************************包含头文件**********************************/
  10. #include <reg52.h>
  11. #include "1602.h"
  12. /************************************宏定义************************************/
  13. #define VELOCITY_30C        3495       //30摄氏度时的声速,声速V= 331.5 + 0.6*温度;
  14. #define VELOCITY_23C        3453       //23摄氏度时的声速,声速V= 331.5 + 0.6*温度;
  15. /************************************位定义************************************/
  16. sbit INPUT  = P3^2;                //回声接收端口
  17. sbit OUTPUT = P1^4;                //超声触发端口
  18. sbit Beep   = P2^2;                           // 蜂鸣器 
  19. /********************************定义变量和数组********************************/
  20. long int distance=0;               //距离变量
  21. uchar table[]  = "                ";
  22. uchar table0[] = "    TS-51A      ";
  23. uchar table1[] = "There's no echo.";
  24. uchar table2[] = "    TS-51A      ";
  25. uchar table3[] = "Distance:";
  26. uchar count;
  27. /***********************************函数声明***********************************/
  28. extern void initLCD();
  29. extern void write_date(uchar date);
  30. extern void write_com(uchar com);
  31. extern void delay(uint x);
  32. /******************************************************************************/
  33. /* 函数名称  : Delay_xMs                                                      */
  34. /* 函数描述  : 延时函数                                                       */
  35. /* 输入参数  : x                                                              */
  36. /* 参数描述  : 延时时间                                                       */
  37. /* 返回值    : 无                                                             */
  38. /******************************************************************************/
  39. void Delay_xMs(unsigned int x)
  40. {
  41.     unsigned int i,j;
  42.     for(i = 0;i < x;i++ )
  43.     {
  44.         for(j = 0;j < 3;j++ )
  45.         {
  46.             ;
  47.         }
  48.     }
  49. }
  50. /******************************************************************************/
  51. /* 函数名称  : Alarm                                                          */
  52. /* 函数描述  : 蜂鸣器发声函数                                                 */
  53. /* 输入参数  : t                                                              */
  54. /* 参数描述  : 发声的次数                                                     */
  55. /* 返回值    : 无                                                             */
  56. /******************************************************************************/
  57. void Alarm(uchar t)
  58. {
  59.         uchar i;
  60.         for(i = 0;i < t;i++)
  61.         {
  62.                 Beep = 0;
  63.                 Delay_xMs(1000);
  64.                 Beep = 1;
  65.                 Delay_xMs(1000);
  66.         }
  67. }        
  68. /******************************************************************************/
  69. /* 函数名称  : delayt                                                         */
  70. /* 函数描述  : 延时函数                                                       */
  71. /* 输入参数  : x                                                              */
  72. /* 参数描述  : 延时时间数据                                                   */
  73. /* 返回值    : 无                                                             */
  74. /******************************************************************************/        
  75. void delayt(uint x)
  76. {
  77.     uchar j;
  78.     while(x-- > 0)
  79.     {
  80.               for(j = 0;j < 125;j++)
  81.         {
  82.             ;
  83.         }
  84.     }
  85. }
  86. /******************************************************************************/
  87. /* 函数名称  : Init_MCU                                                       */
  88. /* 函数描述  : 初始化单片机函数                                               */
  89. /* 输入参数  : 无                                                             */
  90. /* 参数描述  : 无                                                             */
  91. /* 返回值    : 无                                                             */
  92. /******************************************************************************/
  93. void Init_MCU(void)
  94. {
  95.         TMOD = 0x01;          //定时器2初始化,设置为16位自动重装模式
  96.          TL0 = 0x66;
  97.         TH0 = 0xfc;              //1ms
  98.     ET0 = 1;              //开定时器2
  99.         EA = 1;                      //总中断使能
  100. }
  101. /******************************************************************************/
  102. /* 函数名称  : Init_Parameter                                                 */
  103. /* 函数描述  : 初始化参数和IO口函数                                           */
  104. /* 输入参数  : 无                                                             */
  105. /* 参数描述  : 无                                                             */
  106. /* 返回值    : 无                                                             */
  107. /******************************************************************************/
  108. void Init_Parameter(void)
  109. {
  110.          OUTPUT =1;
  111.          INPUT = 1;
  112.          count = 0;
  113.          distance = 0;
  114. }
  115. /******************************************************************************/
  116. /* 函数名称  : display_char                                                   */
  117. /* 函数描述  : 显示字符串函数                                                 */
  118. /* 输入参数  : point,address                                                  */
  119. /* 参数描述  : 写入的字符串的地址指针 1602显示对应的地址                      */
  120. /* 返回值    : 无                                                             */
  121. /******************************************************************************/
  122. void display_char(uchar *point,uchar address)
  123. {
  124.         uchar i;
  125.         write_com(0x80 + address);
  126.         for(i = 0;i < 16; i++)
  127.         {
  128.                 write_date(*point);
  129.                 point++;
  130.         }
  131. }
  132. /******************************************************************************/
  133. /* 函数名称  : display                                                        */
  134. /* 函数描述  : 显示数字                                                       */
  135. /* 输入参数  : number,address                                                */
  136. /* 参数描述  : number写入的数据,address地址                                  */
  137. /* 返回值    : 无                                                             */
  138. /******************************************************************************/        
  139. void display(int number,uchar address)
  140. {
  141.         uchar b,c,d,e;
  142.         b= (number / 1000);
  143.         c= (number / 100) % 10;
  144.         d = (number / 10) % 10;
  145.         e = number % 10;

  146.         write_com(0x80 + address);
  147.     write_date(b + 48);
  148.         write_date(c + 48);
  149.         write_date(d + 48);
  150.         write_date(46);           //小数点的ASCII
  151.         write_date(e + 48);
  152.     write_date(99);           //"c"的ASCII
  153.         write_date(109);          //"m"的ASCII
  154. }
  155. /******************************************************************************/
  156. /* 函数名称  : Trig_SuperSonic                                                */
  157. /* 函数描述  : 发出声波函数                                                   */
  158. /* 输入参数  : 无                                                             */
  159. /* 参数描述  : 无                                                             */
  160. /* 返回值    : 无                                                             */
  161. /******************************************************************************/
  162. void Trig_SuperSonic(void)//出发声波
  163. {
  164.          OUTPUT = 1;
  165.          delayt(1);
  166.          OUTPUT = 0;
  167. }
  168. /******************************************************************************/
  169. /* 函数名称  : Measure_Distance                                               */
  170. /* 函数描述  : 计算距离函数                                                   */
  171. /* 输入参数  : 无                                                             */
  172. /* 参数描述  : 无                                                             */
  173. /* 返回值    : 无                                                             */
  174. /******************************************************************************/
  175. void Measure_Distance(void)
  176. {
  177.         uchar l;
  178.         uint h,y;
  179.         TR0 = 1;
  180.         while(INPUT)
  181.     {
  182.         ;
  183.     }        
  184.         TR0 = 0;
  185.         l = TL0;
  186.         h = TH0;
  187.         y = (h << 8) + l;
  188.         y = y - 0xfc66;//us部分
  189.         distance = y + 1000 * count;//计算总时间
  190.         TL0 = 0x66;
  191.         TH0 = 0xfc;
  192.         delayt(30);
  193.         distance = VELOCITY_30C * distance / 20000;
  194. }
  195. /******************************************************************************/
  196. /* 函数名称  : main                                                           */
  197. /* 函数描述  : 主函数                                                         */
  198. /* 输入参数  : 无                                                             */
  199. /* 参数描述  : 无                                                             */
  200. /* 返回值    : 无                                                             */
  201. /******************************************************************************/                                       
  202. void main(void)
  203. {        
  204.     rw = 0;
  205.         initLCD();
  206.         Init_MCU();
  207.         Init_Parameter();
  208.         Alarm(2);
  209.         display_char(table,0x00);
  210.         display_char(table0,0x40);
  211.         Delay_xMs(30000);
  212.         display_char(table2,0x00);
  213.         display_char(table1,0x40);

  214.         while(1)
  215.         {
  216.                  Trig_SuperSonic();         //触发超声波发射
  217.                  while(INPUT == 0)          //等待回声
  218.          {
  219.              ;
  220.          }
  221.                  Measure_Distance();        //计算脉宽并转换为距离
  222. ……………………

  223. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表