找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2246|回复: 1
收起左侧

51单片机超声波模块HC_SR04代码

[复制链接]
ID:283906 发表于 2019-7-7 16:31 | 显示全部楼层 |阅读模式
非常简洁!可直接调用!!!
QX]]2A~KZX8S[}TNR1YG{JP.png 3`RY9SXS8CUO4`L5`V38}XR.png

单片机源程序如下:
  1. #include "STC15Fxxxx.H"
  2. #include "hc_sr04.h"

  3. u16  time=0;
  4. u16  timer=0;
  5. bit  flag =0;

  6. void Delay45us()                //@11.0592MHz
  7. {
  8.         unsigned char i;

  9.         i = 122;
  10.         while (--i);
  11. }



  12. //========================================================================
  13. // 函数: HC_SR04_Init()
  14. // 描述: 初始化HC_SR04所需硬件。
  15. // 参数:
  16. // 返回: none.
  17. //========================================================================
  18. void HC_SR04_Init()
  19. {
  20.         TMOD |= 0x01;                //定时器0 16位不可重装模式
  21.         TH0 = 0x00;                    // 设置定时初值
  22.         TL0 = 0x00;                    //设置定时初值
  23.         TR0=1;  
  24.         ET0=1;
  25.         EA=1;
  26. }


  27. //========================================================================
  28. // 函数: HC_SR04_Start()
  29. // 描述: 开始发送声波。
  30. // 参数:
  31. // 返回: none.
  32. //========================================================================
  33. void HC_SR04_Start()
  34. {
  35.         Trig_Pin = 0;
  36.         Delay45us();
  37.         Trig_Pin = 1;
  38. }


  39. //========================================================================
  40. // 函数: int HC_SR04_Loop()
  41. // 描述: 返回距离。
  42. // 参数:  
  43. // 返回: distance:距离(单位:厘米).
  44. //========================================================================
  45. int HC_SR04_Loop()
  46. {
  47.         int distance;//distance|距离
  48.         HC_SR04_Start();
  49.          while(!Echo_Pin);                //Wait when RX is zero|当RX为零时等待
  50.          TR0=1;                            //Opening count|开启计数
  51.          while(Echo_Pin);                        //When RX counts to 1 and waits|当RX为1计数并等待
  52.          TR0=0;                                //Closing count|关闭计数
  53.          time=TH0*256+TL0;
  54.          TH0=0;
  55.          TL0=0;
  56.          distance=(time*1.87)/100;     //算出来是CM
  57.         if(flag==1)                    //超出测量
  58.         {
  59.                 flag=0;
  60.                 distance=0;
  61.         }
  62.         return distance;
  63. }


  64. void zd0() interrupt 1                  //T0中断用来计数器溢出,超过测距范围
  65. {
  66.         flag=1;                                                         //中断溢出标志
  67. }
复制代码

所有资料51hei提供下载:
HC_SR04.zip (60.9 KB, 下载次数: 75)



回复

使用道具 举报

ID:589945 发表于 2019-8-3 09:33 | 显示全部楼层
有用谢谢
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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