找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

关于单片机超声波测距,大佬们帮忙看看该加点啥,或者怎么改

查看数: 2821 | 评论数: 5 | 收藏 1
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2021-4-22 20:05

正文摘要:

我在读大学,学习过单片机原理与应用,但是感觉不怎么懂这个东西,但对单片机是很感兴趣的。 现在有打算弄一个超声波测距显示模块,网上也买了一些硬件设备。 超声波测距模块是US-015,现在将一块1602显示屏装在一 ...

回复

ID:523803 发表于 2021-12-12 23:43
你那个超声波模块不是IIC协议的好像
ID:838572 发表于 2021-11-29 17:06
Trig Echo脚接好就行
ID:844772 发表于 2021-4-23 09:25
你主要不是接线问题,用的超声测距模块US-015,不是IIC设备,不能按你的程序使用,二楼的是正确的。
ID:895440 发表于 2021-4-23 08:02
gnd接地,vcc接高电平的。剩下两个看程序端口定义接
ID:585428 发表于 2021-4-23 07:58
  1. /*
  2. 接线方式:超声波模块trig接单片机P2^0 ,超声波模块echo接单片机P2^1
  3.           P3^2接P2^1
  4. */

  5. #include "reg52.h"

  6. typedef unsigned char uchar;
  7. typedef unsigned int uint;

  8. sbit trig=P2^0;
  9. sbit echo=P2^1;
  10. sbit beep=P1^5;

  11. sbit LSA=P2^2;
  12. sbit LSB=P2^3;
  13. sbit LSC=P2^4;

  14. uint num=0;                   //计时
  15. float distance;           //距离
  16. float cm_per_num=3.40; //按照我的定时器初始化设定,1个num是100us
  17. uchar DisplayData[6];
  18. uchar code smgduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
  19.                                         0x7f,0x6f};//显示0~9的值

  20. void delay1ms(uchar xms)   
  21. {
  22.     uchar a,b,c;
  23.     for(c=xms;c>0;c--)
  24.         for(b=142;b>0;b--)
  25.             for(a=2;a>0;a--);
  26. }

  27. /*
  28. 设置工作方式为方式1,GATE=1,当中断0口输入1且TR0=1 时定时器工作
  29. 因为超声波模块的工作原理就是在接收回波时,从开始到结束,ech0=1
  30. 所以在单片机上用杜邦线将ech0的P21口和 中断0口 P32口链接
  31. 使得在回波期间,定时器工作,计算回波的时间,进而s=vt算出距离
  32. */
  33. void TimerInit()          //初始化,定时10us
  34. {
  35.     TMOD = 0x09;         
  36.     TH0 = 0xFF;
  37.     TL0 = 0x9C;
  38.     EA = 1;
  39.     ET0 = 1;
  40.     TR0 = 1;
  41. }

  42. void Timer0() interrupt 1          //中断 每过100us,num+1
  43. {
  44.     TH0 = 0xFF;
  45.     TL0 = 0x9C;
  46.         num++;
  47. }

  48. void value_distance()
  49. {
  50.         trig=0;
  51.         echo=0;
  52.         delay1ms(1);
  53.         trig=1;
  54.         delay1ms(11); //给trig一个10us以上的高电平信号
  55.         trig=0;
  56.         if(echo==1)           //如果有反射回的超声波,echo脚会在这期间持续输入高电平
  57.         {
  58.                 delay1ms(300);                //接收超声波期间不做任何动作。
  59.         }
  60.         distance=num*cm_per_num/2;   //计算距离,单位CM
  61.         num=0;
  62.                
  63. }

  64. void datapros()                         //对取得的距离进行处理
  65. {
  66.         float a= distance*100;       
  67.         DisplayData[0]=smgduan[(int)a%10];
  68.         DisplayData[1]=smgduan[(int)a%100/10];
  69.         DisplayData[2]=smgduan[(int)a%1000/100]+0x80;         //数字+小数点
  70.         DisplayData[3]=smgduan[(int)a%10000/1000];
  71.         DisplayData[4]=smgduan[(int)a/10000];       
  72.                
  73. }

  74. void DigDisplay()                           //数码管显示
  75. {
  76.         uchar i;
  77.         for(i=0;i<6;i++)
  78.         {
  79.                 switch(i)         //位选,选择点亮的数码管,
  80.                 {
  81.                         case(0):
  82.                                 LSA=0;LSB=0;LSC=0; break;//显示第0位
  83.                         case(1):
  84.                                 LSA=1;LSB=0;LSC=0; break;//显示第1位
  85.                         case(2):
  86.                                 LSA=0;LSB=1;LSC=0; break;//显示第2位
  87.                         case(3):
  88.                                 LSA=1;LSB=1;LSC=0; break;//显示第3位
  89.                         case(4):
  90.                                 LSA=0;LSB=0;LSC=1; break;//显示第4位
  91.                         case(5):
  92.                                 LSA=1;LSB=0;LSC=1; break;//显示第5位
  93.                 }
  94.                 P0=DisplayData[i];//发送段码
  95.                 delay1ms(1); //间隔一段时间扫描       
  96.                 P0=0x00;//消隐
  97.         }
  98. }

  99. void main()
  100. {
  101.         while(1)
  102.         {
  103.                 TimerInit();
  104.                 value_distance();
  105.                 datapros();
  106.                 DigDisplay();
  107.         }
  108. }
复制代码

这是我以前写的,测试过,是可以正常工作,并显示距离的。

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

Powered by 单片机教程网

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