超声波测速系统.docx

上传人:b****5 文档编号:8725396 上传时间:2023-05-14 格式:DOCX 页数:10 大小:54.90KB
下载 相关 举报
超声波测速系统.docx_第1页
第1页 / 共10页
超声波测速系统.docx_第2页
第2页 / 共10页
超声波测速系统.docx_第3页
第3页 / 共10页
超声波测速系统.docx_第4页
第4页 / 共10页
超声波测速系统.docx_第5页
第5页 / 共10页
超声波测速系统.docx_第6页
第6页 / 共10页
超声波测速系统.docx_第7页
第7页 / 共10页
超声波测速系统.docx_第8页
第8页 / 共10页
超声波测速系统.docx_第9页
第9页 / 共10页
超声波测速系统.docx_第10页
第10页 / 共10页
亲,该文档总共10页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

超声波测速系统.docx

《超声波测速系统.docx》由会员分享,可在线阅读,更多相关《超声波测速系统.docx(10页珍藏版)》请在冰点文库上搜索。

超声波测速系统.docx

超声波测速系统

题目:

超声波测距系统

 

一、设计目的:

1、通过本次课程设计加深对单片机课程的全面认识和掌握,对单片机课程的应用进一步的了解.

2、掌握定时器、外部中断的设置和编程原理。

3、通过此次课程设计能够将单片机软硬件结合起来,对程序进行编辑,校验。

二、设计任务:

利用单片机及外围接口电路(显示接口电路)设计制作超声波测距仪器,用LED把测距仪距被测物的距离显示出来。

三、具体要求:

1.使用软件Proteus7Professional测试仿真调试,并在keil环境下编写程序并调试.

2。

在面包板上进行初步仿真测试,设计好布线以及焊接排序。

3.在PCB板上焊接元器件电路,并进行测试得出实验结果。

四、设计原理

(一)硬件设计

1。

超声波测距原理

超声波测距原理是通过超声波发射器向某一方向发射超声波(一般为40KHz的超声波),在发射时刻的同时开始计时,超声波在空气中传播时碰到障碍物就立即返回来,超声波接收器收到反射波就立即停止计时。

超声波在空气中的传播速度为v,而根据计时器记录的测出发射和接收回波的时间差△t,就可以计算出发射点距障碍物的距离S,即:

S=v•△t/2

超声波测距仪原理框图

(1)单片机最小系统

单片机最小系统电路,由主控器STC89C52、时钟电路和复位电路三部分组成。

单片机STC89C52作为核心控制器控制着整个系统的工作,而时钟电路负责产生单片机工作所必需的时钟信号,复位电路使得单片机能够正常、有序、稳定地工作。

(2)晶振电路

位单片机提供时钟频率

(3)复位电路

复位是单片机的初始化操作。

其主要功能是把PC初始化为0000H,使单片机从0000H单元开始执行程序。

除了进入系统的正常初始化之外,当由于程序运行出错或操作错误使系统处于死锁状态时,为摆脱困境,也需按复位键重新启动。

总的电路图如下:

(二)软件设计

软件分为两部分,主程序和中断服务程序.主程序完成初始化工作、超声波发射和接收,距离计算、结果的输出.外部中断服务子程序主要完成时间值的读取。

主程序首先是对系统环境初始化,设置定时器T1工作模式为16位定时计数器模式.置位总中断允许位EA。

然后给Trig一个20us的高电平,然后在Echo引脚等待其变为高电平,一旦输出了高电平,表明超声波已开始发射,此刻即计时,等待Echo变为低电平,即触发外部中断0的跳变沿方式中断。

读取当前定时器的值,换算成时间,乘以波速,即得到测距距离。

程序如下:

#include〈reg52。

h〉

#include〈intrins。

h〉

#defineucharunsignedchar

#defineuintunsignedint

ucharcodetable[]={0xc0,0xf9,0xa4,

0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳极0-9

unsignedcharled[]={0x40,0x79,0x24,

0x30,0x19,0x12,0x02,0x78,0x00,0x10};//带小数点的位码

sbitSMG_q=P2^0;//定义数码管的千位

sbitSMG_b=P2^1;//定义数码管的百位

sbitSMG_s=P2^2;//定义数码管的十位

sbitSMG_g=P2^3;//定义数码管的个位

sbitTrig=P2^7;//发送波形

sbitEcho=P3^2;//回波产生中断

sbittest=P1^0;//指示灯控制端

uintsucceed_flag,time,timeH,timeL;//succeed_flag测试成功标志位

voiddelayms(uintz)//延时毫秒

uintx,y;

for(x=z;x>0;x—-)

for(y=110;y〉0;y—-);

voiddelay_20us()//延时20微秒函数

uchara;

for(a=0;a<=100;a++);

//*******数码管显示数据转换程序********************//

voiddisplay(uinttemp)

ucharge,shi,bai,qian;

qian=temp/1000;

bai=temp%1000/100;

shi=temp%1000%100/10;

ge=temp%10;

SMG_q=0;

P0=table[qian];//查找定义好的数码管段值与P0口

delayms

(2);//加入短暂延时

P0=0Xff;//清除数码管显示,因是共阳型,

SMG_q=1;//关闭千位数码管

SMG_b=0;//选择百位数码管

P0=table[bai];//查找定义好的数码管段值与P0口

delayms

(2);//加入短暂延时

P0=0Xff;//清除数码管显示,因是共阳型,

SMG_b=1;//关闭百位数码管

SMG_s=0;//选择十位数码管

P0=led[shi];//查找定义好的数码管段值与P0口

delayms

(2);//加入短暂延时

P0=0Xff;//清除数码管显示,因是共阳型,

SMG_s=1;//关闭十位数码管

SMG_g=0;//选择个位数码管

P0=table[ge];//查找"2"定义好的数码管段值与P0

delayms

(2);//加入短暂延时

P0=0Xff;//清除数码管显示,因是共阳型,

SMG_g=1;//关闭个位数码管

}

voidchaoshengbo_start(void)//发送波形产生一个20us的脉冲

{

Trig=0;

_nop_();

Trig=1;//超声波输入端

delay_20us();//延时20us

Trig=0;//产生一个20us的脉冲

voidinit(void)//初始化

test=0;

Trig=0;//首先拉低脉冲输入引脚

EA=1;//打开总中断0

TMOD=0x10;//定时器1,16位工作方式

voidcallIft(void)//开计时器,接收信号,调用中断

{

EA=1;

EX0=1;//打开外部中断0

ET1=1;//开定时器1中断

TH1=0;//定时器1清零

TL1=0;//定时器1清零

TF1=0;//计数溢出标志

TR1=1;//启动定时器1

delayms(10);//等待测量的结果

while(Echo==0);//等待Echo回波引脚变高电平

TR1=0;//关闭定时器1

}

/*********************主函数部分**************************/

voidmain()

uintdistance;

voidinit(void);//初始化

while

(1)

EA=0;//关总中断

chaoshengbo_start();//发射超声波

callIft();//开计时器,接收到信号,调用中断

EX0=0;//关闭外部中断0

if(succeed_flag==1)

{

time=timeH*256+timeL;

distance=time*0。

172;//time*0。

170—1。

425

test=!

test;//测试灯变化

display(distance);//显示距离

}

if(succeed_flag==0)

distance=0;//没有回波则清零

display(distance);//显示距离

test=!

test;//测试灯变化

}

//***************************************************************

//外部中断0,用做判断回波电平

voidint0sever()interrupt0//外部中断0是0号

{

timeH=TH1;//取出定时器的值

timeL=TL1;//取出定时器的值

succeed_flag=1;//至成功测量的标志

EX0=0;//关闭外部中断

}

//****************************************************************

//定时器1中断,用做超声波测距计时

voidtimer1()interrupt3

TH1=0;

TL1=0;

}

五、设计心得

俗话说“好的开始是成功的一半”,但我们的开始并不怎么太好,不过还是努力赶上了。

通过这次实习,我们学到了很多东西。

在进行课程设计时,我们应该做到以下三点:

首先,我认为最重要的就是认真的研究老师给的题目。

其次,在老师讲解的基础上认真研究硬件电路的设计,和软件流程的设计。

最后,重点实现软硬结合的综合调试。

这次的实习算起来一共进行了两周,在这两周的时间里我们进行了硬件电路图设计,电路板的设计,以及软件的编程实现,软硬件的综合调试.最终一个完整的课程设计成果出来了,很高兴它能按着设计的思想与要求运作起来.当然,这其中也有很多问题,第一、不够细心。

比如在PCB制作过程中没有建立网络报表导致了部分连线没有倒入PCB板中,还有部分封装出现了错误。

第二,实践环节上,这次课设是对我所学的理论课程的一次检验,对于这次单片机综合课程实习,使我们的动手能力得到提升,同时纠正我们对“系统"这一概念以往的错误理解。

就实现功能来说,设计结果能够符合题意,成功完成了此次实习要求,我们不只在乎这一结果,更加在乎的,是这个过程。

这个过程中,我们花费了大量的时间和精力,更重要的是,我们在学会创新的基础上,同时还懂得合作精神的重要性,学会了与他人合作。

在已度过的大学时间里,我们大多数接触的是理论课。

我们在课堂上掌握的仅仅是专业课的理论知识,如何去锻炼我们的实践能力?

如何把我们所学的专业基础课理论知识运用到实践中去呢?

我想做类似实习就为我们提供了良好的实践平台.

同时这次实习给我们带来了很多启发:

首先,查阅资料的必要性。

在做本次实习的过程中,我们感触最深的当属查阅大量的设计资料了.为了让自己的设计更加完善,查阅这方面的设计资料是十分必要的,同时也是必不可少的.我们是在做单片机实习,但我们不是艺术家,他们可以抛开实际尽情在幻想的世界里翱翔,而我们一切都要有据可依,有理可寻,不切实际的构想永远只能是构想,永远无法升级为设计,我们能做的就是理论结合实际。

其次,在这次课程设计中,我们运用到了以前所学的专业课知识,如:

模拟和数字电路知识等。

虽然过去从未独立应用过它们,但在学习的过程中带着问题去学我发现效率很高,这是我做这次课程设计的又一收获。

再次,在实习之前,我们要对所用单片机的内部结构有一个系统的了解,知道该单片机内有哪些资源;要有一个清晰的思路和一个完整的的软件流程图;在设计程序时,不能妄想一次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路;要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便;在实习过程中遇到问题是很正常的,但我们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题。

但是从中学到的知识会让我受益终身。

发现、提出、分析、解决问题和实践能力提高都会受益于我在以后的学习、工作和生活中

最后,我们在这次实习中我们使用了分模块焊接,分模块测试的方法进行硬件电路的焊接和测试,这是我们最宝贵的收获,这样做可以避免走很多弯路。

使得调试也条理分明.

总体上说,这次实习中收获很多,感触也很多.

参考文献

[1]刘凤然.基于单片机的超声波测距系统[J]。

[2]胡汉才.单片机原理及其接口技术[M].北京:

清华大学出版社

[3]谭洪涛,张学平.单片机设计测距仪原理及其简单应用[J]

 

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2