求助: 有哪位大侠知道使用超声波测距模块
我想用超声波测距模块做一个避障小车,要求测得障碍物在前方10cm时。输出一个电平,送到单片机处理。。。。。麻烦给个c程序。还有,怎样修改测量的距离?假如我让他在5cm时就可以输出一个电平,在程序上怎样写?(不好意思 ,分不多了。)
最佳答案
回答者:网友
#include"sst89e516.h"
#include"SMC162.H"
#include <stdio.h>
#include "math.h"
#include "binary.h"
#include "intrins.h"
#define trig P1_0 //脉冲产生端口
/******************系统全局变量***************/
typedef unsigned char uchar;
typedef unsigned int uint;
bit Success; //测量成功标志位
bit Done; //测量完成标志位
bit Mode; //测量模式:0--近距离,1---远距离
uint nCount;
float nResult;
/***********超声波测量相关函数定义***************/
void StartInit();
void Delay_us(uint i); //微秒级延时:T=7+2*(X-1) us
void StartMeasure();
void DisplayResult();
void ConvertCount();
void Delay_ms(uint x);
////////////////////////主函数////////////////////////////////
void main()
{
unsigned long Sum;
uchar i;
uchar num;
bit bOK;
TCON=0x05; //INT0 INT1下降沿触发
TMOD=0X01; //T0作为计数输入
IP=0x00; //置INT1优先级最高
LcdInit();
while(1) //测量系统主循环
{
bOK=0;
num=0;
Sum=0;
for(i=1; i<=3; ++i) //循环测量,求平均值
{
StartInit(); //测量初始化
StartMeasure(); //开始测量第1次,确定大概范围
if(Success==1)
{
bOK=1; //有1次成功,则测距成功
Sum=(nCount>Sum)?nCount:Sum; //取测量最大值
}
Delay_ms(80); //延时10ms后继续测量
}
nCount=Sum;
Success=bOK;
DisplayResult();
}
}
/***************所用到的相关函数功能实现*****************/
void INT_0() interrupt 0 //运行到此处说明echo产生回波
{
TR0=1; //关计数
ET0=1; //关定时器中断
EX0=0; //关INT0中断
Done=1;
}
void INT_T0() interrupt 1
{
//运行到此处说明测距失败
TR0=0;
EX0=0;
EX1=0;
Success=0;
Done=1;
}
void INT_1() interrupt 2
{
TR0=0;
ET0=0;
EX1=0;
nCount=TH0;
nCount=nCount<<8;
nCount=nCount|TL0;
Success=1;
Done=1;
}
void StartInit()
{
TH0=0;
TL0=0; //计数器置0
trig=0;
EA=0; //开总中断
ET0=0; //关T0中断
EX0=0; //关INT0中断
EX1=0;
Success=0; //测量成功标志位
Done=0; //测量一次标志位
}
void StartMeasure()
{
trig=0;
trig=1;
Delay_us(5);
trig=0;
EX0=1;
EX1=1;
while(Done==0);
}
void DisplayResult()
{
float temp=0;
char String[10];
if(Success==1) //测距成功,显示“成功”,并显示距离
{
temp=nCount*184e-3; // 算出距离
sprintf(String," d= %6.2f mm",temp); //将整数转换为字符串
PutStr(0,0,String);
Delay_ms(50);
}
else //测距失败,显示“失败”提示
{
PutStr(0,4," --Fail-- ");
}
}
void Delay_ms(uint x) //12M环境下延时1ms
{
uchar j;
while(x--)
{
for(j=0;j<125;j++);
}
}
void Delay_us(uint i) //微秒级延时:T=7+2*(X-1) us
{
while(--i);
}
程序如下:(显示函数没有问题)