济南大学自动化学院小车倒车测距系统实训报告.docx

上传人:b****4 文档编号:3465382 上传时间:2022-11-23 格式:DOCX 页数:18 大小:566.58KB
下载 相关 举报
济南大学自动化学院小车倒车测距系统实训报告.docx_第1页
第1页 / 共18页
济南大学自动化学院小车倒车测距系统实训报告.docx_第2页
第2页 / 共18页
济南大学自动化学院小车倒车测距系统实训报告.docx_第3页
第3页 / 共18页
济南大学自动化学院小车倒车测距系统实训报告.docx_第4页
第4页 / 共18页
济南大学自动化学院小车倒车测距系统实训报告.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

济南大学自动化学院小车倒车测距系统实训报告.docx

《济南大学自动化学院小车倒车测距系统实训报告.docx》由会员分享,可在线阅读,更多相关《济南大学自动化学院小车倒车测距系统实训报告.docx(18页珍藏版)》请在冰豆网上搜索。

济南大学自动化学院小车倒车测距系统实训报告.docx

济南大学自动化学院小车倒车测距系统实训报告

 

综合实训报告

2013—2014学年第1学期

 

实训名称:

单片机汽车倒车测距仪设计

指导教师:

李春梅

学院:

自动化与电气工程学院

班级:

电传11111班

姓名:

11111

学号:

1111111111111111

 

2013年11月16日

汽车倒车测距仪

一.综合实训的主要内容

根据超声波测距原理,设计一单片机倒车测距仪,并实现距离显示、报警功能。

此次实训设计的主要环节包括了一下三个系统:

1.超声波测距;通过超声波测距模块,获取当前障碍物距离

2.LCD距离显示;通过LCD1602液晶模块显示障碍物距离

3.距离报警';随距离接近,蜂鸣器发出不同频率的报警声

二.

硬件方案设计

(1)HC-SR04超声波测距模块

--主要技术参数:

   1:

使用电压:

DC5V

   2:

电平输出:

高5V

   3:

电平输出:

底0V

   4:

感应角度:

不大于15度

   5:

探测距离:

2cm-450cm

测试距离=高电平时间*声速(340m/s)/2

实物图

--工作原理

(1)采用IO口TRIG触发测距,给至少10us的高电平信号;

(2)模块自动发送8个40khz的方波,自动检测是否有信号返回;

(3)有信号返回,通过IO口ECHO输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。

--本模块使用方法简单,一个控制口发一个10US以上的高电平,就可以在接收口等待高电平输出.一有输出就可以开定时器计时,当此口变为低电平时就可以读定时器的值,此时就为此次测距的时间,方可算出距离.如此不断的周期测,即可以达到你移动测量的值

--超声波时序图

 

(2)单片机芯片模块

--STC89C52单片机作为它的中心控制模块

STC89C52是一种带8K字节闪烁可编程可檫除只读存储器(FPEROM-FlashProgramableandErasableReadOnlyMemory)的低电压,高性能COMOS8的微处理器,俗称单片机。

该器件采用ATMEL搞密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。

使用经典的MCS-51内核,但做了很多的改进使得芯片具有传统51单片机不具备的功能。

在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。

具有以下标准功能:

8k字节Flash,512字节RAM,32位I/O口线,看门狗定时器,内置4KBEEPROM,MAX810复位电路,3个16位定时器/计数器,4个外部中断,一个7向量4级中断结构(兼容传统51的5向量2级中断结构),全双工串行口。

另外STC89C52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。

空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。

掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。

最高运作频率35MHz,6T/12T可选。

--STC89C52的在此设计中的主要功能及特点:

8K字节程序存储空间;

512字节数据存储空间;

内带4K字节EEPROM存储空间;

可直接使用串口下载。

--STC89C52单片机的最小系统引脚图

(3)1602液晶显示模块

--1602功能简介

1602液晶是一种字符型的液晶,它可以显示16*2的32个字符,即16列2行

液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形。

液晶显示器具有厚度薄、适用于大规模集成电路直接驱动、易于实现全彩色显示的特点,目前已经被广泛应用在便携式电脑、数字摄像机、移动信工具等众多领域。

实物图

原理图

--1602的管脚

1602采用标准的16脚接口,其中:

第1脚:

VSS为电源地

第2脚:

VDD接5V电源正极

第3脚:

V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。

第4脚:

RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。

第5脚:

RW为读写信号线,高电平

(1)时进行读操作,低电平(0)时进行写操作。

第6脚:

E(或EN)端为使能(enable)端。

第7~14脚:

D0~D7为8位双向数据端。

第15~16脚:

空脚或背灯电源。

15脚背光正极,16脚背光负极。

--1602液晶的工作原理

1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:

阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。

因为1602识别的是ASCII码,试验可以用ASCII码直接赋值,在单片机编程中还可以用字符型常量或变量赋值,如'A’。

通过查找1602的16进制ASCII码地址表,并把地址传送给1602,当然在传送之前需要对1602进行初始化

--1602液晶的操作控制

读状态输入RS=0,RW=1,E=1

写指令输入RS=0,RW=0,D0~7=指令码,E=H脉冲

读数据输入RS=1,RW=1,E=1

写数据输入RS=1,RW=0,D0~7=数据,E=H脉冲

--1602液晶的初始化

写指令38H:

显示模式的设置

写指令08H:

显示关闭

写指令01H:

显示清屏

写指令06H:

显示光标移动设置

写指令0cH:

显示开及光标设置

每次读写前,需要进行忙检测

再把需要显示的字符的地址输入

此设计是测试距离,在初始化后,把“distance”给1602液晶,当测距模块测得距离后,经单片机处理后把数值给1602液晶

(4)蜂鸣器模块

原理图

--蜂鸣器模块的功能

蜂鸣器作为一个发声模块,只有两个引脚,单片机时不能直接驱动蜂鸣器的,所以需要一个驱动电路来使得蜂鸣器工作,此电路是利用PNP三极管来驱动蜂鸣器。

此时单片机通过某一引脚产生不同频率的方波来驱动蜂鸣器发出不同的声音

--蜂鸣器工作原理

按上图所示,当P2^3为高电平时,三极管截止,此时蜂鸣器是不响的,但是当这个引脚为低电平时,三极管导通,蜂鸣器发出响声。

这样,通过改变蜂鸣器高低电平的时间,从而发出不同频率的声音。

测距模块把测得的距离给单片机,单片机处理后,单品机给蜂鸣器不同频率的方波,发出不同频率的声音。

此设计分成三段,距离<10厘米,距离>10厘米且距离<50厘米和距离>50厘米三段,不同的段发出不同的声音。

(4)总设计方案

我们选用STC89C52单片机作为它的中心控制模块,HC-SR04作为超声波检测模块,1602作为测得结果的液晶显示模块,蜂鸣器是用来发出不同频率声音来实现提醒的功能。

三.软件编程

1.程序流程图

 

是是否

是否

 

2.主程序

#include

sbitRS=P2^0;//当RS=0时,读出的状态或写入的是指令,RS=1时表示写入或独读出的是数据

sbitRW=P2^1;//读写转换

sbitEG=P2^2;//始能端控制

sbitfeng=P2^3;

sbittrig=P2^4;

sbittest=P2^5;

unsignedintdistance;

unsignedintm;

unsignedcharcount;

voidwrite_com(unsignedcharn);

voiddelay(unsignedintt);

voidwrite_data(unsignedchark);

unsignedcharcheck_busy();

voidLCD_Write_String(unsignedcharx,unsignedchary,unsignedchar*s);

voidLCD_Clear();

voiddisplay(unsignedintnumber);

unsignedintcheck_distance();

voiddisplay(unsignedintc);

voidcompara(unsignedinta);

voidintial()

{

TMOD=0x01;//定时器1初始化,设置为16位自动重装模式

TL0=0x66;

TH0=0xfc;//1ms

ET0=1;//开定时器2

EA=1;//总中断使能

write_com(0x38);//设置显示模式,2*16,5*7D的点阵,8位数据口

delay(5);

write_com(0x38);

write_com(0x08);//关闭显示和光标

write_com(0x06);//当写一个字符时整屏不移动,只有光标移动

write_com(0x01);//表示清屏

delay(5);

write_com(0x0c);//显示开关及光标设置

}

voidLCD_Clear(void)

{

write_com(0x01);

delay(5);

}

voidwrite_com(unsignedcharn)//写入指令

{

while(check_busy()==0x80);//检测液晶是否处在忙的状态,只有在不忙时,才进行下一步

RS=0;

RW=0;

P0=n;

EG=1;

delay(5);

EG=0;

}

unsignedcharcheck_busy()

{

P0=0xFF;//检测最高位,如果是1,说明是在忙的状态

RS=0;

RW=1;

EG=0;

delay(10);

EG=1;

return(P0&0x80);

}

voidwrite_data(unsignedchark)//表示写入数据

{

while(check_busy()==0x80);//检测液晶是否处在忙的状态,只有在不忙时,才进行下一步

RS=1;

RW=0;

P0=k;

delay(5);

EG=1;

delay(5);

EG=0;

}

voidLCD_Write_String(unsignedcharx,unsignedchary,unsignedchar*s)

{

if(y==0)

{

write_com(0x80+x);//表示第一行

}

else

{

write_com(0xC0+x);//表示第二行

}

while(*s)

{

write_data(*s);

s++;

}

}

voiddelay(unsignedintt)

{

while(t--);

}

voidmain()

{

intial();

LCD_Clear();//清屏

LCD_Write_String(2,0,"distance");

while

(1)

{

m=check_distance();//检测距离

compara(m);

display(m);

delay(1000);

}

}

voiddisplay(unsignedintnumber)

{

unsignedintge,shi,bai,qian;

qian=(number/1000);

bai=(number/100)%10;

shi=(number/10)%10;

ge=number%10;

write_com(0xc0+0x06);

write_data(qian+48);

write_data(bai+48);

write_data(shi+48);

write_data(ge+48);//小数点的ASCII

write_data(46);

write_data(99);//"c"的ASCII

write_data(109);//"m"的ASCII

}

unsignedintcheck_distance()

{

unsignedcharl;

unsignedinth,y;

trig=0;

test=0;

trig=1;

delay(20);

trig=0;

while(test==0);//超声波回波检测

TR0=1;

while(test==1);

TR0=0;

l=TL0;//这里读取它的小数点后的数据

h=TH0;

y=(h<<8)+l;

y=y-0xfc66;//us部分

distance=y+1000*count;//计算总时间

TL0=0x66;//重装初值方便下一次超声波测距

TH0=0xfc;

count=0;

delay(30);

distance=distance*0.017;//cm

delay(30);

return(distance);

}

voidtimer0(void)interrupt1//超声波计时中断

{

TF0=0;//一直计时当超声哦接收信号后操作定时器

TL0=0x66;

TH0=0xfc;

count++;

if(count==18)//超声波回声脉宽最多18ms

{

TR0=0;

TL0=0x66;

TH0=0xfc;

count=0;

}

}

voidcompara(unsignedinta)

{

if(a<5)

{

delay(5);

feng=~feng;

}

elseif(a<10)

{

delay(50);

feng=~feng;

}

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

elseif(a<20)

{

delay(100);

feng=~feng;

}

elseif(a<40)

{

delay(200);

feng=~feng;

}

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

else

{

delay(10000);

feng=~feng;

}

}

四.总结

本次课设最基本的原来全部都来自于我们的书本,所以一切我们都需要回到书本,回到课堂曾经用过的知识,我觉得这一点很好。

我们可以通过我们学过的只是进行复习以及加深对他们的印象,并且将他们与实际结合起来。

下面我就分软件和硬件进行阐述。

1、硬件部分--硬件是软件的前提,所以主要通过上网查阅资料,翻阅书本,花了大部分的时间在硬件的确定上,一旦硬件搞定了,那么剩下的就会得心应手一些。

此外,我们一个组还一起研究学习了protel软件,学会了如何绘制电路图。

在这其中也碰到了许多困难,我们通过一同协作克服了这些困难。

2、软件部分--老师曾经教导我们,编程高手花90%时间思考,10%来写。

要把思路理清,表达出来,就要画流程图。

虽然这次设计的思路看似简单,但编写起来依然感到吃力,因为有个元件我第一次编程的——8259,加上中断程序的编写,不仅要写处理程序,还要写现场保护和现场恢复,之前还要写入口地址。

对于编程,最好就是参考,于是我就反复看课本上关于中断程序的例子,从中参透,加上上网查找资料和请教师兄,最终完成理论的程序。

3、团队协作--老师为什么安排我们一组人完成这样一个项目,目的就是让我们能够有这种团队协作的意识。

这次我和搭档合作,主要是因为我们曾经有过合作的经验,互相比较了解对方。

所以在合作的过程中还是相当顺利的。

当一个人出现些许问题的时候,需要开动大家的脑筋去解决这些问题,这些可能是一个人所无法做到的,这也是团队协作意识的精髓吧。

4、不足之处及建议--本次课设最让我感觉之深的地方就是要学会一门技能,你需要花上相当大的功夫。

就比如这次的硬件设计,虽然之前学过一点protel,但是一点需要上手去画的时候,却又不知从何下手。

这就是我这次最大的缺陷。

学一门技能,要精,要学的扎实才是真本事。

5、要说有什么建议的话,我觉得我们这个题目很贴近实际,也希望以后能够有更多这样贴近实际的题目出现,这样我们才能做到理论与实际相结合,才能学的更好。

6、对自己的启发:

其中在最后的程序测试阶段,先初期测定每一个最小系统是否可行通用,发现显示器无论如何都不显示示数,开始以为自己程序编写错误,后来把最简单的输出程序输入还是不显示,然后检查自己连接的实物图是否发生错误,又检查自己的焊接连线问题,看见其他同学的基本完成,虽然比较着急但也只能耐心查找问题,经过整整一下午的排除问题,最终发现自己在焊接单片机的两个引脚短路,才致使自己的液晶显示器没有示数无法显示。

这一件事就告诉我:

无论以后做什么事情,都要细致耐心,特别是如果从事被专业相关的工作时更是如此。

如果是到了工厂工作那时候一个小小的错误甚至会导致无法估计的经济损失,只更加使我明白认真细致做好一件事情的重要性。

五.附(硬件电路图,实物图,实验结果等)

---实物图

 

--硬件电路图

---实验结果

在老师的指导下,通过一系列前期准备工作以及查阅资料、画原理图、选定方案及器材、焊接实物电路板以及最后的调试程序查找问题,最终比较完美的实现汽车倒车测距仪要求的距离显示、报警功能,其中可以检测到2米以内的障碍物,在障碍物在50CM以内和10CM以内时发出不同频率的报警声音。

 

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

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1