超声波测距模块:HS-SR04。测距的时候,无论朝那个方向,显示的距离都在一个数值附近微小变动。
数码管显示模块肯定没有问题,下面是测距模块代码,感觉也没有问题。是不是HS-SR04坏了呢。//接线:模块TRIG接P1.2ECH0接P1.1/*************...
数码管显示模块肯定没有问题,下面是测距模块代码,感觉也没有问题。是不是HS-SR04坏了呢。
//接线:模块TRIG接 P1.2 ECH0 接P1.1
/****************************************************************************************************/
#include <AT89x51.H> //器件配置文件
#include <intrins.h>
#define RX P1_1
#define TX P1_2
unsigned int time=0;
unsigned int timer=0;
unsigned long S=0;
bit flag =0;
/********************************************************
/********************************************************/
int Count(void)
{
time=(TH0*256+TL0)/(12/11.0592);
TH0=0;
TL0=0;
S=(time*1.7)/100; //算出来是CM
if((S>=700)||flag==1) //超出测量范围显示“0”
{
flag=0;
S = 0;
}
return S;
}
/********************************************************/
void zd0() interrupt 1 //T0中断用来计数器溢出,超过测距范围
{
flag=1; //中断溢出标志
}
/********************************************************/
void zd3() interrupt 3 //T1中断用来计800MS启动模块
{
TH1=0xf8;
TL1=0x30;
timer++;
if(timer>=400)
{
timer=0;
TX=1; //800MS 启动一次模块
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
TX=0;
}
}
/*********************************************************/
void main(void) //主函数
{
unsigned int dis; //距离
TMOD=0x11; //设T0为方式1,GATE=1;
TH0=0;
TL0=0;
TH1=0xf8; //2MS定时
TL1=0x30;
ET0=1; //允许T0中断
ET1=1; //允许T1中断
TR1=1; //开启定时器
EA=1; //开启总中断
while(!RX);//当RX为零时等待
TR0=1; //开启计数
while(RX);//当RX为1计数并等待
TR0=0;//关闭计数
dis = Count();//计算
} 展开
//接线:模块TRIG接 P1.2 ECH0 接P1.1
/****************************************************************************************************/
#include <AT89x51.H> //器件配置文件
#include <intrins.h>
#define RX P1_1
#define TX P1_2
unsigned int time=0;
unsigned int timer=0;
unsigned long S=0;
bit flag =0;
/********************************************************
/********************************************************/
int Count(void)
{
time=(TH0*256+TL0)/(12/11.0592);
TH0=0;
TL0=0;
S=(time*1.7)/100; //算出来是CM
if((S>=700)||flag==1) //超出测量范围显示“0”
{
flag=0;
S = 0;
}
return S;
}
/********************************************************/
void zd0() interrupt 1 //T0中断用来计数器溢出,超过测距范围
{
flag=1; //中断溢出标志
}
/********************************************************/
void zd3() interrupt 3 //T1中断用来计800MS启动模块
{
TH1=0xf8;
TL1=0x30;
timer++;
if(timer>=400)
{
timer=0;
TX=1; //800MS 启动一次模块
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
TX=0;
}
}
/*********************************************************/
void main(void) //主函数
{
unsigned int dis; //距离
TMOD=0x11; //设T0为方式1,GATE=1;
TH0=0;
TL0=0;
TH1=0xf8; //2MS定时
TL1=0x30;
ET0=1; //允许T0中断
ET1=1; //允许T1中断
TR1=1; //开启定时器
EA=1; //开启总中断
while(!RX);//当RX为零时等待
TR0=1; //开启计数
while(RX);//当RX为1计数并等待
TR0=0;//关闭计数
dis = Count();//计算
} 展开
2个回答
展开全部
测距有细微的波动,在超声测距里面是非常正常的。
更多追问追答
追问
问题是:无论朝着那个方向,测的的距离都没多少变化,应该有很大的变化才对啊
追答
那你要先查查硬件,看看出来的信号有没有变化,如果信号是正常的,然后再看软件的问题。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
艾因蒂克
2024-11-28 广告
2024-11-28 广告
超声阵列探头是艾因蒂克科技(上海)有限公司在超声检测领域的一项重要技术产品。它采用先进的阵列设计,能够显著提高超声检测的精度和效率。该探头通过多个超声传感器的协同工作,实现对被检测物体的全方位、多角度扫描,从而更准确地发现物体内部的缺陷和问...
点击进入详情页
本回答由艾因蒂克提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询