52单片机超声波测距论文最终版Word文档格式.docx
- 文档编号:16895045
- 上传时间:2022-11-26
- 格式:DOCX
- 页数:13
- 大小:120.30KB
52单片机超声波测距论文最终版Word文档格式.docx
《52单片机超声波测距论文最终版Word文档格式.docx》由会员分享,可在线阅读,更多相关《52单片机超声波测距论文最终版Word文档格式.docx(13页珍藏版)》请在冰豆网上搜索。
2个16b定时/计数器;
5个2级中断源;
1个全双向的串行口以及时钟电路。
空闲方式:
CPU停止工作,而让RAM、定时/计数器、串行口和中断系统继续工作。
掉电方式:
保存RAM的内容,振荡器停振,禁止芯片所有的其他功能直到下一次硬件复位。
5l系列单片机为许多控制提供了高度灵活和低成本的解决办法。
充分利用他的片内资源,即可在较少外围电路的情况下构成功能完善的超声波测距系统。
1.3系统整体方案的论证
超声波测距的原理是利用超声波的发射和接收,根据超声波传播的时间来计算出传播距离。
实用的测距方法有两种,一种是在被测距离的两端,一端发射,另一端接收,直接接收波方式,适用于身高计;
一种是发射波被物体反射回来后接收的反射波方式,适用于测距仪。
此次设计采用反射波方式。
测距仪的分辨率取决于对超声波传感器的选择。
超声波传感器是一种采用压电效应的传感器,常用的材料是压电陶瓷。
由于超声波在空气中传播时会有相当的衰减,衰减的程度与频率的高低成正比;
而频率高分辨率也高,故短距离测量时应选择频率高的传感器,而长距离的测量时应用低频率的传感器。
2.1超声波测距单片机系统
超声波测距单片机系统主要由:
AT89C51单片机、晶振、复位电路、电源滤波部份构成。
如图3-2。
图3-2:
超声波测距单片机系统
2.2超声波发射、接受电路
超声波发射如图3-3,接收电路如图3-4。
超声波发射电路由电阻74ALO4、555电路及超声波发送头T40构成接收电路。
由555发射出波形,再由555外围的电路经过滤波、调整,形成好看无杂波的波形,再经过74AL04反向驱动放大,最后由超声波发射探头发射出去。
接收电路由一级放大100倍,低通滤波,高通滤波,二级放大100倍,经过比较器LM393转换为高低电平,触发三极管,启动中断计时。
图3-3:
超声波测距发送单元
图3-4:
超声波测距接收单元
由于反射回来的超声波信号非常微弱,所以接收电路需要将其进行放大。
接收电路如图3-4所示。
接收到的信号加TL084的两级放大器上进行放大。
每级放大器的放大倍数为100倍。
放大的信号经过高低通两段滤波,使波形该接收电路结构简单,性能较好,制作难度小。
2.3显示电路
本系统采用三位一体LCD显示所测距离值,如图3-6。
图3-5:
显示单元
3.1主程序设计
超声波测距的软件设计主要由主程序、超声波发生子程序、超声波接收程序及显示子程序组成。
超声波测距的程序既有较复杂的计算(计算距离时),又要求精细计算程序运行时间(超声波测距时),所以控制程序可采用C语言编程。
主程序首先是对系统环境初始化,设定时器0为计数,设定时器1定时。
置位总中断允许位EA。
进行程序主程序后,进行定时测距判断,当测距标志位ec=1时,测量一次,程序设计中,超声波测距频度是4-5次/秒。
测距间隔中,整个程序主要进行循环显示测量结果。
当调用超声波测距子程序后,首先由单片机产生4个频率为38.46kHz超声波脉冲,加载的超声波发送头上。
超声波头发送完送超声波后,立即启动内部计时器T0进行计时,为了避免超声波从发射头直接传送到接收头引起的直射波触发,这时,单片机需要延时约1.5-2ms时间(这也就是超声波测距仪会有一个最小可测距离的原因,称之为盲区值)后,才启动对单片机P3.2脚的电平判断程序。
当检测到P3.2脚的电平由高转为低电平时,立即停止T0计时。
由于采用单片机采用的是12MHz的晶振,计时器每计一个数就是1μs,当超声波测距子程序检测到接收成功的标志位后,将计数器T0中的数(即超声波来回所用的时间)按式
(2)计算,即可得被测物体与测距仪之间的距离。
设计时取15℃时的声速为340m/s则有:
d=(c×
t)/2=172×
T0/10000cm其中,T0为计数器T0的计算值。
测出距离后结果将以十进制BCD码方式送往LCD显示约0.5s,然后再发超声波脉冲重复测量过程
3.2程序流程图:
本次实训在设计中,力求能达到最基础的功能,系统性能的稳定,在此条件下在加强其测距的距离。
3.3程序清单:
Main.c:
#include<
reg52.h>
#include"
Delay.h"
intrins.h>
#defineucharunsignedchar
#defineuintunsignedint
//#defineVELOCITY_30C3495
#defineLcd_PortP2//定义数据端口
enumstate_all{n1,n2,n3}state;
ucharaa[10]={'
0'
'
1'
2'
3'
4'
5'
6'
7'
8'
9'
};
longintdistance=0;
sbitOutput=P1^0;
//发射控制端口
sbitLcd_RS=P3^5;
//定义和LCD的连接端口,写数据指令端口2.6
sbitLcd_RW=P3^6;
//读写端口2.5
sbitLcd_E=P3^7;
//使能端口2.4
sbitLcd_Busy=P2^7;
//读忙端口
//bitflag;
//发射超声波
voidTrig_SuperSonic(void)
{
Output=1;
TR0=1;
Delayus(45);
Output=0;
Delayus(5);
//
EX0=1;
}
//距离转换函数
voidMeasure_Distance(void)
{
longintl;
longinth,y;
l=TL0;
h=TH0;
y=(h<
<
8)+l;
TL0=0x00;
TH0=0x00;
Delayus(20);
//distance=(int)(y*17/100);
//mm
distance=(int)(y*340*80/200000);
//mm310y*340*100/200000测80cm,200cm校准
//外部中断
voidExt0(void)interrupt0
TR0=0;
EX0=0;
//flag=1;
//Output=0;
//定时器初始化函数
voidInit_MCU(void)
TMOD=0x01;
//定时器0初始化,设置为16位自动重装模式
TH0=0x00;
//1ms定时
ET0=1;
//开定时器0
EA=1;
//总中断使能
//TF0=1;
IT0=0;
//
//初始化清零
voidInit_Parameter(void)
{
//读忙信号判断
voidRead_Busy(void)
uchark=255;
Lcd_Port=0xff;
Lcd_RS=0;
Lcd_RW=1;
Lcd_E=1;
while((k--)&
&
(Lcd_Busy));
Lcd_E=0;
//写指令函数
voidWrite_Comm(uintlcdcomm)
Read_Busy();
//先读忙
Lcd_RS=0;
//端口定义为写指令
Lcd_RW=0;
//端口写入使能
Lcd_E=1;
//端口输入总使能
Lcd_Port=lcdcomm;
//数据端送指令
//端口输入总禁止
//写数据函数
voidWrite_Chr(uintlcddata)
Read_Busy();
Lcd_RS=1;
//端口写数据使能
Lcd_RW=0;
//端口总输入使能
Lcd_Port=lcddata;
//数据端口送数据
Lcd_E=0;
//端口总输入禁止
//初始化LCD
voidInit_LCD(void)
Delayms
(2);
//稍微延时,等待LCD进入工作状态
Write_Comm(0x38);
//8位2行5*8
Write_Comm(0x0c);
//显示开/关,光标开闪烁开
Write_Comm(0x01);
//清显示
Write_Comm(0x06);
//文字不动,光标右移
Write_Comm(0x02);
//光标归位
voidTimer0(void)interrupt1using1
//set=1;
TH0=0X00;
TL0=0X00;
voidmain(void)
Delayms(10);
Init_MCU();
//定时器初始化
Init_LCD();
//lcd初始化
distance=0;
Write_Comm(0x80);
//确定显示位置,第1行第3列
Write_Chr(aa[distance/1000]);
//m
Write_Chr('
.'
);
Write_Chr(aa[distance/100%10]);
//dm
Write_Chr(aa[distance%100/10]);
//cm
Write_Chr(aa[distance%10]);
//mm
m'
state=n1;
while
(1)
{
Write_Comm(0x80);
Write_Chr('
Write_Chr(aa[distance/1000]);
Write_Chr(aa[distance/100%10]);
Write_Chr(aa[distance%100/10]);
Write_Chr(aa[distance%10]);
Delayms(100);
//LCD刷新时间10090
switch(state)
{
casen1:
//等待状态
Init_Parameter();
//清零
state=n2;
break;
casen2:
Trig_SuperSonic();
//发射超声波
state=n3;
casen3:
Delayms(10);
Measure_Distance();
//有接收到,就显示出距离,没有就显示0
state=n1;
Delayms(200);
break;
}
}
延时程序
reg52.h"
//1ms延时函数,
voidDelayms(ucharms)
uchari;
while(ms--!
=0)
for(i=0;
i<
125;
i++)
;
//1us延时函数
voidDelayus(ucharus)
while(us--!
=0);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 52 单片机 超声波 测距 论文 最终版
![提示](https://static.bdocx.com/images/bang_tan.gif)