超声波测距.docx
《超声波测距.docx》由会员分享,可在线阅读,更多相关《超声波测距.docx(25页珍藏版)》请在冰豆网上搜索。
超声波测距
成绩
课程设计
课程名称
单片机原理与应用课程设计
课题名称
超声波测距系统设计
专业
自动化
班级
学号
姓名
指导老师
晓秀、肖峰、林国汉等
2015年6月29日
电气信息学院
课程设计任务书
课题名称
超声波测距系统设计
姓名
专业
自动化
班级
学号
指导老师
晓秀
课程设计时间
2015年6月29日-2015年7月10日
一、任务及要求
设计任务:
本课题要求以MCS-51系列单片机为核心,设计一个超声波测距系统。
(1)用给定的超声波模块制作超声波测距系统,测距围:
0.5~4.5m;
(2)用按键实现测距、清零、复位等控制;
(3)用4位LED数码管显示测量到的距离。
设计要求:
(1)确定系统设计方案;
(2)进行系统的硬件设计;
(3)完成必要的参数计算与元器件选择;
(4)完成应用程序设计;
(5)应用系统的硬件和软件的调试。
二、进度安排
第一周:
周一:
集中布置课程设计任务和相关事宜,查资料确定系统总体方案。
周二~周三:
完成硬件设计和电路连接
周四~周日:
完成软件设计
第二周:
周一~周三:
程序调试
周四~周五:
设计报告撰写。
周五进行答辩和设计结果检查。
三、参考资料
1、王迎旭等.单片机原理及及应用[M].2版.机械工业,2012
2、胡汉才.单片机原理及其接口技术[M].3版.清华大学,2010.
3、戴灿金.51单片机及其C语言程序设计开发实例[M].清华大学,2010
第1章总体方案设计
1.1设计任务与要求
设计任务:
本课题要求以MCS-51系列单片机为核心,设计一个超声波测距系统。
(1)用给定的超声波模块制作超声波测距系统,测距围:
0.5~4.5m;
(2)用按键实现测距、清零、复位等控制;
(3)用4位LED数码管显示测量到的距离。
设计要求:
(1)确定系统设计方案;
(2)进行系统的硬件设计;
(3)完成必要的参数计算与元器件选择;
(4)完成应用程序设计;
(5)应用系统的硬件和软件的调试。
1.2超声波测距原理
如图1-1所示,本课题由AT89C52单片机,HC-SR04超声波模块,数码管显示电路,键盘电路,复位电路,晶振电路组成。
本课题设计3个功能键,启动、暂停和复位键。
单片机中有独立式键盘和矩阵式键盘两种,因为用键较少,所以采用独立按键形式。
当按下启动键时,系统开始不断的发出超声波测量当前障碍物的距离,并送至数码管进行显示。
当有暂停键按下时,系统停止测量,数码管显示当前障碍物的距离。
按下复位键,单片机重新启动。
采用单片机来控制的超声波模块测距,先由单片机P2.6口产生一个大于10us的高电平信号给超声波模块的Trig口,超声波模块的Echo口自动置为高电平,定时器开始计时,当碰到障碍物时Echo口变为低电平时,定时器停止计时,得到超声波传播时间T,超声波在空气中的传播速度为C=340m/s,可以计算出发射点距障碍物的距离(s),即:
,其中,D为超声波与障碍物之间的距离。
图1-1超声波测距框图
第2章硬件电路设计
2.1单片机最小电路设计
如图2-1所示。
单片机最小电路包括:
复位电路,晶振电路,单片机芯片。
本次设计采用频率为11.0592MHz的石英晶体振荡器以及两个22pF左右大小的微调电容器构成单片机的部时钟。
按键上电复位电路由10uf电容和10欧电阻,1K欧电阻组成。
数码管的位选接到单片机的P1.0-P1.3口,低电频的时候选通。
数码管的段选接单片机的P0.0-P0.7口,低电平的时候选通。
单片机的P2.0-P2.3分别接到按键的一端,按键另一断接地,通过查询端口电平的变化,来判断是否有键按下。
P2.6,P2.7分别接超声波模块的Trig,Echo口。
图2-1最小单片机电路
2.2超声波引脚设计
如图2-2所示,P2.6口给Trig口送一个大于10us的高电平,超声波模块的Echo口自动变为高电平,且发出40Khz的超声波,一有输出就立刻开定时器计时,当此口变为低电平时就可以读定时器的值,此时就为此次测距的时间。
图2-2超声波发生器
2.3数码管显示电路设计
如图2-3所示,数码管的位选接单片机的P1.0-P1.3口,段选接单片机的P0.0-P0.7口。
本次设计采用LED数码管动态显示方式,此次实验板的数码管共阳极,当有低电平驱动时,数码管亮。
图2-3数码管显示电路
2.4键盘连接电路设计
该系统采用三个独立按键控制如图2-4所示,按键一端s1,s2,s3接地,按键另一端接高电平同时接单片机P2.0-P2.3口。
当按键按下时,就给相应的引脚口一个低电平,从而实现控制功能.
图2-4键盘连接电路
第3章软件设计
3.1主程序流程图
主程序流程图如图3-1所示。
系统先初始化,定义端口及其他变量等准备工作。
调用显示程序显示开机状态,然后查键是否有按键按下,如果键按下,在进行键处理。
图3-1主程序流程图
3.2中断服务程序流程图
中断服务程序如图3-2所示,先装初值,在判断采样时间,如果到了就给超声波高电平,启动计时,然后计算时间。
否则,直接中断返回。
图3-2中断服务程序流程图
3.3键处理程序流程图
键处理流程图如图3-3所示,通过3个独立式按键来实现启动,暂停,复位功能。
当有键按下时,用去抖动去判断是否是误操作,然后在确定具体是哪个键按下,并实现相应的功能。
图3-3键处理程序流程图
第4章调试结果
4.1硬件调试
本次课程设计是拿我们自己焊的单片机开发板,将程序烧写进去,得到如下两组数据,第一组为6.5CM,第二组为10.5CM。
图4-1硬件调试结果
图4-2硬件调试结果
第5章总结
两周的课程设计结束了,这对我对单片机的认知又有了很大的提升,以前有的只是单纯的理论知识,但是这次让我的动手能力得到了大大的训练。
虽然从刚开始在网上找到程序的毫无头绪,到后面一步一步慢慢调试出来,其中的困难只有自己能懂。
由于这块板子我们是自己动手焊的,并且还拿着做了一些实验,所以刚开始的时候并不是那么的陌生,但在设计的时候出现了各种各样的问题,比如按键的时候黑屏,测距的时候刷新过快,复位的时候又测了一下数据再清零。
在一次又一次的更改调试下才得到要求的结果,这都让我深刻体会到要做好一件完整的事情,要有系统的思维方式和逻辑方法,要耐心的面对所有问题、要善于用应用各种资源来充实和满足自己。
在欣喜与收获的同时我也看到到了自己的不足之处,对于以前的知识没有进行系统的复习,以为自己已经记得很牢固了,没想到再需要用到的时候早已模糊不清。
以为可以得到想要的实验结果时,却漏洞百出,这也提醒我做事情一定要认真仔细。
最后,我要感我的指导老师,她的严谨细致、一丝不苟的作风是我学习的榜样,她循循善诱的教导和不拘一格的思路给予我无尽的启迪。
同时,我要感我的同学,你们对我的帮助和指导。
参考文献
[1]王迎旭等.单片机原理及及应用[M].2版.机械工业,2012
[2]胡汉才.单片机原理及其接口技术[M].3版.清华大学,2010.
[3]戴灿金.51单片机及其C语言程序设计开发实例[M].清华大学,2010
如果你不幸是晓秀老师这组的报告看三遍才能交不要慌
附录
附录A超声波测距原理图
附录B程序清单
#include
#include
#definestart_signal1
#defineend_signal0
#definekeyboard_clear~(0x0f)
#definekeyboard_set0x0f
#definewei_clear~(0x0f)
unsignedcharwei[4]={0x0e,0x0d,0x0b,0x07};
unsignedcharflag=0,flag1=0;
unsignedintdistance=0,stop_distance=0;time=0,K1=0,K2=0,K=0,K3=0;
unsignedcharcodetable[]={
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e};
sbittrig=P2^6;
sbitecho=P2^7;
sbitdp=P1^7;
voidinit(void)
{
trig=0;
echo=0;
TMOD=0x11;//设T0为方式1,GATE=1;
TH0=0;
TL0=0;
TH1=(65536-10000)/256;
TL1=(65536-10000)%256;
ET0=1;
ET1=1;//允许T0中断
EA=1;
TR0=0;
TR1=1;
return;
}
voiddelay(unsignedintz)
{
unsignedcharx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
return;
}
voiddisplay(void)
{
unsignedchari=0;
for(;i<4;i++)
{
if(flag==0)
{
switch(i)
{
case0:
P0=table[distance%10000/1000];break;
case1:
P0=table[distance%1000/100];break;
case2:
P0=(table[(distance%100/10)])&0x7f/*增加小数点*/;break;
case3:
P0=table[distance%10];break;
}
}
elseif(flag==1)
{
switch(i)
{
case0:
P0=0xbf;break;
case1:
P0=0xbf;break;
case2:
P0=0xbf;break;
case3:
P0=0xbf;break;
}
}
elseif(flag==2)
{
switch(i)
{
case0:
P0=table[stop_distance%10000/1000];break;
case1:
P0=table[stop_distance%1000/100];break;
case2:
P0=table[stop_distance%100/10]&0x7f;break;
case3:
P0=table[stop_distance%10];break;
}
}
P1=((P1=P1&wei_clear)|wei[i]);
delay
(1);
}
return;
}
voidkeyscan(void)
{
unsignedchartemp=0;
P2=((P2&keyboard_clear)|keyboard_set);
temp=P2;
if((temp&0x0f)!
=0x0f)
{
delay
(1);
temp=P2;
if((temp&0x0f)!
=0x0f)
{
switch(temp&0x0f)
{
case0x0e:
K1=1;break;
case0x0d:
K2=1;break;
case0x0b:
K3=1;break;
default:
break;
}
/*while((temp&0x0f)!
=0x0f)
{
temp=P2;
delay
(1);
}*/
}
}
}
voidstart(void)
{
unsignedchari=10;
trig=start_signal;
while(i--)
_nop_();
trig=end_signal;
}
voidcount(void)
{
floatS1;
time=(TH0)*256+TL0;
TH0=0;
TL0=0;
S1=(time*1.7)/100;//cm
distance=S1*10;
if(flag!
=2)
{
if(distance>=4500)//测量围
flag=1;
else
flag=0;
}
return;
}
voidmain(void)
{
init();
while
(1)
{
keyscan();
if(K1==1)
{
K1=0;
flag1=1;
flag=0;
}
if(K2==1)
{
flag=0;
distance=0;
flag1=2;
K2=0;
}
if(K3==1)
{
flag=2;
flag1=2;
K3=0;
}
display();
}
return;
}
voidtime0()interrupt1
{
flag=1;
}
voidtime1()interrupt3
{
TH1=(65536-10000)/256;
TL1=(65536-10000)%256;
K++;
if(K>=80)
{
K=0;
start();
while(!
echo);
if(flag1==1)
TR0=1;
elseif(flag==2)
TR0=0;
elseif(flag1==2)
{
TR0=0;
distance=0;
}
else
TR0=0;
while(echo);
TR0=0;
if(flag!
=2)
{
count();
stop_distance=distance;
//distance=0;
}
}
}
单片机原理与应用课程设计评分表
项目
评价
优
良
中
及格
不及格
设计方案的合理性与创造性(10%)
开发板焊接及其调试完成情况*(10%)
硬件设计或软件编程完成情况(20%)
硬件测试或软件调试结果*(10%)
设计说明书质量(20%)
答辩情况(10%)
完成任务情况(10%)
独立工作能力(10%)
出勤情况(10%)
综合评分
课程设计成绩评定为:
□优□良□中□及格□不及格
指导老师签名:
______________
日期:
______________
注:
①表中标*号项目是根据课题实际情况二选一;
②此表装订在课程设计说明书的最后一页。