51单片机实现超声波测距
时间:10-02
整理:3721RD
点击:
我在网上买的郭天祥的板子学习单片机,在做超声波测距时,障碍物离超声波模块太近显示600多cm,这是什么原因呢?第一次发帖,求大神指教!#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit trig=P1^7;
sbit echo=P1^6;
sbit dula=P2^6;
sbit wela=P2^7;
sbit lcden=P3^4;
sbit lcdrs=P3^5;
uint bai,shi,ge,time,s;
void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void initHC()
{
trig=0;
echo=0;
}
void initt0()
{
TMOD=0x01;
TH0=0;
TL0=0;
EA=1;
ET0=1;
}
uint distance()
{
time=TH0*256+TL0;
TH0=0;
TL0=0;
s=time*0.01853;
return s;
}
void lcd_com(uchar com)
{
lcdrs=0;
P0=com;
delayms(5);
lcden=1;
delayms(5);
lcden=0;
}
void lcd_date(uchar date)
{
lcdrs=1;
P0=date;
delayms(5);
lcden=1;
delayms(5);
lcden=0;
}
void initlcd()
{
dula=0;
wela=0;
lcden=0;
lcd_com(0x38);
lcd_com(0x0c);
lcd_com(0x06);
lcd_com(0x01);
}
void main()
{
initlcd();
initt0();
initHC();
while(1)
{
trig=1;
_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();
trig=0;
while(echo==0);
TR0=1;
while(echo==1);
TR0=0;
distance();
bai=s/100%10;
shi=s/10%10;
ge=s%10;
lcd_com(0x80);
lcd_date('D');
lcd_date('i');
lcd_date('s');
lcd_date('t');
lcd_date('a');
lcd_date('n');
lcd_date('c');
lcd_date('e');
lcd_com(0x80+0x46);
lcd_date(0x30+bai);
lcd_date(0x30+shi);
lcd_date(0x30+ge);
lcd_date('c');
lcd_date('m');
delayms(1000);
}
}
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit trig=P1^7;
sbit echo=P1^6;
sbit dula=P2^6;
sbit wela=P2^7;
sbit lcden=P3^4;
sbit lcdrs=P3^5;
uint bai,shi,ge,time,s;
void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void initHC()
{
trig=0;
echo=0;
}
void initt0()
{
TMOD=0x01;
TH0=0;
TL0=0;
EA=1;
ET0=1;
}
uint distance()
{
time=TH0*256+TL0;
TH0=0;
TL0=0;
s=time*0.01853;
return s;
}
void lcd_com(uchar com)
{
lcdrs=0;
P0=com;
delayms(5);
lcden=1;
delayms(5);
lcden=0;
}
void lcd_date(uchar date)
{
lcdrs=1;
P0=date;
delayms(5);
lcden=1;
delayms(5);
lcden=0;
}
void initlcd()
{
dula=0;
wela=0;
lcden=0;
lcd_com(0x38);
lcd_com(0x0c);
lcd_com(0x06);
lcd_com(0x01);
}
void main()
{
initlcd();
initt0();
initHC();
while(1)
{
trig=1;
_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();
trig=0;
while(echo==0);
TR0=1;
while(echo==1);
TR0=0;
distance();
bai=s/100%10;
shi=s/10%10;
ge=s%10;
lcd_com(0x80);
lcd_date('D');
lcd_date('i');
lcd_date('s');
lcd_date('t');
lcd_date('a');
lcd_date('n');
lcd_date('c');
lcd_date('e');
lcd_com(0x80+0x46);
lcd_date(0x30+bai);
lcd_date(0x30+shi);
lcd_date(0x30+ge);
lcd_date('c');
lcd_date('m');
delayms(1000);
}
}
表面不平整的障碍物在远距离对测距没有什么影响,但如果太近就会导致声波漫反射,有这种说法,我也并不是特别确定,你找个平整的障碍物再试试。
可能是离得太近了吧
Lih厉害
这种超声波模块距离太近也是不准确的,好像是低于1cm后是不准确的
谢谢,我找到原因了,超声波模块测距有范围限制。
新手,刚学51单片机
毕业设计做的就是超声波测距。