超声波测距仪单片机课设实验报告.docx

上传人:b****4 文档编号:6876914 上传时间:2023-05-10 格式:DOCX 页数:11 大小:154.28KB
下载 相关 举报
超声波测距仪单片机课设实验报告.docx_第1页
第1页 / 共11页
超声波测距仪单片机课设实验报告.docx_第2页
第2页 / 共11页
超声波测距仪单片机课设实验报告.docx_第3页
第3页 / 共11页
超声波测距仪单片机课设实验报告.docx_第4页
第4页 / 共11页
超声波测距仪单片机课设实验报告.docx_第5页
第5页 / 共11页
超声波测距仪单片机课设实验报告.docx_第6页
第6页 / 共11页
超声波测距仪单片机课设实验报告.docx_第7页
第7页 / 共11页
超声波测距仪单片机课设实验报告.docx_第8页
第8页 / 共11页
超声波测距仪单片机课设实验报告.docx_第9页
第9页 / 共11页
超声波测距仪单片机课设实验报告.docx_第10页
第10页 / 共11页
超声波测距仪单片机课设实验报告.docx_第11页
第11页 / 共11页
亲,该文档总共11页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

超声波测距仪单片机课设实验报告.docx

《超声波测距仪单片机课设实验报告.docx》由会员分享,可在线阅读,更多相关《超声波测距仪单片机课设实验报告.docx(11页珍藏版)》请在冰点文库上搜索。

超声波测距仪单片机课设实验报告.docx

超声波测距仪单片机课设实验报告

超声波测距仪单片机课设实验报告

微机原理与单片机系统课程设计

评语:

 

考勤10分

守纪10分

过程30分

设计报告30分

答辩20分

总成绩(100分)

 

专业:

轨道交通信号与控制

班级:

交控1305

姓名:

贺云鹏

学号:

201310104

指导教师:

李建国

HC-SR04超声波测距模块可提供2cm-400cm的非接触式距离感测功能,测距精度可达高到3mm。

模块包括超声波发射器、接收器与控制电路。

当提供一个10uS以上正脉冲触发信号,该模块内部将发出8个40kHz周期电平并检测回波。

一旦检测到有回波信号则输出回响信号。

回响信号的脉冲宽度与所测的距离成正比。

由此通过发射信号到收到的回响信号时间间隔可以计算得到距离

由以上信息,在设计时选用两个定时器,定时器1用来定时800ms,当产生中断时,启动HC-SR04超声波测距模块,即给其TRIG(发射)口送一个持续20ms的正脉冲,定时器0用来对超声波传递时间进行计时,即当ECHO(回波)口为高电平时启动计时,当ECHO口变为低电平时关闭计时。

再根据超声波在空气中的传播速度为340米每秒,通过AT89C51计算出距离,当距离超过400cm时,显示8888,表示超出工作距离。

2.2LED显示模块设计

将算得的距离通过一个4位LED数码管采用动态扫描进行显示。

2.3其他功能的设计

考虑到实际的需求,本设计还应增加以下功能:

1、增加一个指示灯。

当ECHO(回波)口为高电平时,即超声波信号在空气中传播时,指示灯点亮。

当数码管不能正常点亮时,若指示灯正常指示,则说明LED显示模块发生故障;若指示灯不能正常点亮,则说明超声波测距模块发生故障。

2、增加一个锁存按钮。

由于设计时我们设计的为每800ms超声波测距模块启动一次,由于定时器会产生误差,造成测得距离不断变化,增加一个锁存按钮,当确定显示结果稳定时,按下按钮时,关闭超声波测距模块,可以使结果清楚显示。

3、增加一个待机按钮。

当按下锁存按钮后,再按下待机按钮,这时关闭LED显示,若再打开待机按钮,这时LED启动工作,显示的数值为上一次被测距离。

2.4设计成本及定价

成本:

1、HC-SR04超声波测距模块1个3.3元

2、AT89C51单片机1个2.5元

3、四位LED数码管1个1.5元

4、晶振1个0.17元

5、电路板1个0.57元

6、其他开关、电阻及电容总计0.5元

总计:

8.54元

市场平均价格:

12元

预计定价:

10元

利润:

1.46元

3硬件设计

此系统的硬件设计主要包括HC-SR04超声波测距模块、AT89C51单片机、4位LED显示模块,并连入指示灯、待机开关和锁存开关。

仿真时,将HC-SR04超声波测距模块用一个555延时电路来代替即可,其中调节改变滑动变阻器的阻值可以模拟被测物体距离的变化。

实验仿真电路图如图1所示。

图1设计硬件电路图

4软件设计

此系统的软件设计主要包括超声波测距模块设计、LED显示模块设计、和其他拓展模块。

采用定时器1每800ms发射一个脉冲信号启动超声波测距模块,采用定时器0计算超声波传播时间,并通过一个计算函数算得距离,然后送LED显示屏进行动态扫描并显示结果。

4.1程序流程图

主程序流程图如图2所示。

图2程序流程图

4.2程序

基于AT89C51单片机的超声波测距源程序见附录一。

5系统仿真及调试结果

基于AT89C51单片机的超声波测距仿真结果见附录二。

基于AT89C51单片机的超声波测距调试结果如图3所示。

图3系统程序调试结果

6总结

本设计通过对超声波测距的研究,与单片机结合,实现了超声波测距的目标,并增加了数据锁存、指示灯和待机的功能。

仿真时由于软件中没有HC-SR04模块,因此用555延时电路来代替。

通过这次课程设计,我加深了对单片机的理解,也为以后更好的运用打下了基础。

最后要感谢李老师的指导,在李老师的耐心解答下,我受益匪浅。

参考文献

[1]李积英.数字电子技术.中国电力出版社,2011

[2]深圳市捷什科技有限公司.HC-SR04超声波测距模块说明书.

[3]彭江.单片机原理及接口技术的开发[J].软件导刊,2011,12(8):

66-70.

[4]王思明.张金敏.苟军年.张鑫.杨乔礼.单片机原理及应用系统设计.科学出版社.2012

 

附录一:

实验源程序

#include

#defineucharunsignedchar

#defineuintunsignedint

#defineLED_portP0//用于LED段选

#defineLED_posP1//用于LED位选

sbitqq=P2^6;//待机按钮

sbitsuocun=P2^1;//锁存结果

sbitRX=P1^4;//回波

sbitTX=P1^5;//送波

sbitD1=P3^7;//接收指示灯

uinttime=0;//定时器0时间

uinttimer=0;//定时器1时间

unsignedlongS=0;//用于显示最后计算得到的距离

unsignedlongW[2]={0,0};//用于比较两次测算距离大小

bitflag=0;//定时器0中断溢出标志位

ucharvalue[4];

ucharcodeLED_seg[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//数码管段选

ucharcodepos[4]={0x01,0x02,0x04,0x08};//数码管位选

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

voidDelay(uchart)//延时函数

{

uchari,j,k;

for(i=0;i

for(j=0;j<20;j++)

for(k=0;k<20;k++);

}

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

voidvalue_shift(ucharvalue[])//将距离值的每一位放到数组中

{

value[0]=S/1000;

value[1]=S/100%10;

value[2]=S/10%10;

value[3]=S%10;

}

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

voidDisplay(ucharvalue[])//数码管显示

{

uchari;

for(i=0;i<4;i++)

{

LED_pos=pos[i];

LED_port=LED_seg[value[i]];

Delay

(1);

}

}

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

voidzd3()interrupt3//T1中断用来扫描数码管和计800MS启动模块

{//这是计时器1中断

TH1=0xf8;//赋初值,2ms

TL1=0x30;

timer++;

if(timer>=400)

{

timer=0;

TX=0;//800MS启动一次模块

//Delay(30);//一次超声波信号时长30ms,仿真时只需加负脉冲,故屏蔽此句

TX=1;

}

}

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

voidzd0()interrupt1//T0中断用来计数器溢出

{

flag=1;//中断溢出标志

}

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

voidCount(void)//计算程序

{

time=TH0*256+TL0;//这是最后算到的时间,往返时间,但应该再乘以12/11.0593M是一个机器周期,时间应该是time*12/11.059

TH0=0;//定时器0的初始值为0

TL0=0;

S=(time*1.845)/10;//算出来是mm,time*12*170/(11.0592*1000)mm=time*(1845/10000)mm

W[0]=S;

if(((W[0]-W[1])^2)<=100)//进行校正,若两次结果相差小于10mm,则采用前一次结果

S=W[1];

else

W[1]=S;

if(S>=4000)//最大距离4m,即4000mm

S=8888;

if(flag==1)//判断是否溢出

{

S=8888;

flag=0;

TH0=0;

TL0=0;

}

}

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

voidmain(void)

{

TMOD=0x11;//设T0为方式1,T1为方式1

TH0=0;//中断0初始化

TL0=0;//中断1初始化

TH1=0XF8;

TL1=0X30;

ET0=1;//允许T0中断

ET1=1;

TR1=1;

qq=1;

suocun=0;

EA=1;

while

(1)

{

while(!

RX);//当RX为零时等待,即echo为低电平

TX=1;

TR0=1;

D1=1;//开启计数

while(RX);//当RX为1计数并等待

TR0=0;//关闭计数

D1=0;//关指示灯

while(!

qq)//待机按钮按下时,关总中断和位选

{

EA=0;

P1=0X00;

}

qq=1;

Count();//计算

value_shift(value);

Display(value);//显示

while(suocun)//当按下锁存按钮时,关总中断并显示

{

EA=0;

Display(value);

}

EA=1;

}

}

 

附录二:

1.距离小于4m时的仿真图

图1距离小于4m

 

2.距离大于4m时的仿真图

图2距离大于4m

 

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

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

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

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