超声波测距模块使用?
请大神写一个最简单的使用超声波控制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-10-18 广告
2024-10-18 广告
近红外仪器的选择需要考虑以下几个因素:1. 波长范围:选择合适的波长范围,以满足分析的需求。通常,近红外光谱仪器的波长范围在0.8-1000纳米之间。2. 分辨率:近红外光谱仪器的分辨率决定了可以分析的最小波长差异。分辨率越高,仪器可以分析...
点击进入详情页
本回答由博尔仪器仪表提供
展开全部
要不自己仿真一下,要不一点一点指令加进去。这样才能提高自己的能力。
追问
这个程序我调了两三个小时了,但是就是没有结果……超声波模块的程序没错吧?
追答
一个刚开始接触单片机软件的人,一个程序调个三五天是很正常的。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
实物演示超声波测距模块的使用,采用Arduino进行超声波测距非常简单
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询