- 超声波测距
- time=timeH*256+timeL;
distance=time*0.0172; //厘米
0.0172怎么来的 , distance怎么来的
求具体转换过程,只要真心,一定采纳
2013-11-23 11:03:17
376
1
- 超声波测距模块
- 1——超声波模块测距的有效距离是多少?模块的有效距离与什么有关?2——怎样在一个单片机上同时使用几个频率不同的超声波模块(注意是完全同时工作)?是不是使用频率不同的模块就可... 1——超声波模块测距的有效距离是多少?模块的有效距离与什么有关?
2——怎样在一个单片机上同时使用几个频率不同的超声波模块(注意是完全同时工作)?是不是使用频率不同的模块就可以?如果是的话,那推荐一下每个模块的频率(同时使用3-4个)。 展开
2012-10-18 09:17:21
588
3
- 超声波测距原理
- 找了Z短的程序还是看不懂,怎么感觉这程序是在测回波的时间而不是测发波与回波的时间 //超声波模块程序 #include #define uchar unsigned char #define uint unsigned int code table[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6... 找了Z短的程序还是看不懂,怎么感觉这程序是在测回波的时间而不是测发波与回波的时间
//超声波模块程序
#include
#define uchar unsigned char
#define uint unsigned int
code table[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar chenggong,shijianL,shijianH;
sbit fashe = P1^0;
sbit huibo = P3^2;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
//
void delay_20us()
{
uchar a ;
for(a=0;a<100;a++);
}
//***************************************************************
//显示数据转换程序
//***************************************************************
void main()
{
uint juli,shijian;
fashe=0; //首先拉低脉冲输入引脚
EA=1; //打开总中断0
TMOD=0x10; //定时器1,16位工作方式
while(1)
{
EA=0; //关总中断
fashe=1; //超声波输入端
delay_20us(); //延时20us
fashe=0; //产生一个20us的脉冲
while(huibo==0); //等待p32回波引脚变高电平
chenggong=0; //清测量成功标志
EA=1;
EX0=1; //打开外部中断0
TH1=0; //定时器1清零
TL1=0; //定时器1清零
TF1=0; //计数溢出标志
TR1=1; //启动定时器1
delay(20); //等待测量的结果
TR1=0; //关闭定时器1
EX0=0; //关闭外部中断0
if(chenggong==1)
{
shijian=shijianH*256+shijianL;
juli=shijian*0.172; //厘米
P0=0;
P0=table[juli/100];
P2=5;
delay(1);
P0=0;
P0=table[(juli%100)/10];
P2=6;
delay(1);
P0=0;
P0=table[(juli%100)%10];
P2=7;
delay(1);
}
if(chenggong==0)
{
juli=0;//没有回波则清零
}
}
}
//***************************************************************
//外部中断0,用做判断回波电平
void zhongduan() interrupt 0 //外部中断0
{
shijianH =TH1; //取出定时器的值
shijianL =TL1; //取出定时器的值
chenggong=1;//至成功测量的标志
EX0=0; //关闭外部中断
}
//****************************************************************
//定时器1中断,用做超声波测距计时
void dingshiqi() interrupt 3 //
{
TH1=0;
TL1=0;
} 展开
2013-05-18 08:32:56
414
2
- 超声波测距公式
-
2011-09-01 08:10:36
558
3
- 超声波测距传感器型号
- 我想在停车位地上装一个传感器,当有车停入进去的时候,能检测出该停车位上有车,能适应室内室外的环境,求大神帮助一下!
2015-11-30 13:53:10
349
1
- 超声波测距论文答辩ppt
- 看到的速度回答下 明天上午就要答辩了 迟了就没用了
2016-07-10 18:47:25
414
1
- 超声波测距程序问题
- #include #define uchar unsigned char #define uint unsigned int #define ulong unsigned long sbit Tx = P3^3; //产生脉冲引脚 sbit Rx = P3^2; //回波引脚 uchar code SEG7[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0... #include
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
sbit Tx = P3^3; //产生脉冲引脚
sbit Rx = P3^2; //回波引脚
uchar code SEG7[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
uint distance[4]; //测距接收缓冲区
uchar ge,shi,bai,temp,flag,outcomeH,outcomeL,i;
bit succeed_flag; //测量成功标志
void conversion(uint temp_data);
void delay_20us();
void main(void) // 主程序
{ uint distance_data,a,b;
uchar CONT_1;
i=0;
flag=0;
Tx=0; //首先拉低脉冲输入引脚
TMOD=0x11; //定时器0,定时器1,16位工作方式
TR0=1; //启动定时器0
IT0=0; //由高电平变低电平,触发外部中断
ET0=1; //打开定时器0中断
EX0=0; //关闭外部中断
EA=1; //打开总中断0
while(1) //程序循环
{
EA=0;
Tx=1;
delay_20us();
Tx=0; //产生一个20us的脉冲,在Tx引脚
while(Rx==0); //等待Rx回波引脚变高电平
succeed_flag=0; //清测量成功标志
EX0=1; //打开外部中断
TH1=0; //定时器1清零
TL1=0; //定时器1清零
TF1=0; //
TR1=1; //启动定时器1
EA=1;
》》 while(TH1 < 30);//等待测量的结果,周期65.535毫秒(可用中断实现)
TR1=0; //关闭定时器1
EX0=0; //关闭外部中断
if(succeed_flag==1)
{
distance_data=outcomeH; //测量结果的高8位
distance_data<<=8; //放入16位的高8位
distance_data=distance_data|outcomeL;//与低8位合并成为16位结果数据
distance_data*=12; //因为定时器默认为12分频
distance_data/=58; //微秒的单位除以58等于厘米
}
if(succeed_flag==0)
{
distance_data=0; //没有回波则清零
}
distance[i]=distance_data; //将测量结果的数据放入缓冲区
i++;
if(i==3)
{
distance_data=(distance[0]+distance[1]+distance[2]+distance[3])/4;
a=distance_data;
if(b==a) CONT_1=0;
if(b!=a) CONT_1++;
if(CONT_1>=3)
{ CONT_1=0;
b=a;
conversion(b);
}
i=0;
}
}
}
INTO_() interrupt 0 // 外部中断是0号
{
outcomeH =TH1; //取出定时器的值
outcomeL =TL1; //取出定时器的值
succeed_flag=1; //至成功测量的标志
EX0=0; //关闭外部中断
}
timer0() interrupt 1 // 定时器0中断是1号
{
TH0=0xfd; //写入定时器0初始值
TL0=0x77;
switch(flag)
{case 0x00:P0=ge; P2=0x7f;flag++;break;
case 0x01:P0=shi;P2=0xbf;flag++;break;
case 0x02:P0=bai;P2=0xdf;flag=0;break;
}
}
老感觉它是超声波发送又接收完才开的定时器1,但运行结果确是对的,看不懂while(TH1 < 30);,求解,注:P3.2也是外中断0的地址 展开
2012-07-17 06:51:21
524
2
- 超声波测距的原理
-
2018-11-22 20:39:35
387
0
- 超声波测距模块两次测距Z短间隔
-
2012-07-25 02:10:55
358
2
- 超声波测距传感器 哪家好
-
2016-12-25 00:40:44
592
2
- 超声波测距传感器盲区问题
- 1:超声波测距传感器,探头:FUS-110A,实验时裸板测试没发现盲区扩大的问题,灌封后探头与金属外壳无接触,隔离距离2mm左右,用示波器观察波形正常工作,手接触外壳,无影响,工作将近2小时后,盲区扩大(有温度补偿)。 2:灌封后探头处重新灌封硅凝胶,盲区... 1:超声波测距传感器,探头:FUS-110A,实验时裸板测试没发现盲区扩大的问题,灌封后探头与金属外壳无接触,隔离距离2mm左右,用示波器观察波形正常工作,手接触外壳,无影响,工作将近2小时后,盲区扩大(有温度补偿)。
2:灌封后探头处重新灌封硅凝胶,盲区扩大很明显,用手接触,影响波形。 展开
2013-05-15 08:27:57
471
1
- 超声波测距原理的应用??
-
2016-04-25 11:03:38
316
1
- 如何提高超声波测距距离?
- 用51单片机做处理器, 超声波发射电路用74HC04做驱动,间断地产生40KHz方波,Vp-p约为10V, 接收部分用CX20106处理接收。 ---------------- 定时器用方式1.理论计算测距可达11米多; 而实测距离为1米左右,再远就没有回波了. Vp-p已有10V了,测距应该不止1米才... 用51单片机做处理器,
超声波发射电路用74HC04做驱动,间断地产生40KHz方波,Vp-p约为10V,
接收部分用CX20106处理接收。
----------------
定时器用方式1.理论计算测距可达11米多;
而实测距离为1米左右,再远就没有回波了.
Vp-p已有10V了,测距应该不止1米才对吧,软件也没限制此距离了.
有人做过此系统吗,Z大可以达多少米呢?有什么方法可以解决,以增加距离? 展开
2011-07-07 03:35:52
581
4
- 超声波测距方法有哪些
-
2017-04-27 15:17:17
345
1
- 超声波测距的发展历程
- 谁能给个比较详细的说明,超声波的发展或者国内外背景……急!!!!!!!
2018-04-18 06:47:39
352
1
- 超声波测距读不出数
- #include #define uint unsigned int #define uchar unsigned char #define ulong unsigned long #define _nop_ #define K P0 sbit du=P2^6; sbit we=P2^7; sbit Trig=P2^0; sbit Echo=P2^1; uchar code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x... #include
#define uint unsigned int
#define uchar unsigned char
#define ulong unsigned long
#define _nop_
#define K P0
sbit du=P2^6;
sbit we=P2^7;
sbit Trig=P2^0;
sbit Echo=P2^1;
uchar code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uint dis,H=10;L=0;
uchar flag=0,high_time,low_time,m=0;
uchar qian,bai,shi,ge;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void delay_20us()
{
uchar a;
for(a=0;a<50;a++);
}
void xian_shi(uchar num)
{
qian=num/1000;
bai=num/1000%100;
shi=num/10;
ge=num%10;
we=1;
P0=0xfe;
we=0;
P0=0xff;
du=1;
P0=tab[qian];
du=0;
delay(5);
we=1;
P0=0xfb;
we=0;
P0=0xff;
du=1;
P0=tab[bai];
du=0;
delay(5);
we=1;
P0=0xfd;
we=0;
P0=0xff;
du=1;
P0=tab[shi];
du=0;
delay(5);
we=1;
P0=0xf7;
we=0;
P0=0xff;
du=1;
P0=tab[ge];
du=0;
delay(5);
}
/***************超声波测量函数*******************/
void ce()
{
uchar i;
float temp;
TH0=1;
TL0=0;
TR0=1;
for(i=8;i>0;i--)
{
Trig=!Trig;
_nop_;_nop_;_nop_;
_nop_;_nop_;_nop_;
_nop_;_nop_;_nop_;
}
Trig=1;
delay(5);
EX0=1; //开中断
if(flag==1) //中断标志位置,说明有回波
{
temp=high_time*256+low_time;
temp=(temp/1000)/2;
temp*=340;
temp=temp/10;
dis=(unsigned int)temp;
flag=0;
}
}
void time_init()
{
TMOD=0x01;
TH0=0;
TL0=0; //设定T0的工作模式为,装初值
EA=1;
IT0=1; //下降沿有效,左传感器,INT1为调边沿触发
}
void main()
{
time_init();
while(1)
{
ce(); //发送超声波信号测距
xian_shi(dis); //显示距离
}
}
void timer0() interrupt 1
{
uint tmp;
TR0=0; //关闭定时器
ET0=0; //关闭外部中断
flag=1; //置位标志位
tmp=TH0*256+TL0; //读取定时器的值
if((tmp>0)&&(tmp<60000)) //判断是否超出范围
{
high_time=TH0;
low_time=TL0;
}
else
{
high_time=0;
low_time=0;
}
}
展开
2014-04-07 22:50:28
320
2
- arduino 超声波测距 怎么用
-
2016-10-29 11:15:09
250
1
- 超声波测距原理及公式
-
2010-08-16 17:39:40
553
2
- 超声波测距和红外测距各自的优缺点优缺点
- 测量距离在两米以内,在程序的可操作性以及硬件设备Z便利方面两个测距模块各自的优缺点
2017-09-08 03:48:29
1184
1
- 跪求。。。现代测距理论和超声波测距的意义
- 现在在做毕设!达不到工作量,还查几页!哪位大哥大姐!给我点东西啊!Z好是多介绍些现代测距技术!
2010-05-22 19:55:10
527
2
参与评论
登录后参与评论