找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4961|回复: 13
打印 上一主题 下一主题
收起左侧

HC-SR04超声波单片机源程序

  [复制链接]
跳转到指定楼层
楼主
ID:194729 发表于 2019-5-23 23:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这个超声波测距程序是寒假的时候写的,能够精确显示,当时忘记是参考哪位大神的,特意分享出来的。有需要的直接下载,没有黑币的留下邮箱,看见回

单片机源程序如下:
  1. #include<reg51.h>
  2. #include<intrins.h>
  3. #include"LCD1602.h"
  4. sbit Trig=P1^0;
  5. sbit Echo=P1^1;
  6. bit  flag=0;
  7. /*
  8.    ---------------------
  9.    延时函数
  10.    ---------------------
  11. */
  12. void delay(unsigned int z)
  13. {
  14.     unsigned int x,y;
  15.     for(x=z;x>0;x--)
  16.     for(y=400;y>0;y--);
  17. }


  18. /*
  19.    ---------------------
  20.     超声波启动函数
  21.    ---------------------
  22. */
  23. void start()                  
  24. {
  25.   int i;
  26.   Trig=0;                  //控制端初始状态拉低
  27.   Echo=0;                  //初始状态接收端置0
  28.   Trig=1;                  //控制端拉高,给一个高电平
  29.   for(i=0;i<20;i++)          //给至少10us的高电平
  30.   {
  31.     _nop_();                  //精确延时,推荐使用,在头文件intrins.h中
  32.   }
  33.   Trig=0;                  //将控制端拉低,触发条件完成
  34. }


  35. /*
  36.    ---------------------
  37.     LCD1602显示函数
  38.    ---------------------
  39. */
  40. void LcdDisplay(unsigned int temp)
  41. {
  42.     LCD1602_writebyte("The Distance is:");
  43.     LCD1602_write(0,0x80+0x41);
  44.     LCD1602_write(1,temp/1000+0x30);
  45.     LCD1602_write(1,temp%1000/100+0x30);
  46.     LCD1602_write(1,temp%100/10+0x30);
  47.     LCD1602_write(1,46);               //此处显示的是小数点.
  48.     LCD1602_write(1,temp%10+0x30);
  49.     LCD1602_write(1,0x43);             //此处显示的是C,16进制对应的ASCII的值
  50.     //LCD1602_write(1,67);               //十进制对应的ASCII值,此处显示的也是C
  51.     LCD1602_write(1,0x4d);               //此处显示的是M,16进制对应的ASCII的值
  52.     //LCD1602_write(1,77);               //十进制对应的ASCII值,此处显示的也是M
  53.     delay(400);
  54.     LCD1602_write(0,0x01);             //1602 清屏 指令
  55. }


  56. /*
  57.    ---------------------
  58.     距离计算与显示函数
  59.    ---------------------
  60. */
  61. void count()
  62. {
  63.   unsigned int time,timeH,timeL;
  64.   float distance,falseValue;
  65.   timeH=TH0;
  66.   timeL=TL0;
  67.   TH0=0;
  68.   TL0=0;
  69.   time=timeH*256+timeL;
  70.   distance=time*1.7/100;                     //distance=(time/2)*340m/s  time的单位是us转化为s等于time*10^(-6)        340m/s转化为cm是34000cm/s
  71.                                              //综合到一块就是:distance=17000*time*10^(-6)=time*1.7/100
  72.   distance=distance*10;                      //距离扩大10倍,为了能够精确到小数点后一位
  73.   if(distance<20 || distance>4500 || flag==0)
  74.   {
  75.     flag=1;
  76.     falseValue=8888;
  77.     LCD1602_write(0,0x80);
  78.     LCD1602_writebyte("Error!");
  79.     delay(200);
  80.     LCD1602_write(0,0x01);
  81.     delay(200);
  82.     LcdDisplay(falseValue);
  83.   }
  84.   else
  85.   {
  86.     LcdDisplay(distance);
  87.   }
  88. }


  89. /*
  90.    ---------------------
  91.     主函数
  92.    ---------------------
  93. */

  94. void main()
  95. {
  96.   LCD1602_cls();
  97.   while(1)
  98.   {
  99.    TMOD=0X11;
  100.    TH0=0;
  101.    TL0=0;
  102.    start();
  103.    while(!Echo);
  104.    TR0=1;
  105.    while(Echo);
  106.    TR0=0;
  107.    count();
  108.    delay(120);
  109.   }
  110. }
复制代码

所有资料51hei提供下载:
超声波测距模块_HC-SR04_ 用户手册-V2.pdf (1017.48 KB, 下载次数: 43)
超声波液晶显示.zip (28.85 KB, 下载次数: 86)


评分

参与人数 1黑币 +15 收起 理由
xjx51 + 15 感谢分享!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏5 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:98511 发表于 2019-5-24 11:16 | 只看该作者
下下来
研究研究
回复

使用道具 举报

板凳
ID:454725 发表于 2019-5-24 16:05 | 只看该作者
很棒,感谢楼主
回复

使用道具 举报

地板
ID:194729 发表于 2019-5-25 00:00 | 只看该作者
tpmelody 发表于 2019-5-24 11:16
下下来
研究研究

共同进步
回复

使用道具 举报

5#
ID:194729 发表于 2019-5-25 00:01 | 只看该作者

共同进步
回复

使用道具 举报

6#
ID:547961 发表于 2019-5-26 23:40 | 只看该作者
感谢楼主分享
回复

使用道具 举报

7#
ID:548161 发表于 2019-5-28 15:19 | 只看该作者
回复

使用道具 举报

8#
ID:194729 发表于 2019-5-28 17:12 | 只看该作者

源码都贴出来,还需要发
回复

使用道具 举报

9#
ID:551972 发表于 2019-5-31 17:25 | 只看该作者
回复

使用道具 举报

10#
ID:588621 发表于 2019-7-27 16:11 来自手机 | 只看该作者
3334156266@qq.com
回复

使用道具 举报

11#
ID:588621 发表于 2019-7-27 16:13 来自手机 | 只看该作者
求一个不做显示的程序,让其控制灯亮
回复

使用道具 举报

12#
ID:587604 发表于 2019-7-30 15:54 | 只看该作者
那个flag有啥用?是不取第一次的数据吗?
回复

使用道具 举报

13#
ID:592156 发表于 2019-8-1 14:36 | 只看该作者
1943417719@qq.com
谢谢大佬了
回复

使用道具 举报

14#
ID:407026 发表于 2019-8-1 17:26 | 只看该作者
你好,实物可以运行吗
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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