搜索
bottom↓
回复: 3

关于超声波测距问题,好人好报,在线等。。

[复制链接]

出0入0汤圆

发表于 2013-5-19 14:41:32 | 显示全部楼层 |阅读模式
这次做了一个用51控制的超声波测距东西,关于超声波收发模块是自己做的,不是买的。但是做出来之后测量一点都不准确,我自己找出的原因应该有两点,一是超声波收发接头在电路板上没有放平整,存在角度,所以误差大。二是程序问题。但是最终还是需要大神判定到底是啥问题,我是菜鸟,希望大神能解答,好人好报。。。附上代码。。

#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint  unsigned int

sbit csb=P3^7  ;  //超声波发射端
sbit light=P3^5;
sbit beep=P3^6 ;
uchar t=0;        //总时间
uint s=0;          //单程距离
uchar flag=0;      //接收标志
uchar code led[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};//0到9的代码
sbit qian=P2^0;
sbit  bai=P2^1;
sbit  shi=P2^2;
sbit  ge=P2^3;
uint xianshi[4];                 //装千位 百位  十位 个位
void delay_50us(uint t)
{
uchar j;
for(;t>0;t--)
for(j=19;j>0;j--);
  }

void delay(uint j)
{
  while(j--);
}

void init_timer0()
{
  TMOD=0x11;                        //方式1 16位
  TH0=0;
  TL0=0;
  ET0=1;
  TR0=0;          // 先把计时启动关掉
  }
void display(uint z)
{
xianshi[3]=z/1000;                          //千位
xianshi[2]=z/100%10;                  //百位
xianshi[1]=z/10%10;                  //十位
xianshi[0]=z%10;                          //个位

qian=0;
P0=led[xianshi[3]];
delay(100);
qian=1;
delay(100);

bai=0;
P0=led[xianshi[2]];
delay(100);
bai=1;
delay(100);

shi=0;
P0=led[xianshi[1]];
delay(100);
shi=1;
delay(100);

ge=0;
P0=led[xianshi[0]];
delay(100);
ge=1;
delay(100);
}
void int0() interrupt 0   /**外部中断0服务子程序***/
{
   EX0=0;
   TR0=0;
   EA=0;
   t=TH0*256+TL0-100;          //全程时间
   TH0=0;
   TL0=0;
   flag=1;                 //成功接收标志
  }
void overtime() interrupt 1  /*超时清零。计满65ms,46ms时已达到8超出量程*/
{
  EA=0;
  TH0=0;
  TL0=0;
  EX0=0;
  TR0=0;
  ET0=0;
  flag=2;       //接收失败 超出量程接收
}
void csb_Tx()                         /**超声波发送 42khz**/
{
  uchar i;
  for(i=8;i>0;i--)                          //发送4个方波
  {
    csb=!csb;
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
   }
   csb=1; //关发送
   EA=1;
   EX0=1;
   ET0=1;
  }

void main()
{
  uchar h;
  EA=1;
  EX0=1;        //开外部中断0
  IT0=1;    //下降沿触发
  init_timer0();
  while(1)
{
  csb_Tx();          //发送超声波  
  delay_50us(2);    //延时100us 以免回收超声波
  TR0=1;            //开始计时
  while(flag==0);    //等待接收
  if(flag==1)
  {
    s=(0.17*t);          //计算是厘米
        flag=0;
        for(h=0;h<50;h++)
        {
         display(s);
         }
   }
  else if(flag==2)
  {
          s=0;
        for(h=0;h<20;h++)
         {
          display(s);
          }
        flag=0;
     }
   }
  
}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2013-5-19 17:29:23 | 显示全部楼层
没有人? 哎 还是自己折腾吧

出0入0汤圆

发表于 2013-5-20 10:09:42 | 显示全部楼层
感觉那两个中断函数有问题

出0入0汤圆

 楼主| 发表于 2013-5-20 10:30:53 | 显示全部楼层
zjk 发表于 2013-5-20 10:09
感觉那两个中断函数有问题

哪里有问题 我实在找不出问题所在。。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 16:19

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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