导航:首页 > 操作系统 > 51单片机的超声波测距

51单片机的超声波测距

发布时间:2022-08-30 07:09:55

㈠ 51单片机外围模块中,超声波测距模块上 STC11 芯片是什么STC11、TL074和MAX232的作用都是什么

STC11是一款STC单片机(STC单片机的一个系列,而不是一个具体的单片机型号),在这里的作用是根据收到的发送信号TRIG,发送一端超声波波形给MAX232;还有个作用是根据接收到的超声波波形,返回一段ECHO信号。
MAX232在这里做电平转换,因为单片机给的波形是TTL波形,这里要转换电平,提高发射功率。
TL074应该是对接收的超声波波形进行滤波、放大、解调之类的

㈡ 51单片机超声波测距1602显示

以前做了一个数码管显示的超声波测距,你可以参考一下:
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar code ledtab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0-9
uchar scanled,cnt1,cnt2,flasht=100;
uchar disdat[4];
uint time,alarml=588; //20cm时间为588个周期
uint ss;
bit flag=0;
sbit led=P1^4;
sbit out=P1^0;
sbit in=P1^1;
void dischg()
{
disdat[0]=ss%10;
disdat[1]=(ss/10)%10;
disdat[2]=(ss/100)%10;
disdat[3]=(ss/1000)%10;
}
void send40k(void)
{
uchar i;
for(i=0;i<10;i++)
{
out=0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
out=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
}
void t0isr() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
time++;
}
void t1isr() interrupt 3 //显示
{
TH1=(65536-10000)/256;
TL1=(65536-10000)%256;
cnt1++;
cnt2++;
if(cnt1>=100)
{
cnt1=0;
flag=1;
}
if(cnt2>=flasht)
{
cnt2=0;
led=~led;
}
switch(scanled)
{
case 0:
P2=0x01;
P0=0xff;
P0=~ledtab[disdat[3]];
break;
case 1:
P2=0x02;
P0=~ledtab[disdat[2]];
break;
case 2:
P2=0x04;
P0=~ledtab[disdat[1]];
break;
case 3:
P2=0x08;
P0=~ledtab[disdat[0]];
break;
default:break;
}
scanled++;
scanled%=4;
}
main()
{
unsigned long int T;
TMOD=0x11;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TH1=(65536-10000)/256;
TL1=(65536-10000)%256;
TR1=1;
ET0=1;
ET1=1;
EA=1;
scanled=0;
time=0;
ss=9999;
dischg();
while(1)
{
if(flag)
{
flag=0;
send40k();
TR0=1;
in=1;
while(in);
TR0=0;
T=time*50000+TH0*256+TL0;
ss=T*10L/294L;
if(ss>588)flasht=100;
else flasht=20;
dischg();
}
}
}

㈢ 51单片机超声波测距代码是多少

1602液晶显示 的超声波模块程序
接口程序里边都有、、

#include<reg52.h>
//#include<delay.h>
#include <intrins.h>

#define uchar unsigned char
#define uint unsigned int

sbit lcdrs=P2^3;
sbit lcden=P2^2;
sbit trig=P2^0; //超声波发送
//sbit echo=P3^2; //超声波接受
//P0____________DB0-DB7
uchar dis[]="Disp_HC-SR04";
uchar num[]="0123456789";
uint distance;

void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=121;y>0;y--);
}

void HC_init()
{
TMOD=0x09;
TR0=1;
TH0=0;TL0=0;
}

uint HC_jisuan()
{
uint dist,timer;
timer=TH0;
timer<<=8;
timer=timer|TL0;
dist=timer/53; //晶振11.0592MHz 距离cm=微秒us/58
return dist; //1个机器周期是12个时钟周期 timer*12/(58*11.0592)=timer/53
}

void HC_run()
{
uint tempH=0x00,tempL=0x00;
TH0=0;TL0=0;
trig=0;
trig=1;
delay(1);
trig=0;
while((TH0-tempH!=0||TL0-tempL!=0)||(TH0==0&&TL0==0))
{
tempH=TH0;
tempL=TL0;
}
delay(1);
}

void lcd_write_com(uchar com) //LCD写指令
{
lcdrs=0;
P0=com;
delay(1);
lcden=1;
delay(1);
lcden=0;
}

void lcd_write_data(uchar date) //LCD写数据
{
lcdrs=1;
P0=date;
delay(1);
lcden=1;
delay(1);
lcden=0;
}

void lcd_init() //LCD初始化
{
lcden=0;
lcd_write_com(0x38);
lcd_write_com(0x0c);
lcd_write_com(0x06);
lcd_write_com(0x01);
}

void lcd_display(uchar temp)
{
uint i;

lcd_write_com(0x82);
for(i=0;i<12;i++)
{
lcd_write_data(dis[i]);
}

lcd_write_com(0x80+0x41);
lcd_write_data('D');
lcd_write_data('i');
lcd_write_data('s');
lcd_write_data('t');
lcd_write_data('a');
lcd_write_data('n');
lcd_write_data('c');
lcd_write_data('e');
lcd_write_data(':');
lcd_write_data(num[temp/100]);
lcd_write_data(num[temp/10%10]);
lcd_write_data(num[temp%10]);
lcd_write_data('c');
lcd_write_data('m');
}

void main()
{
lcd_init();
HC_init();
while(1)
{
HC_run();
distance=HC_jisuan();
lcd_display(distance);
delay(200);
}
}

㈣ 基于51单片机的超声波测距仪为什么只能测到1m远

这个和你的测距仪的测距电路有关。单片机只处理数据,不参与测量。
提高超声波测试距离的办法有三种:
1、降低超声波的频率;
2、加大超声波发射功率;
3、提高超声波接收的灵敏度,提高放大电路的增益;
如果用的是模块,要注意它的技术文档。

㈤ 51单片机超声波测距的问题

关键这个电路是硬件设计好就可以。做一个40khz的发射电路。。。用2051的一个io控制电源。。。动态扫描led显示
另外再做一个40khz的接收电路。。。二者频率对准。。。接收电路接收到发射信号的时候输出一个电压触发中断,先接通40khz发射电路的工作电压。。。单片机开始计时。。。等侍接收电路触发中断。当有中断。停止计时。。。
这个时间除以2再乘以超声波在空气中传播速度。应该就是等于你要测试的距离。。。
这是参考源代码,可能不全,仅作参考!
#include
#define
unit
unsigned
int
#define
uchar
unsigned
char
sbit
fs="p3"^0;
//发送端;
sbit
h="p3"^7;
sbit
l="p3"^5;
//数码管位选端;
sbit
m="p3"^4;
uchar
tab[16]=\{0x28,0xeb,0x32,0xa2,0xe1,0xa4,0x24,0xea,0x20,0xa0,0x60,0x25,0x3c,0x23,0x34,0x74};//段码;
uchar
u[3];
//显示数组;
unit
count,b;
void
delay(unit
a)
//延时;
\{
unit
m;
for(m=0;m
=300)
\{
b=(17*count)/1000;
u[0]=b%10;
u[1]=(b/10)%10;
u[2]=(b/100)%10;
display();
}
}
void
over()interrupt
1
//t0溢出为无效测量fff;
\{
u[0]=15;
u[1]=15;
u[2]=15;
display();
}
void
main()
\{
fs=0;
delay(8600);
th0=0;
tl0=0;
tmod=0x01;
tr0=1;
ea=1;
et0=1;
pt0=1;
tx();
it0=1;
ie=0x83;
}

㈥ 51单片机超声波测距代码

1602液晶显示 的超声波模块程序
接口程序里边都有、、

#include
//#include
#include

#define uchar unsigned char
#define uint unsigned int

sbit lcdrs=P2^3;
sbit lcden=P2^2;
sbit trig=P2^0; //超声波发送
//sbit echo=P3^2; //超声波接受
//P0____________DB0-DB7
uchar dis[]="Disp_HC-SR04";
uchar num[]="0123456789";
uint distance;

void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=121;y>0;y--);
}

void HC_init()
{
TMOD=0x09;
TR0=1;
TH0=0;TL0=0;
}

uint HC_jisuan()
{
uint dist,timer;
timer=TH0;
timer<<=8;
timer=timer|TL0;
dist=timer/53; //晶振11.0592MHz 距离cm=微秒us/58
return dist; //1个机器周期是12个时钟周期 timer*12/(58*11.0592)=timer/53
}

void HC_run()
{
uint tempH=0x00,tempL=0x00;
TH0=0;TL0=0;
trig=0;
trig=1;
delay(1);
trig=0;
while((TH0-tempH!=0||TL0-tempL!=0)||(TH0==0&&TL0==0))
{
tempH=TH0;
tempL=TL0;
}
delay(1);
}

void lcd_write_com(uchar com) //LCD写指令
{
lcdrs=0;
P0=com;
delay(1);
lcden=1;
delay(1);
lcden=0;
}

void lcd_write_data(uchar date) //LCD写数据
{
lcdrs=1;
P0=date;
delay(1);
lcden=1;
delay(1);
lcden=0;
}

void lcd_init() //LCD初始化
{
lcden=0;
lcd_write_com(0x38);
lcd_write_com(0x0c);
lcd_write_com(0x06);
lcd_write_com(0x01);
}

void lcd_display(uchar temp)
{
uint i;

lcd_write_com(0x82);
for(i=0;i<12;i++)
{
lcd_write_data(dis[i]);
}

lcd_write_com(0x80+0x41);
lcd_write_data('D');
lcd_write_data('i');
lcd_write_data('s');
lcd_write_data('t');
lcd_write_data('a');
lcd_write_data('n');
lcd_write_data('c');
lcd_write_data('e');
lcd_write_data(':');
lcd_write_data(num[temp/100]);
lcd_write_data(num[temp/10%10]);
lcd_write_data(num[temp%10]);
lcd_write_data('c');
lcd_write_data('m');
}

void main()
{
lcd_init();
HC_init();
while(1)
{
HC_run();
distance=HC_jisuan();
lcd_display(distance);
delay(200);
}
}

㈦ 想学下51单片机的超声波测距,有几个疑问。

这个是都已经把发射接收做好的。其实超声的发射接收电路并不难,真的想学,建议你直接做。不要去用这种模块。

㈧ 51单片机控制超声波测距,大家看看我的程序为什么不对,详细注释

你好:
这时我用51单片机写的HC_SR04超声波测距程序。
其实很简单的,程序一目了然。
希望我的回答能帮助到你。
很抱歉,回答者上传的附件已失效

㈨ 用51单片机实现超声波测距怎样才可以测到4m

输出用并联门电路驱动,如CD4069,以增大输出电流。
接收采用低噪声运放,如NE5532,放大1000倍。
采用接收,发射分开的探头
超声波测距系统的软件设计,由于超声发射传感器与超声接收传感器相隔很近,当发射超声波时,接收传感器会收到很强的干扰信号。为防止系统的误测,在软件上采用延迟接收技术,来提高系统的抗干扰能力。一旦按下起始键,即发送发射超声波的指令,同时单片机控制系统开始执行程序,完成对温度的采样、滤波,然后获得发送、接收超声波的时间间隔,最后计算出距离值。
(1) 接收放大电路,可加入带通滤波或锁相放大(LM567)以尽可能减少干扰信号引起误触发,另外为防止发射信号直接进入接收端所以设置一定的延时。锁相应用电路,调整在40KHZ上,但要考虑加入后对接收处理的延时,用软件调整。
另一方面可采用自动增益补偿技术,随着时间的增加, AGC的放大倍数呈指数规律变化,从而保证了超声波接收器波形的幅值不随测量距离的变化而大幅变化,使得每次在同一个波头触发计时电路,提高了系统测量准确度。电路可以采用如下图所示或者采用单片AD603实现,在这里不具体讨论。
(2)发射驱动电路,为放大驱动脉冲可以再加入一级三极管放大电路,三极管要选用高频的如9018以减少放大后波形的失真;另一方面还可以根据超声波发生器的特点合理设计阻抗匹配,功放效率和机电转换效率;为此可采用脉冲变压器,脉冲变压器是超声换能器驱动电路中最重要的器件,它的用途是升高脉冲电压信号,并使功率放大器的输出阻抗与换能器的负载阻抗匹配。一般脉冲变压器以变压器的功率、原副边电压信号的幅值确定变压器的尺寸和变比;而超声换能器驱动用变压器则主要以功率和原副边电感及阻抗匹配确定变压器的尺寸和变比。缺点是制作和测量都比较麻烦。在大量程应用场合还可以应用电容瞬间放电或电感瞬间放电产生高压激励脉冲。
(3)其它可改善的地方,可采用超声波测距专用芯片SB5027;也可以采用LM1812N单片超声波收发集成电路。

阅读全文

与51单片机的超声波测距相关的资料

热点内容
拼好魔方的app怎么下载 浏览:491
江苏金税盘测试服务器地址是什么 浏览:607
螺杆式压缩冷凝机组 浏览:299
p在单片机里什么意思 浏览:25
linuxwireshark使用教程 浏览:656
手机访问阿里服务器地址 浏览:678
程序员可以干什么 浏览:70
绩效考核权重分配算法 浏览:524
android应用logo 浏览:898
光遇安卓服墓土商店什么时候开 浏览:566
月收益翻倍的源码 浏览:638
asop源码放在哪里 浏览:989
电脑服务器密码怎么找 浏览:574
jdp转换pdf 浏览:749
把pdf导入iphone 浏览:508
米哈游租赁的云服务器是哪个 浏览:524
android直接打电话 浏览:1018
ubuntu停止命令 浏览:285
cnc攻丝编程 浏览:871
换个手机号码app怎么注册 浏览:321