单片机课程设计超声波测距离.docx
《单片机课程设计超声波测距离.docx》由会员分享,可在线阅读,更多相关《单片机课程设计超声波测距离.docx(27页珍藏版)》请在冰豆网上搜索。
单片机课程设计超声波测距离
湖南工程学院
课程设计任务书
课程名称单片机原理与应用
课题超声波测距系统设计
专业班级
学生姓名
学号
指导老师
审批
序言…………………………………………………………6
第一章、总体设计原理……………………………………6
1.1、超声波测距原理…………………………………6
1.2、超声波测距系统框图……………………………8
1.3、程序流程图………………………………………10
第二章、系统硬件设计……………………………………11
2.1、超声波模块电路…………………………………11
2.2、数码管显示电路…………………………………12
2.3、单片机最小电路…………………………………122.4、键盘连接…………………………………………13
第三章、系统软件设计……………………………………14
3.1、主程序流程图……………………………………14
3.2、子程序设计………………………………………15
第4章、调试结果…………………………………………21
实验总结……………………………………………………23
参考文献……………………………………………………24
附录A、整体电路图………………………………………25
附录B、程序清单………………………………………26
序言
由于超生波测距是一种非接触检测技术,不受光线、被测对象颜色限制,较其他仪器更卫生,更耐潮湿、粉尘、高温、腐蚀等恶劣环境,具有少维护,不污染,高可靠,长寿命等特点。
因此,超声波测距有着广泛的应用领域。
利用超声波检测往往比较迅速,简单,计算方便,易于实现实时控制,并且在测量精度方面能达到工业使用要求。
超声波测距主要应用于倒车雷达、建筑施工工地以及一些工业现场,例如:
液位、井深、管道长度等场合。
第一章、总体设计原理
本章主要介绍单片机超声波测距的主要原理,包括超声波测距的原理和STC89C52单片机的原理
1.1、超声波测距原理
谐振频率高于20kHz的声波被称为超声波。
超声波为直线传播频率越高、绕射能力越弱、但反射能力越强。
利用超声波的这种性能就可制成超声传感器、或称为超声换能器、它是一种既可以把电能转化为机械能、又可以把机械能转化为电能的器件或装置。
换能器在电脉冲激励下可将电能转换为机械能、向外发送超声波、反之,当换能器处在接收状态时它可将声能(机械能)转换为电能。
压电式超声波发生器实际上是利用压电晶体的谐振来工作的。
超
声波发生器内部结构如图1-1所示,它有两个压电晶片和一个共振板。
当它的两极外加脉冲信号,其频率等于压电晶片的固有振荡频率时,
压电晶片将会发生共振,并带动共振板振动,便产生超声波。
反之
如果两电极间未外加电压,当共振板接收到超声波时,将压迫压电
晶片作振动,将机械能转换为电信号,这时它就成为超声波接收器了。
图1-1、超声波换能器内部示意图
超声波发射器向某一方向发射超声波在发射时刻的同时开始计时,超声波在空气中传播,途中碰到障碍物就立即返回来,超声波接收器收到反射波就立即停止计时。
超声波测距是通过不断检测超声波发射后遇到障碍物所反射的回波,从而测出发射和接收回波的时间差t,然后求出距离S=Ct/2,式中的C为超声波波速。
图1-2、超声波测距原理框图
由于超声波也是一种声波,其声速C与温度有关,表1列出了几种不同温度下的声速。
在使用时,如果温度变化不大,则可认为声速是基本不变的。
如果测距精度要求很高,则应通过温度补偿的方法加以校正。
声速确定后,只要测得超声波往返的时间,即可求得距离。
这就是超声波测距仪的机理。
其系统框图如图1-2所示。
表1声速与温度关系表
温度(℃)
-30
-20
-10
0
10
20
30
100
1.2、STC89C52单片机原理
STC89C52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
具有以下标准功能:
8k字节Flash,512字节RAM,32位I/O口线,看门狗定时器,内置4KBEEPROM,MAX810复位电路,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口。
另外STC89X52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。
空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。
掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
最高运作频率35Mhz,6T/12T可选。
图1-3、STC89C52引脚图
1.3、超声波测距系统框图
图1-4、超声波测距系统框图
第二章、系统硬件设计
硬件是一个机器的基础,没有硬件,所有机器都不存在,本章主要介绍单片机超声波测距的硬件原理。
2.1、超声波模块电路
图2-1、超声波模块电路
超声波模块如图2-1所示。
从P2.6口给Trig口送一个10us的脉冲,超声波模块自动发出40Khz的超声波,单片机中断计时。
当遇到障碍物时超声波返回,并将一个高平信号送入单片机,中断关闭。
2.2、数码管显示电路
图2-2、数码管显示电路
显示电路采用采用LED数码管显示。
本系统采用动态显示方式。
该组数码管位共阳极数码管。
当有低电平驱动时,数码管亮。
2.3、单片机最小电路
图2-3、最小单片机电路
单片机最小电路是单片机能正常工作的最小外接电路单元。
是设计电路的核心部分,也是整个作品最关键,最重要的部分。
单片机最小电路包括:
复位电路,晶振电路。
2.4、键盘连接
图2-4、矩阵键盘电路
该矩阵键盘采用扫描式工作读入方式,扫描式键盘接口是一个输入输出接口,行是输入接口,而列式输出接口,输入接口主要功能是解决数据输入的缓冲问题,而列输出接口主要功能是进行数据保持能力。
系统扫描键盘是若有键按下,则执行主程序相应程序,实现相应功能。
第三章、系统软件设计
软件是一个机器的灵魂,没有软件,机器就是一堆废铁,所以软件是一个机器必不可少的部分,本章主要介绍单片机超声波测距的软件设计。
3.1、主程序流程图
图3-1、主程序流程图
3.2、子程序设计
3.2.1、延时程序
voidDelayUs2x(unsignedchart)
{
while(--t);
}
voidDelayMs(unsignedchart)
{
while(t--)
{
//大致延时1mS
DelayUs2x(245);
DelayUs2x(245);
}
}
3.2.2、键盘扫描程序
voidkey_scanf(void)
{
if(p10==0)
{
DelayMs(10);
if(p10==0)
a=1;
}
if(p11==0)
{
DelayMs(10);
if(p11==0)
a=0;
}
if(p12==0)
{
DelayMs(10);
if(p12==0)
{
a=0;
disbuff[0]=0;
disbuff[1]=0;
disbuff[2]=0;
disbuff[3]=0;
}
}
}
3.2.3、超声波模块驱动程序
voidzd3()interrupt3//T1中断用来驱动超声波模块
{key_scanf();每800ms就发送一次超声波
TH1=0xf8;这样就能进行连续多次测距
TL1=0x30;
timer++;
if(timer>=400)
{
timer=0;
TX=1;//800MS启动一次模块
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
TX=0;//给超声波模块发送端一个10us的高电平,就能发送40khz的超声波
}
}
3.2.4、计算程序
voidConut(void)
{
floatS1;
time=TH0*256+TL0;
TH0=0;
TL0=0;
S1=(time*1.7)/100;//算出来是CM
S=S1*10;
if((S>=7000)||flag==1)//超出测量范围显示“-”
{
flag=0;
disbuff[0]=10;//“-”
disbuff[1]=10;//“-”
disbuff[2]=10;//“-”
disbuff[3]=10;//“-”
}
else
{
disbuff[0]=S/1000;
disbuff[1]=S/100%10;
disbuff[2]=S/10%10;
disbuff[3]=S%10;
}
}
3.2.5、数码管显示程序
4位共阳数码管的驱动程序如下:
voidDisplay(void)//扫描数码管
{
p20=0;
p21=1;
p22=1;
p23=1;
P0=discode[disbuff[0]];//第1个数码管点亮
DelayUs2x(20);
P0=0xff;
p20=1;
p21=0;
p22=1;
p23=1;
P0=discode[disbuff[1]];//第2个数码管点亮
DelayUs2x(20);
P0=0xff;
p20=1;
p22=0;
p21=1;
p23=1;
P0=(discode[disbuff[2]])&0x7f;//第3个数码管点亮
DelayUs2x(20);
P0=0xff;
p20=1;
p23=0;
p21=1;
p22=1;
P0=discode[disbuff[3]];//第4个数码管点亮
DelayUs2x(20);
P0=0xff;
p20=1;
p23=1;
p21=1;
p22=1;
//DelayMs
(2);//显示小数}
第四章、调试结果
按第二章和第三章的原理接好电路图,把程序下载进去,接下来我们就能看到结果了。
如图4-1所示,其显示结果为20.6CM。
图4-1、LED显示结果
这个设计需要用到三个按键,键1、键2、键3。
其中键1为开始键,键2为暂停键,键3为复位键。
先把单片机接好电源,按下键1就开始测距,距离显示在LED显示器上,按下键2就会把显示结果暂停,如图4-1所示。
按下键3,显示器自动复位为0
实验总结
两周的课程设计结束了,在这次的课程设计中不仅检验了我所学习的知识,也培养了我如何去把握一件事情,如何去做一件事情,又如何完成一件事情。
在设计过程中,与同学分工设计,和同学们相互探讨,相互学习,相互监督。
学会了合作,学会了运筹帷幄,学会了宽容,学会了理解,也学会了做人与处世。
课程设计是我们专业课程知识综合应用的实践训练,着是我们迈向社会,从事职业工作前一个必不少的过程.”千里之行始于足下”,通过这次课程设计,我深深体会到这句千古名言的真正含义.我今天认真的进行课程设计,学会脚踏实地迈开这一步,就是为明天能稳健地在社会大潮中奔跑打下坚实的基础.
通过这次课程设计,本人在多方面都有所提高。
通过这次课程设计,综合运用本专业所学课程的理论和生产实际知识进行一次冷冲压模具设计工作的实际训练从而培养和提高学生独立工作能力,巩固与扩充了冷冲压模具设计等课程所学的内容,掌握冷冲压模具设计的方法和步骤,掌握冷冲压模具设计的基本的模具技能懂得了怎样分析零件的工艺性,怎样确定工艺方案,了解了模具的基本结构,提高了计算能力,绘图能力,熟悉了规范和标准,同时各科相关的课程都有了全面的复习,独立思考的能力也有了提高。
在这次设计过程中,体现出自己单独设计模具的能力以及综合运用知识的能力,体会了学以致用、突出自己劳动成果的喜悦心情,从中发现自己平时学习的不足和薄弱环节,从而加以弥补。
在此感谢我们的指导老师.,老师严谨细致、一丝不苟的作风一直是我工作、学习中的榜样;老师循循善诱的教导和不拘一格的思路给予我无尽的启迪;这次模具设计的每个实验细节和每个数据,都离不开老师您的细心指导。
而您开朗的个性和宽容的态度,帮助我能够很顺利的完成了这次课程设计。
同时感谢对我帮助过的同学们,谢谢你们对我的帮助和支持,让我感受到同学的友谊。
由于本人的设计能力有限,在设计过程中难免出现错误,恳请老师们多多指教,我十分乐意接受你们的批评与指正,本人将万分感谢。
参考文献
单片机原理与应用(第2班)王迎旭主编机械工业出版社
51单片机课程设计周向红主编华中科技大学出版社
附录A、整体电路图
附录B、程序清单
#include
#include
#defineRXp26
#defineTXp27
sbitp26=P2^6;
sbitp27=P2^7;
sbitp20=P2^0;
sbitp21=P2^1;
sbitp22=P2^2;
sbitp23=P2^3;
sbitp10=P1^0;
sbitp11=P1^1;
sbitp12=P1^2;
unsignedinttime=0;
unsignedinttimer=0;
unsignedcharposit=0,a=0;
unsignedlongS=0;
bitflag=0;
unsignedcharconstdiscode[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xBF,0xff/*-*/};
unsignedchardisbuff[4]={0,0,0,0,};
voidkey_scanf(void);
voidDelayUs2x(unsignedchart)
{
while(--t);
}
voidDelayMs(unsignedchart)
{
while(t--)
{
//大致延时1mS
DelayUs2x(245);
DelayUs2x(245);
}
}
voidDisplay(void)//扫描数码管
{
p20=0;
p21=1;
p22=1;
p23=1;
P0=discode[disbuff[0]];
DelayUs2x(20);
P0=0xff;
p20=1;
p21=0;
p22=1;
p23=1;
P0=discode[disbuff[1]];
DelayUs2x(20);
P0=0xff;
p20=1;
p22=0;
p21=1;
p23=1;
P0=(discode[disbuff[2]])&0x7f;
DelayUs2x(20);
P0=0xff;
p20=1;
p23=0;
p21=1;
p22=1;
P0=discode[disbuff[3]];
DelayUs2x(20);
P0=0xff;
p20=1;
p23=1;
p21=1;
p22=1;
//DelayMs
(2);
}
/********************************************************/
voidConut(void)
{
floatS1;
time=TH0*256+TL0;
TH0=0;
TL0=0;
S1=(time*1.7)/100;//算出来是CM
S=S1*10;
if((S>=7000)||flag==1)//超出测量范围显示“-”
{
flag=0;
disbuff[0]=10;//“-”
disbuff[1]=10;//“-”
disbuff[2]=10;//“-”
disbuff[3]=10;//“-”
}
else
{
disbuff[0]=S/1000;
disbuff[1]=S/100%10;
disbuff[2]=S/10%10;
disbuff[3]=S%10;
}
}
/********************************************************/
voidzd0()interrupt1//T0中断用来计数器溢出,超过测距范围
{
flag=1;//中断溢出标志
}
/********************************************************/
voidzd3()interrupt3//T1中断用来扫描数码管和计800MS启动模块
{key_scanf();
TH1=0xf8;
TL1=0x30;
Display();
timer++;
if(timer>=400)
{
timer=0;
TX=1;//800MS启动一次模块
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
TX=0;
}
}
/*********************************************************/
voidmain(void)
{
TMOD=0x11;//设T0为方式1,GATE=1;
TH0=0;
TL0=0;
TH1=0xf8;//2MS定时
TL1=0x30;
ET0=1;//允许T0中断
ET1=1;//允许T1中断
TR1=1;//开启定时器
EA=1;//开启总中断
while
(1)
{
while(!
RX);//当RX为零时等待
TR0=1;//开启计数
while(RX);//当RX为1计数并等待
TR0=0;
key_scanf();
if(a==1)//关闭计数
Conut();//计算
}
}
voidkey_scanf(void)
{
if(p10==0)
{
DelayMs(10);
if(p10==0)
a=1;
}
if(p11==0)
{
DelayMs(10);
if(p11==0)
a=0;
}
if(p12==0)
{
DelayMs(10);
if(p12==0)
{
a=0;
disbuff[0]=0;
disbuff[1]=0;
disbuff[2]=0;
disbuff[3]=0;
}
}
}
电气与信息工程系课程设计评分表
项目
评价
优
良
中
及格
差
设计方案合理性与创造性(10%)
开发板焊接及其调试完成情(10%)
硬件设计或软件编程完成情(20%)
硬件测试或软件调试结果*(10%)
设计说明书质量(20%)
答辩情况(10%)
完成任务情况(10%)
独立工作能力(10%)
出勤情况(10%)
综合评分
指导教师签名:
________________
日期:
________________
注:
表中标*号项目是硬件制作或软件编程类课题必填内容;
此表装订在课程设计说明书的最后一页。
课程设计说明书装订顺序:
封面、任务书、目录、正文、评分表、附件(非16K大小的图纸及程序清单)。