吴姝朋基于单片机的汽车倒车测距仪.docx
- 文档编号:18626633
- 上传时间:2023-08-20
- 格式:DOCX
- 页数:31
- 大小:241.40KB
吴姝朋基于单片机的汽车倒车测距仪.docx
《吴姝朋基于单片机的汽车倒车测距仪.docx》由会员分享,可在线阅读,更多相关《吴姝朋基于单片机的汽车倒车测距仪.docx(31页珍藏版)》请在冰点文库上搜索。
吴姝朋基于单片机的汽车倒车测距仪
本科毕业设计报告
设计题目:
基于单片机的汽车倒车测距仪
报告作者:
指导教师:
专业:
电子电气工程学院
2016年4月16日
摘要
汽车倒车时,很难掌握到尾部的视野。
往往由于看不到障碍物,在倒车时擦碰到尾部,造成不必要的损失。
为了预防擦碰障碍物,设计出了一款基于单片机的汽车倒车测距仪。
本次设计主要是利用STC89C52单片机、超声波传感器完成测距报警系统的制作,以STC89C52为主控芯片,利用超声波对距离的检测,将前方物体的距离探测出来,然后单片机处理运算,与设定的报警距离值进行比较判断,当测得距离小于设定值时,STC89C52发出指令控制蜂鸣器报警,及时提醒车主减速刹车,避免擦碰。
关键词:
超声波传感器;STC89C52
目录
1系统方案1
1.1主控芯片的选择1
1.2距离测量模块的选择1
1.3四位数码管显示模块的选择1
2总体设计方案及论证1
2.1总体方案设计1
3硬件实现及单元电路设计2
3.1主控制模块2
3.2电源设计3
3.3超声波测试模块3
3.4时钟电路的设计4
3.5复位电路的设计4
3.6声音报警电路的设计4
3.7显示模块5
4软件设计5
4.1主程序工作流程图5
5测试方案与测试结果7
5.1测试方案7
5.1.1硬件测试7
5.1.2硬件软件联调8
5.2测试条件与仪器8
5.3测试结果及分析8
5.3.1测试结果8
5.3.2测试分析与结论8
6结论与心得8
7参考文献9
附录10
1系统方案
本系统主要由主控芯片、距离测量模块、报警模块、按键控制模块、四位数码管显示模块组成。
1.1主控芯片的选择
单片机比较
方案一:
采用Atmel公司的51系列单片机
Atmel公司的51单片机为8位机,价格便宜,控制简单,但是在线调试功能不叫差,程序调试需要专用的仿真器,仿真器价格高昂,并且受时钟限制,计时精度不高,外围电路也增加了系统的不可靠性。
方案二:
采用STC公司的51系列单片机
STC公司的51单片机为8位机,价格便宜,控制简单,在线调试简单,只需要TX,RX两根线可以做到烧录程序与在线调试。
外围电路简单,抗干扰能力强。
通过比较,选择方案二,采用STC系列单片机STC89c52作为控制器。
1.2距离测量模块的选择
方案一:
超声波测距
超声波在气体、液体及固体中以不同速度传播,定向性好、能量集中、传输过程中衰减较小、反射能力较强。
超声波能以一定速度定向传播、遇障碍物后形成反射,利用这一特性,通过测定超声波往返所用时间就可计算出实际距离,从而实现无接触测量物体距离。
超声波测距迅速、方便,且不受光线等因素影响。
方案二:
红外线测距
用调制的红外光进行精密测距的仪器,测程一般为1-5公里。
利用的是红外线传播时的不扩散原理:
因为红外线在穿越其它物质时折射率很小,所以长距离的测距仪都会考虑红外线,而红外线的传播是需要时间的,当红外线从测距仪发出碰到反射物被反射回来被测距仪接受到再根据红外线从发出到被接受到的时间及红外线的传播速度就可以算出距离红外测距的优点是便宜,易制,安全,缺点是精度低,距离近,方向性差。
汽车倒车距离比较短,所需要求不是特别高综合考虑选择超声波测距。
1.3四位数码管显示模块的选择
方案一:
采用1602字符液晶进行显示
能显示字符,控制简单,良好的背光性能,功耗低
方案二:
采用12864液晶进行显示
价格较高,电路占用面积大,不利于小型化。
方案三:
采用数码管显示
显示字符,控制简单,价格便宜,功耗低。
综合考虑,为了更便于操作以及后期开发,选择方案三
2总体设计方案及论证
2.1总体方案设计
本设计包括硬件和软件设计两个部分。
模块划分为数据采集、按键控制、四位数码管显示、报警等子模块。
电路结构可划分为:
超声波传感器、蜂鸣器、单片机控制电路。
就此设计的核心模块来说,单片机就是设计的中心单元,所以此系统也是单片机应用系统的一种应用。
单片机应用系统也是有硬件和软件组成。
硬件包括单片机、输入/输出设备、以及外围应用电路等组成的系统,软件是各种工作程序的总称。
单片机应用系统的研制过程包括总体设计、硬件设计、软件设计等几个阶段。
系统采用STC89C52单片机作为核心控制单元,当测得的距离小于设定距离时,主控芯片将测得的数值与设定值进行比较处理。
然后控制蜂鸣器报警。
系统总体的设计方框图如图1所示。
电源
STC89C52主控制器模块
按键控制
超声波传感器模块
4位数码管显示模块
蜂鸣器报警模块
图1系统方框图
3硬件实现及单元电路设计
3.1主控制模块
主控制最小系统电路如图2所示。
图2最小系统
硬件电路总设计见图3,从以上的分析可知在本设计中要用到如下器件:
STC89C52、超声波传感器、按键、四位数码管、蜂鸣器等一些单片机外围应用电路。
其中D1为电源工作指示灯。
电路中用到3个按键,一个是设定键,一个加键,一个减键。
图3总设计电路图
3.2电源设计
电源部分的设计采用3节5号干电池4.5V供电。
3.3超声波测试模块
超声波模块采用现成的HC-SR04超声波模块,该模块可提2cm-400cm的非接触式距离感测功能,测距精度可达高到3mm。
模块包括超声波发射器、接收器与控制电路。
基本工作原理:
采用IO口TRIG触发测距,给至少10us的高电平信号;模块自动发送8个40khz的方波,自动检测是否有信号返回;有信号返回,通过IO口ECHO输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。
测试距离=(高电平时间*声速(340M/S))/2。
实物如下图4。
其中VCC供5V电源,GND为地线,TRIG触发控制信号输入,ECHO回响信号输出等四支线。
图4超声波模块实物图
超声波探测模块HC-SR04的使用方法如下:
IO口触发,给Trig口至少10us的高电平,启动测量;模块自动发送8个40Khz的方波,自动检测是否有信号返回;有信号返回,通过IO口Echo输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间,测试距离=(高电平时间*340)/2,单位为m。
程序中测试功能主要由两个函数完成。
实现中采用定时器0进行定时测量,8分频,TCNTT0预设值0XCE,当timer0溢出中断发生2500次时为125ms,计算公式为(单位:
ms):
T=(定时器0溢出次数*(0XFF-0XCE))/1000
其中定时器0初值计算依据分频不同而有差异。
3.4时钟电路的设计
XTAL1和XTAL2分别为反向放大器的输入和输出。
该反向放大器可以配置为片内振荡器。
石晶振荡和陶瓷振荡均可采用。
如采用外部时钟源驱动器件,XTAL2应不接。
因为一个机器周期含有6个状态周期,而每个状态周期为2个振荡周期,所以一个机器周期共有12个振荡周期,如果外接石英晶体振荡器的振荡频率为12MHZ,一个振荡周期为1/12us,故而一个机器周期为1us。
如图5所示为时钟电路。
图5时钟电路图
3.5复位电路的设计
复位方法一般有上电自动复位和外部按键手动复位,单片机在时钟电路工作以后,在RESET端持续给出2个机器周期的高电平时就可以完成复位操作。
例如使用晶振频率为12MHz时,则复位信号持续时间应不小于2us。
本设计采用的是自动复位电路。
3.6声音报警电路的设计
如下图所示,用一个Speaker和三极管、电阻接到单片机的P13引脚上,构成声音报警电路,如图6示为声音报警电路。
图6声音报警电路图
3.7显示模块
显示模块采用数码管显示接口电路如图7
图7数码管电路
4软件设计
4.1主程序工作流程图
按上述工作原理和硬件结构分析可知系统主程序工作流程图如下图8所示;
图8主程序工作流程图
超声波探测程序流程图:
图9超声波探测程序流程图
5测试方案与测试结果
5.1测试方案
5.1.1硬件测试
1)对每个设备进行独立上电测试,检验其能否正常工作;
2)焊接完成后,用万用表检测是否存在虚焊或者焊接错误等情况;
3)将外围设备接入继电器,并将所有外围设备并联在一起,便于操作和整体美观性的提升。
5.1.2硬件软件联调
整体方案为先将每个模块独立,编写简单程序,测试每个模块能否正常工作。
然后在系统地编写程序,最后整体调试,完成测试。
具体步骤如下:
1)编写一个程序,让四位数码管显示字符。
2)加入测量模块,看四位数码管显示距离多少。
3)加入按键,按下设置键看是否进入设置界面。
4)加入报警模块看是否报警。
5.2测试条件与仪器
测试条件:
检查多次,仿真电路和硬件电路必须与系统原理图完全相同,并且检查无误,硬件电路保证无虚焊。
测试仪器:
高精度的数字毫伏表,模拟示波器,数字示波器,数字万用表,指针式万用表。
5.3测试结果及分析
5.3.1测试结果
接通电源,按下设置键,设置好安全距离,再按退出设置界面,面对障碍物移动,显示器显示此时距离障碍物的距离。
距离大于安全距离时报警器不报警,一旦距离小于安全距离,报警器开始报警。
5.3.2测试分析与结论
按下设置键,再按加(减)键,设置好安全距离为0.5M,如图10所示,开始测距,当测试距离大于安全距离,如图11所示,报警器不鸣叫。
显示与障碍物的距离为0.72M,移动小车模型到小于安全距离0.5M时,报警器报警。
如图12所示,移动小车模型距障碍物大于安全距离时,停止报警。
图10设置安全距离图11大于于安全距离图12小于安全距离
根据上述测试,由此可以得出以下结论:
正常
综上所述,本设计达到设计要求
6结论与心得
本设计研究了一种基于单片机技术的超声波智能测距报警系统。
该系统通过以STC89C52单片机为工作处理器核心,超声波传感器,它是一种新颖的被动式超声波探测器件,能够以非接触测出前方物体距离,并将其转化为相应的电信号输出.该报警器的最大特点就是使用户能够操作简单、易懂、灵活;且安装方便、智能性高、误报率低。
随着现代人们安全意识的增强以及科学技术的快速发展,相信报警器必将在更广阔的领域得到更深层次的应用。
7参考文献
[1]吴政江.单片机控制红外线防盗报警器[J].锦州师范学院学报,2001.45~52.
[2]宋文绪.传感器与检测技术[M].北京:
高等教育出版社,2004.72~83.
[3]余锡存.单片机原理及接口技术[M].西安:
西安电子科技大学出版社,2000.65~72.
[4]唐桃波,陈玉林.基于AT89C51的智能无线安防报警器[J].电子设计应用,2003,5(6):
49~51.
[5]李全利.单片机原理及接口技术[M].北京:
北京航空航天大学出版社,2004.32~40.
[6]薛均义,张彦斌.MCS-51系列单片微型计算机及其应用[M].西安:
西安交通大学出版社,2005.69~73.
[7]徐爱钧,彭秀华.单片机高级语言C51应用程序设计[M].北京:
北京航空航天大学出版社,2006.100~108
[8]康华光.电子技术基础(模拟部分)[M].北京:
高等教育出版社,2004.55~61.
附录
附件1:
程序
#include
#include
#include"eepom52.h"
#defineucharunsignedchar
#defineuintunsignedint
//数码管段选定义0123456789
ucharcodesmg_du[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff};//断码
//数码管位选定义
ucharcodesmg_we[]={0xe0,0xd0,0xb0,0x70};
uchardis_smg[8]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8};
sbitsmg_we1=P3^4;//数码管位选定义
sbitsmg_we2=P3^5;
sbitsmg_we3=P3^6;
sbitsmg_we4=P3^7;
sbitc_send=P3^2;//超声波发射
sbitc_recive=P3^3;//超声波接收
ucharflag_hc_value;//超声波中间变量
sbitbeep=P2^3;//蜂鸣器IO口定义
bitflag_key_b_en,flag_key_set_en;//按键蜂鸣器使能
ucharsmg_i=3;//显示数码管的个位数
bitflag_300ms;
bitkey_500ms;
longdistance;//距离
uintset_d;//距离
bitflag_csb_juli;//超声波超出量程
uintflag_time0;//用来保存定时器0的时候的
//按键的IO变量的定义
ucharkey_can;//按键值的变量
ucharzd_break_en,zd_break_value;//自动退出设置界面
ucharmenu_shudu=10;//用来控制连加的速度
bitflag_lj_en;//按键连加使能
bitflag_lj_3_en;//按键连3次连加后使能加的数就越大了
ucharkey_time,flag_value;//用做连加的中间变量
ucharmenu_1;//菜单设计的变量
uchara_a;
/***********************1ms延时函数**************************/
voiddelay_1ms(uintq)
{
uinti,j;
for(i=0;i for(j=0;j<120;j++); } /***********************处理距离函数****************************/ voidsmg_display() { dis_smg[0]=smg_du[distance%10]; dis_smg[1]=smg_du[distance/10%10]; dis_smg[2]=smg_du[distance/100%10]&0x7f; } /******************把数据保存到单片机内部eepom中***************/ voidwrite_eepom() { SectorErase(0x2000); byte_write(0x2000,set_d%256); byte_write(0x2001,set_d/256); byte_write(0x2058,a_a); } /******************把数据从单片机内部eepom中读出***************/ voidread_eepom() { set_d=byte_read(0x2001); set_d<<=8; set_d|=byte_read(0x2000); a_a=byte_read(0x2058); } /**************开机自检eepom初始化*****************/ voidinit_eepom() { read_eepom();//先读 if(a_a! =1)//新的单片机初始单片机内问EEPOM { set_d=100; a_a=1; write_eepom(); } } /****************独立按键处理函数********************/ voidkey() { staticucharkey_new=0,key_old=0,key_value=0; if(key_new==0) {//按键松开的时候做松手检测 if((P2&0x07)==0x07) key_value++; else key_value=0; if(key_value>=5) { key_value=0; key_new=1; flag_lj_en=0;//关闭连加使能 flag_lj_3_en=0;//关闭3秒后使能 flag_value=0;//清零 key_time=0; write_eepom(); } } else { if((P2&0x07)! =0x07) key_value++;//按键按下的时候 else key_value=0; if(key_value>=5) { key_value=0; key_new=0; flag_lj_en=1;//连加使能 zd_break_en=1;//自动退出设置界使能 zd_break_value=0;//自动退出设置界变量清零 flag_key_b_en=1;//按键蜂鸣器使能 } } key_can=20; if(key_500ms==1)//连加 { key_500ms=0; key_new=0; key_old=1; zd_break_value=0; } if((key_new==0)&&(key_old==1)) { switch(P2&0x07) { case0x06: key_can=3;break;//得到k2键值 case0x05: key_can=2;break;//得到k3键值 case0x03: key_can=1;break;//得到k4键值 } //dis_smg[3]=smg_du[key_can%10]; } key_old=key_new; } voidsmg_we_switch(uchari) { switch(i) { case0: smg_we1=0;smg_we2=1;smg_we3=1;smg_we4=1;break; case1: smg_we1=1;smg_we2=0;smg_we3=1;smg_we4=1;break; case2: smg_we1=1;smg_we2=1;smg_we3=0;smg_we4=1;break; case3: smg_we1=1;smg_we2=1;smg_we3=1;smg_we4=0;break; } } /***********************数码显示函数**************************/ voiddisplay() { staticuchari; i++; if(i>=smg_i) i=0; //P1=0xff;//段选 //P3=0xf0|(P3&0x0f);//位选 //P3=smg_we[i]|(P3&0x0f);//位选 smg_we_switch(i); P1=dis_smg[i];//段选 } voiddelay() { _nop_();//执行一条_nop_()指令就是1us _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); } /*********************超声波测距程序*************************/ voidsend_wave() { c_send=1;//10us的高电平触发 delay(); c_send=0; TH0=0;//给定时器0清零 TL0=0; TR0=0;//关定时器0定时 flag_hc_value=0; while(! c_recive);//当c_recive为零时等待 TR0=1; while(c_recive)//当c_recive为1计数并等待 { flag_time0=TH0*256+TL0; if((flag_hc_value>1)||(flag_time0>65000))//当超声波超过测量范围时,显示3个888 { TR0=0; flag_csb_juli=2; distance=888; flag_hc_value=0; break; } else { flag_csb_juli=1; } } if(flag_csb_juli==1) { TR0=0;//关定时器0定时 distance=TH0;//读出定时器0的时间 distance=distance*256+TL0; distance+=(flag_hc_value*65536);//算出超声波测距的时间得到单位是ms distance*=0.017;//0.017=340M/2=170M=0.017M算出来是米 if(distance>350)//距离=速度*时间 { distance=888;//如果大于3.8m就超出超声波的量程 } } } /*********************定时器0、定时器1初始化******************/ voidtime_init() { EA=1;//开总中断 TMOD=0X11;//定时器0、定时器1工作方式1 ET0=1;//开定时器0中断 TR0=1;//允许定时器0定时 ET1=
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 吴姝朋 基于 单片机 汽车 倒车 测距仪