单片机汽车倒车测距仪资料.docx

上传人:b****3 文档编号:3683149 上传时间:2022-11-24 格式:DOCX 页数:14 大小:980.50KB
下载 相关 举报
单片机汽车倒车测距仪资料.docx_第1页
第1页 / 共14页
单片机汽车倒车测距仪资料.docx_第2页
第2页 / 共14页
单片机汽车倒车测距仪资料.docx_第3页
第3页 / 共14页
单片机汽车倒车测距仪资料.docx_第4页
第4页 / 共14页
单片机汽车倒车测距仪资料.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

单片机汽车倒车测距仪资料.docx

《单片机汽车倒车测距仪资料.docx》由会员分享,可在线阅读,更多相关《单片机汽车倒车测距仪资料.docx(14页珍藏版)》请在冰豆网上搜索。

单片机汽车倒车测距仪资料.docx

单片机汽车倒车测距仪资料

 

单片机汽车倒车测距仪

 

学号:

班级:

姓名:

 

摘要

 

本设计是一种基于AT89C52单片机的超声波测距系统,由单片机模块、超声波模块、液晶显示模块等组成。

本设计利用一片单片机对超声波信号循环不断地进行采集,能测量出倒车方向的障碍物与汽车之间的距离,并通过LCD显示模块显示两者之间的距离,然后通过蜂鸣器发出不同频率的声响,从而起到提示和报警的作用。

 

关键词:

单片机超声波液晶显示信号

 

Abstract

 

ThisdesignisakindofultrasonicrangingsystembasedonAT89C52MCU,MCU,ultrasonicmodulebymodule,LCDmodule.Thisdesignusingasinglechipontheultrasonicsignalcontinuouslycollected,canmeasurebetweentheobstacleandthecarreversingthedirectionofthedistance,andthroughtheLCDdisplaymoduletodisplaythedistancebetweenthetwo,andthenthroughthebuzzersoundsofdifferentfrequenciesanddifferentcolorsoftheLEDlightout,thusplaystheroleoftipsandalarm.

 

Keywords:

singlechipultrasonicliquidcrystaldisplaysignal

 

目录

1方案设计-1-

1.1主控模块选择-1-

1.2超声波模块-1-

1.3液晶显示模块-2-

1.4提示报警模块-2-

2结束语

3参考文献-4-

4附件

1方案设计

1.1主控模块选择

单片机控制模块在本系统中处于核心地位,其工作包括号的采集,进行数据处理,控制执行机构的运行等。

对单片机控制模块的基本要求是具有较高的速度且资源配置满足要求。

AT89C52是一个低电压,高性能CMOS8位单片机,片内含8kbytes的可反复擦写的Flash只读程序存储器和256bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,AT89C52单片机在电子行业中有着广泛的应用。

单片机技术成熟,且易操作,所以主控芯片选择AT89C52单片机。

1.2超声波模块

本模块性能稳定,测度距离精确。

能和国外的SRF05,SRF02等超声波

测距模块相媲美。

模块高精度,盲区(2cm)超近,测量稳定。

使用本模块,占用单片机的两个IO口,一个IO口做为触发端。

一个IO口做为回波PWM信号捕捉引脚。

写程序时,先在TRIG引脚端为一个大约10US的高电平触发模块,同时模块内部将发出8个40kHz周期电平并检测回波。

并在内部程序处理变换成一个PWM的信号从Echo引脚输出,一旦检测到有回波信号则输出回响信号,高电平持续的时间就是超声波从发射到返回的时间.测试距离=(高电平时间*声速(340M/S))/2;目前的超声波模块精度能到1cm。

1.3液晶显示模块

字符型液晶显示模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,专门用于显示字母、数字、符号等点阵式LCD。

LCD1602LCD1是字符型液晶,它是16*2的显示的,采用标准的16脚(带背光)接口,各引脚接口说明如表:

1.4提示报警模块

蜂鸣器是一种一体化结构的电子讯响器,主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。

它的发声原理是电流通过电磁线圈,使电磁线圈产生磁场来驱动振动膜发声的,因此需要一定的电流才能驱动它,单片机IO引脚输出的电流较小,单片机输出的TTL电平基本上驱动不了蜂鸣器,因此需要增加一个电流放大的电路。

通过一个三极管C8550来放大驱动蜂鸣器。

根据声音的不同频率来辨别距离的不同。

2结束语

通过调试完成了题目的基本设计要求,在某些方面系统性能还超过了题目要求。

通过设计学会了软件编程和硬件开发技能,懂得了软硬件结合的设计,理论联系实际的重要性,这对我们以后的学习和工作不无裨益。

当然,我们的设计还存在着一些缺陷,有待于在将来设计中进一步提高。

3参考文献

[1]王兆安刘进军电力电子技术(第五版)北京:

机械工业出版社2009.5

[2]童诗白华成英模拟电子技术基础(第四版)北京:

高等教育出版社2006.5

[3]阎石数字电子技术基础(第五版)北京:

高等教育出版社2006.5

[4]孙涵芳徐爱卿单片机原理及应用北京:

北京航空航天大学出版社2004.6

 

4附件

附件:

1系统框图

附件:

2电路图

 

附件:

3实物

 

附件:

4程序

#include//包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

#include

sbitRS=P2^6;//定义端口

sbitRW=P2^5;

sbitEN=P2^4;

sbitTX=P1^0;

sbitRX=P1^1;

sbitBEEP=P1^2;

#defineRS_CLRRS=0

#defineRS_SETRS=1

#defineRW_CLRRW=0

#defineRW_SETRW=1

#defineEN_CLREN=0

#defineEN_SETEN=1

#defineDataPortP0

#defineucharunsignedchar

#defineuintunsignedint

unsignedcharcodeASCII[]={'0','1','2','3','4','5','6','7','8','9'};

unsignedchardisbuff[]={0,0,0,0,};

/*------------------------------------------------

uS延时函数,含有输入参数unsignedchart,无返回值

unsignedchar是定义无符号字符变量,其值的范围是

0~255这里使用晶振12M,精确延时请使用汇编,大致延时

长度如下T=tx2+5uS

------------------------------------------------*/

voidDelayUs2x(unsignedchart)

{

while(t--);

}

/*------------------------------------------------

mS延时函数,含有输入参数unsignedchart,无返回值

unsignedchar是定义无符号字符变量,其值的范围是

0~255这里使用晶振12M,精确延时请使用汇编

------------------------------------------------*/

voiddelay1(unsignedintt)

{

while(t--);

}

voidDelayMs(unsignedchart)

{

while(t--)

{

//大致延时1mS

DelayUs2x(245);

DelayUs2x(245);

}

}

/*------------------------------------------------

判忙函数

------------------------------------------------*/

bitLCD_Check_Busy(void)

{

DataPort=0xFF;

RS_CLR;

RW_SET;

EN_CLR;

_nop_();

EN_SET;

return(bit)(DataPort&0x80);

}

/*------------------------------------------------

写入命令函数

------------------------------------------------*/

voidLCD_Write_Com(unsignedcharcom)

{

while(LCD_Check_Busy());//忙则等待

RS_CLR;

RW_CLR;

EN_SET;

DataPort=com;

_nop_();

EN_CLR;

}

/*------------------------------------------------

写入数据函数

------------------------------------------------*/

voidLCD_Write_Data(unsignedcharData)

{

while(LCD_Check_Busy());//忙则等待

RS_SET;

RW_CLR;

EN_SET;

DataPort=Data;

_nop_();

EN_CLR;

}

/*------------------------------------------------

清屏函数

------------------------------------------------*/

voidLCD_Clear(void)

{

LCD_Write_Com(0x01);

DelayMs(5);

}

/*------------------------------------------------

写入字符函数

------------------------------------------------*/

voidLCD_Write_Char(unsignedcharx,unsignedchary,unsignedcharData)

{

if(y==0)

{

LCD_Write_Com(0x80+x);

}

else

{

LCD_Write_Com(0xC0+x);

}

LCD_Write_Data(Data);

}

/*------------------------------------------------

初始化函数

------------------------------------------------*/

voidLCD_Init(void)

{

LCD_Write_Com(0x38);/*显示模式设置*/

DelayMs(5);

LCD_Write_Com(0x38);

DelayMs(5);

LCD_Write_Com(0x38);

DelayMs(5);

LCD_Write_Com(0x38);

LCD_Write_Com(0x08);/*显示关闭*/

LCD_Write_Com(0x01);/*显示清屏*/

LCD_Write_Com(0x06);/*显示光标移动设置*/

DelayMs(5);

LCD_Write_Com(0x0C);/*显示开及光标设置*/

}

/*------------------------------------------------

时间换算

------------------------------------------------*/

voidConut(void)

{

uintT,S;//,flag;

T=TH0*256+TL0;

TH0=0;

TL0=0;

S=20.4*T/1100;//算出来是CM

if(S>20&S<=30)

{

BEEP=1;//将P0.0口赋值0,该口电平为低,蜂鸣器不响

delay1(50000);//调用延时程序;更改延时数字可以更改延时长度;

//用于改变声音频率

BEEP=0;//将P0.0口赋值1,该口电平为高,使蜂鸣器响

delay1(50000);

}

if(S>10&S<=20)

{

BEEP=1;//将P0.0口赋值0,该口电平为低,蜂鸣器不响

delay1(30000);//调用延时程序;更改延时数字可以更改延时长度;

//用于改变声音频率

BEEP=0;//将P0.0口赋值1,该口电平为高,使蜂鸣器响

delay1(30000);

}

if(S<=10)

{

BEEP=1;//将P0.0口赋值0,该口电平为低,蜂鸣器不响

delay1(5000);//调用延时程序;更改延时数字可以更改延时长度;

//用于改变声音频率

BEEP=0;//将P0.0口赋值1,该口电平为高,使蜂鸣器响

delay1(5000);

}

disbuff[0]=S%1000/100;

disbuff[1]=S%1000%100/10;

disbuff[2]=S%1000%10%10;

LCD_Write_Char(7,1,ASCII[disbuff[0]]);

LCD_Write_Char(8,1,ASCII[disbuff[1]]);

LCD_Write_Char(9,1,ASCII[disbuff[2]]);

LCD_Write_Char(11,1,'C');//显示C

LCD_Write_Char(12,1,'M');//显示M

}

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

voidzhongduan0()interrupt1//T0中断用来计数器溢出,超过测距范围

{

ucharflag;

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

}

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

voidStartModule()//启动模块

{

TX=1;//启动一次模块

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

TX=0;

}

/*------------------------------------------------

主函数

------------------------------------------------*/

voidmain(void)

{

LCD_Init();//初始化

LCD_Clear();//清屏

TMOD=0x01;//设T0为方式1,GATE=1;

TH0=0;

TL0=0;

ET0=1;//允许T0中断

EA=1;//开启总中断

while

(1)

{

StartModule();

while(!

RX);//当RX为零时等待

TR0=1;//开启计数

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

TR0=0;//关闭计数

Conut();

DelayMs(10);

}

}

 

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

当前位置:首页 > 工程科技 > 能源化工

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

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