超声波测距模块使用?
请大神写一个最简单的使用超声波控制LED亮灭的程序……#include<AT89X51.H>#include<intrins.h>sbitLED=P0^0;sbitENL...
请大神写一个最简单的使用超声波控制LED亮灭的程序……
#include <AT89X51.H>
#include <intrins.h>
sbit LED = P0^0;
sbit ENLED = P1^4;
sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit RX = P3^1;
sbit TX = P3^0;
unsigned int time=0;
long S=0;
void Delay(int num);
/******************************************************************************/
void Conut(void)
{
time=TH0*256+TL0;
TH0=0;
TL0=0;
S=time*1.87/100; //算出来是CM 11.0592M晶振
}
/********************************************************/
void delayms(unsigned int ms)
{
unsigned char i=100,j;
for(;ms;ms--)
{
while(--i)
{
j=10;
while(--j);
}
}
}
/********************************************************/
void StartModule() //T1中断用来扫描数码管和计800MS启动模块
{
TX=1; //800MS 启动一次模块
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
TX=0;
}
/********************************************************/
void main(void)
{
ENLED = 0;
ADDR0 = 0; ADDR1 = 1; ADDR2 = 1; ADDR3 = 1;
TX=0;RX=0;
TMOD=0x01; //设T0为方式1,GATE=1
TH0=0;
TL0=0;
TR0=1;
while(1)
{
StartModule();
while(!RX); //当RX为零时等待
TR0=1; //开启计数
while(RX); //当RX为1计数并等待
TR0=0; //关闭计数
Conut();
if(S>=10) LED = 0; //LED = 0;小灯会亮……
delayms(80); //80MS
}
}
哪里不对吗???? 展开
#include <AT89X51.H>
#include <intrins.h>
sbit LED = P0^0;
sbit ENLED = P1^4;
sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit RX = P3^1;
sbit TX = P3^0;
unsigned int time=0;
long S=0;
void Delay(int num);
/******************************************************************************/
void Conut(void)
{
time=TH0*256+TL0;
TH0=0;
TL0=0;
S=time*1.87/100; //算出来是CM 11.0592M晶振
}
/********************************************************/
void delayms(unsigned int ms)
{
unsigned char i=100,j;
for(;ms;ms--)
{
while(--i)
{
j=10;
while(--j);
}
}
}
/********************************************************/
void StartModule() //T1中断用来扫描数码管和计800MS启动模块
{
TX=1; //800MS 启动一次模块
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
TX=0;
}
/********************************************************/
void main(void)
{
ENLED = 0;
ADDR0 = 0; ADDR1 = 1; ADDR2 = 1; ADDR3 = 1;
TX=0;RX=0;
TMOD=0x01; //设T0为方式1,GATE=1
TH0=0;
TL0=0;
TR0=1;
while(1)
{
StartModule();
while(!RX); //当RX为零时等待
TR0=1; //开启计数
while(RX); //当RX为1计数并等待
TR0=0; //关闭计数
Conut();
if(S>=10) LED = 0; //LED = 0;小灯会亮……
delayms(80); //80MS
}
}
哪里不对吗???? 展开
3个回答
展开全部
一、超声波测距模块的类型
超声波测距模块有好多种类型,目前比较常用的有URM37,超声波传感器默认是232接口,可以调为TTL接口,URM05大功率超声波传感器测试距离能到10米,算是目前来说测试距离比较远的一款了。
另外还有比较常用的国外的几款SRF系列的超声波模块。
二、超声波测距模块的精确度
精确度:目前的超声波模块精度能到1cm
三、超声波测距的原理
超声波在空气中传播速度为每秒钟340米(15℃时)。X2是声波返回的时刻,X1是声波发声的时刻,X2-X1得出的是一个时间差的绝对值,假定X2-X1=0.03S,则距离为340mx0.03S=10.2米。这就是超声波探头到反射物体之间的距离。
四、超声波测距的应用
超声波测距,可应用于汽车倒车、建筑施工工地以及一些工业现场的位置监控,也可用于如液位、井深、管道长度的测量等场合。
测量时与被测物体无直接接触,能够清晰稳定地显示测量结果。
瑞地测控
2024-08-12 广告
2024-08-12 广告
4D毫米波雷达测试是苏州瑞地测控技术有限公司在智能驾驶领域的前沿探索。我们专注于评估雷达在三维空间定位基础上,增加时间维度的感知能力,即速度、方向、距离及高度的精准测量。通过模拟复杂交通场景,测试雷达的抗干扰性、目标识别精度及实时数据处理能...
点击进入详情页
本回答由瑞地测控提供
展开全部
要不自己仿真一下,要不一点一点指令加进去。这样才能提高自己的能力。
追问
这个程序我调了两三个小时了,但是就是没有结果……超声波模块的程序没错吧?
追答
一个刚开始接触单片机软件的人,一个程序调个三五天是很正常的。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
实物演示超声波测距模块的使用,采用Arduino进行超声波测距非常简单
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询