标题: HC-SR04超声波单片机源程序 [打印本页]

作者: 我只是过于低调    时间: 2019-5-23 23:58
标题: HC-SR04超声波单片机源程序
这个超声波测距程序是寒假的时候写的,能够精确显示,当时忘记是参考哪位大神的,特意分享出来的。有需要的直接下载,没有黑币的留下邮箱,看见回

单片机源程序如下:
  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)



作者: tpmelody    时间: 2019-5-24 11:16
下下来
研究研究
作者: ichigooo    时间: 2019-5-24 16:05
很棒,感谢楼主
作者: 我只是过于低调    时间: 2019-5-25 00:00
tpmelody 发表于 2019-5-24 11:16
下下来
研究研究

共同进步
作者: 我只是过于低调    时间: 2019-5-25 00:01
ichigooo 发表于 2019-5-24 16:05
很棒,感谢楼主

共同进步
作者: cxk1234    时间: 2019-5-26 23:40
感谢楼主分享
作者: 114865asd    时间: 2019-5-28 15:19
1148654128@qq.com
作者: 我只是过于低调    时间: 2019-5-28 17:12
114865asd 发表于 2019-5-28 15:19

源码都贴出来,还需要发
作者: Mahow    时间: 2019-5-31 17:25
179937707@qq.com
作者: 伊特    时间: 2019-7-27 16:11
3334156266@qq.com
作者: 伊特    时间: 2019-7-27 16:13
求一个不做显示的程序,让其控制灯亮
作者: 天霸犀牛    时间: 2019-7-30 15:54
那个flag有啥用?是不取第一次的数据吗?
作者: zff113629    时间: 2019-8-1 14:36
1943417719@qq.com
谢谢大佬了
作者: 12212a    时间: 2019-8-1 17:26
你好,实物可以运行吗




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1