1、基于89C51单片机的智能倒车雷达作品研究报告基于51单片机的倒车雷达设计一、 引言倒车雷达(Parking Distance Control)是汽车泊车或者车时的安全辅助装置,能以声音或者更为直观的显示告知驾驶员周围障碍物的情况,解除了驾驶员泊车、倒车和起动车辆时前后左右探视所引起的困扰,并帮助驾驶员扫除了视野死角和视线模糊的缺陷,提高驾驶的安全性。目前市场上中低档汽车上装备的倒车雷达探测距离最大一般只有1.5米左右,且报警系统只是采用简单的“滴滴”声。只有稍微高档的倒车雷达才会显示距离或简单的语音提示。考虑到实际情况,本设计从成本考虑,在实现倒车雷达的基本功能同时,综合了液晶显示(1602
2、)、光报警(发光二极管)、声音报警(蜂鸣器)和语音提示(ISD1800)。二、 系统概述系统采用超声波进行测距,软件设计中在50ms中断中发射超声波,超声波接收端连接到P3.2,当接收到返回的超声波时便会触发中断。用1602实时显示距离,当距离小于指定范围时,通过液晶显示提示信息,语音提醒及用不同灯显示不同的距离。三、 硬件设计(1)测距模块 超声波发射模块软件产生40kHz的超声波信号,通过输出引脚输入至驱动器,经驱动器驱动后推动探头产生超声波,40kHz的超声波是利用555时基电路振荡产生。超声波接收模块超声波接收器包括超声波接收探头、信号放大电路及波形变换电路三部分。超声波探头必须采用与
3、发射探头对应的型号。为减少负电源的使用,放大电路采用单电源供电,信号放大和变换采用了一片LM324通用运算放大器,前三级为放大器设计,后一级为比较器设计。测距模块时序分析(2)液晶显示模块 采用1602液晶,设置为162模式,第一行实时显示所测的距离,当出现危险情况时第二行显示提示信息。(3)语音模块美国ISD公司的一种单片820秒单段语音录放电路ISD1800,它的基本结构与ISD1110、1420完全相同,采用CMOS技术,内含振荡器,话筒前置放大,自动增益控制,防混淆滤波器,扬声器驱动及FLASH阵列。电源电压3-5V,在录放模式下,按住REC录音按键不放即录音,RECLED灯会亮起,录
4、音在松开按键时停止,放音有三种情况:1、边沿触发放音,按PE键一下即将全段语音放出,除非断电或语音结束不能停止放音;2、电平触发放音,按住PL键时即放音,松开按键即停止;3、循环放音,置循环放音开关闭合,按动PE键即开始循环放音,只能断电才能停止。四、软件设计本设计中使用了单片机的三个中断源,分别是外部中断和两个定时器中断。定时器0定时50ms,T0中断服务程序中触发超声波的发射,并且开外部中断0。当超声波传感器接收到超声波时会触发外部中断0,在此中断服务程序中读出计数器TH0和TL0中的数。此数与定时器计数初值之差再乘以机器周期即为超声波发射与接收的时间差。再通过公式计算得到探测到的距离。五
5、、 部分源代码/*1602.h*/#ifndef _LCD1602_#define _LCD1602_#include reg52.h #define uchar unsigned char#define uint unsigned int/初始化函数void LCD_init(void);/写数据函数void put_char(uchar);/写指令函数void put_command(uchar);void locate(uchar,uchar);void put_number_1(uint);void put_number(int);void put_string(uchar *);vo
6、id Delay_ms(uint);#endif/*1602.c*/#includeLCD1602.h#define clear 0x01 /清屏指令#define mode 0x38 /模式选择指令,8位2行57点阵#define open 0x07 #define movemode 0x0f #define close 0x08 /关显示指令#define cursor_reset 0x02 /光标复位指令#define LCDdata P0sbit RS=P26;sbit E=P27;/LCD初始化函数void LCD_init(void) uchar i=0; put_command(
7、0x38); /set LCD 16words x 2lines and 5 x 7 Delay_ms(5); put_command(0x38); Delay_ms(5); put_command(0x38); Delay_ms(5); put_command(0x38); Delay_ms(5); put_command(0x38); put_command(0x38); put_command(0x38); put_command(0x38); put_command(0x0e); /put_command(0x0e); put_command(0x01); /清显示 put_comma
8、nd(0x06); /光标和显示模式设置 put_command(0x02); /写命令void put_command(uchar command) RS=0; /RW=0; E=0; LCDdata=command; Delay_ms(1); /5 E=1; Delay_ms(1); /5 E=0;/写数据函数void put_char(uchar datar) E=0; RS=1; /RW=0; LCDdata=datar; E=1; Delay_ms(1); / 5 E=0;/在光标的下个位置显示字符串word的函数void put_string(uchar *string) whil
9、e(*string)!=0) put_char(*string); string+; /用三位显示数值,前面自动加空格或者负号,显示范围-99999void put_number_1(uint number) if(number999) put_string(uchar *)err); /超出范围 return; else if(number99) put_char(number/100+0x30); /百 number=number%100; else put_char(0x8c); /空格 put_char(number/10+0x30); /十 put_char(number%10+0x
10、30); /个 put_char(0x20); /用四位显示数值,前面自动加空格或者负号,显示范围-9999999void put_number(int number) if(number9999) put_string(uchar *) err); /超出范围 return; else if(number999) put_char(number/1000+0x30); /千 number=number-(number/1000)*1000; else put_char(0x8c); /空格 put_char(number/100+0x30); /百 put_char(number/10-nu
11、mber/100*10+0x30); /十 put_char(number%10+0x30); /个 /光标跳到第x(0-1)行,y(0-7)列void locate(uchar x,uchar y) if(x) y|=0x40; y|=0x80; put_command(y);void Delay_ms(uint z) uint x,y; for(x=z;x0;x-) for(y=110;y0;y-); /*main.c*/#include #include LCD1602.hsbit TRIG=P30;sbit ECHO=P32;sbit sb=P20;sbit led1=P21;sbit
12、 led2=P22;uint Time;uint Distance=0;void Inter_init(void); void main() led1=0; led2=0; Inter_init(); LCD_init(); /P3=0x00; while(1) put_number(Distance); locate(0,0); if(Distance250)&(Distance200)&(Distance150)&(Distance100)&(Distance=150) P1=0xef; else if(Distance=100) P1=0xf7; else P1=0xff; if(Distance100) sb=0; else sb=1; if(Distance100) led2=1; Delay_ms(50); led2=0; else if(Distance=100) led1=1; Delay_ms(50); led1=0; void Inter_init(void) TMOD=0x11; TH0=(65536-50000)/256; TL0=(65536-50000)%256; ET0=1; /开定时器0溢出中断 TR0=1; /启动定时器 /EX0=1; /开外部中断
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1