超声波测距应用倒车雷达设计Word文档格式.docx
《超声波测距应用倒车雷达设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《超声波测距应用倒车雷达设计Word文档格式.docx(16页珍藏版)》请在冰点文库上搜索。
![超声波测距应用倒车雷达设计Word文档格式.docx](https://file1.bingdoc.com/fileroot1/2023-5/5/bdfc5bba-7b01-4302-ba3a-cab836d9c9d6/bdfc5bba-7b01-4302-ba3a-cab836d9c9d61.gif)
2.3执行过程:
开机即显示车后保险杠和障碍物距离,若距离大于量程则数码管显示为000,若在量程之内则实时显示距离。
2.4预警功能:
若距离过小比如200mm则红灯亮,警示障碍物和车后部距离过小,不可再倒车,否则会有安全事故。
2.5系统模块图:
图1系统方案图
三、硬件详细设计
3.1单片机型号的选择:
单片机选择的是STC89C52单片机,它是一种低功效、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
在单芯片上拥有灵巧的8位CPU和在线系统可编程Flash,
具有以下标准功能:
8K字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。
空闲模式下,CPU停止工作,允许RAM、定时器/计数器串口、中断继续工作。
掉电保护方式下RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
而且,它还具有一个看门狗(WDT)定时/计数器。
如果程序没有正常工作,就会强制整个系统复位,还可以在程序陷入死循环的时候,让单片机复位而不用整个系统断电,从而保护你的硬件电路。
STC89C52
有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中端口,2个16位可编程定时计数器,2个全双工串行通信口,片上Flash允许程序存储器在系统可编程,亦适于常规编程器。
其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。
(1)Vcc:
供电电压。
(2)GND:
接地。
(3)P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门流。
当P0口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在Flash编程时,P0口作为原码输入口,当Flash进行校验时,P0输出原码,此时P0外部必须被拉高。
图2单片机引脚图
(4)P1口:
P1口是一个内部提供的上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故,。
在Flash编程和校验时,P1作为第八位地址接收。
(5)P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在Flash编程和校验时接收高八位地址信号和控制信号。
(6)P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89S52的一些特殊功能口,如下表所示:
P3口功能引脚简介
P3口引脚第二功能
P3.0RXD(串行口输入)
P3.1TXD(串行口输出)
P3.2INT0(外部中断0输入)
P3.3INT1(外部中断1输入)
P3.4T0(定时器0外部脉冲输入)
P3.5T1(定时器1外部脉冲输入)
P3.6WR(外部数据存储器写脉冲输出)
P3.7RD(外部数据存储器读脉冲输出)
(7)RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
(8)ALE/RPOG:
当访问外部存储器时,地址锁存允许的输出电平由于锁存地址的地位字节。
在Flash编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6.因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳出一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0.此时,ALE只有在执行MOVX,MOVC指令时ALE才起作用。
另外该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
(9)/PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
(10)/EA/VPP:
当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,/EA将内部锁定为RESET;
当/EA端保持高电平时,此间内部程序存储器。
在Flash编程期间,此引脚也用于施加12V编程电源(VPP)。
(11)XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
(12)XTAL2:
来自反向振荡器的输出。
3.2超声波模块插座电路图
3.3报警电路
报警器
电源接口及电源指示灯
3.4复位电路
复位电路采用了单片机的复位端,采用按钮电平复位电路,这样设计可以简化软件的量,使程序更加简洁化。
3.5总电路图
4.2软件设计源代码
#include<
REG52.h>
#defineucharunsignedchar
#defineuintunsignedint
voidsend_byte(unsignedchar);
voidtime_init();
voidDisplayLength(unsignedlong);
voiddelay(uchar);
voidwrite_dat(uchar);
voidwrite_com(uchar);
voidinit();
sbitSPK=P2^0;
//定义喇叭端口
sbitled0=P1^0;
//接收指示灯
sbitled1=P1^1;
//发送指示灯
sbitRS=P2^1;
sbitRW=P2^2;
sbitEN=P2^3;
ucharfrq;
uchardispbuf[4]="
"
;
//显示缓冲区
ucharidatarevbuf[2];
//收缓接冲区
unsignedlongLength=0;
uchartable[]="
-----0000-----"
ucharnum[]="
0123456789"
;
voidrev_data(void)interrupt4//数据接受
{
uchartemp,k;
ES=0;
//关中断
if(RI)
{
RI=0;
//清接收标志
temp=SBUF;
revbuf[k]=temp;
k++;
if(k==2)//k=数据长度
k=0;
led0=~led0;
}
ES=1;
//开中
}
voidsend_byte(unsignedchardat)//向串口发送一个字符
TI=0;
//清发送标志
SBUF=dat;
//如果TI为0等待
led1=0;
while(!
TI);
//waituntilsent
led1=1;
voidtime_init()
{
TH1=0xFD;
TL1=0xFD;
//设置T1波特率9600
TMOD=0x21;
//设置定时器1为模式2;
定时器0为模式1
TH0=(65536-2500)/256;
//约2.50MS定时器初值
TL0=(65536-2500)%256;
ET0=1;
//T0允许位
TR0=1;
//启动定时器
TR1=1;
//启动定时器
SM0=0;
//串口通信模式设置方式一
SM1=1;
REN=1;
//串口允许接收数据
//开串中断
EA=1;
//开总中断
voidtimer0()interrupt1//定时器0中断是1号定时器0中断,用做显示
TH0=(65536-2500)%256;
TL0=(65536-2500)%256;
send_byte(0x55);
delay(250);
Length=revbuf[0]*256+revbuf[1];
DisplayLength(Length);
}
voidDisplayLength(unsignedlongnumber)
if(number>
4500)//如果大于4.5米,显示"
-"
{
SPK=1;
dispbuf[0]='
-'
//显示"
dispbuf[1]='
dispbuf[2]='
dispbuf[3]='
}
if(number<
4500)
dispbuf[0]=num[number/1000];
dispbuf[1]=num[number%1000/100];
dispbuf[2]=num[number%100/10];
dispbuf[3]=num[number%10];
if(200>
number)
SPK=!
SPK;
voiddelay(uchart)
while(t--);
voidwrite_com(ucharcom)
RS=0;
RW=0;
delay
(1);
P0=com;
EN=1;
EN=0;
RS=1;
voidinit()
write_com(0x38);
//设置显示位数
write_com(0x0c);
//设置光标开关
write_com(0x06);
//写一个加一
write_com(0x01);
voidwrite_dat(uchardat)
RS=1;
P0=dat;
RS=0;
voidmain()
uchari,j;
init();
time_init();
write_com(0x80);
delay(200);
for(i=0;
i<
16;
i++)
{
write_dat(table[i]);
delay(200);
}
while
(1)
write_com(0x86);
for(j=0;
j<
4;
j++)
{
write_dat(dispbuf[j]);
delay(50);
if(j==4)
j=0;
}
}
【感想和体会】
我们的题目是倒车雷达系统设计,对于我们这些实践中的新手来说,这是一次考验。
这次课程设计我们学到很多很多的东西,学会了怎么在遇到问题时去解决问题。
不仅巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识,掌握了一种系统的研究方法,可以进行一些简单的编程。
通过这次课程设计使我懂得了理论和实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识和实践相结合起来,从而提高自己的实际动手能力和独立思考的能力。
同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。
这次科研立项通过自身的努力终于顺利完成了,在设计中遇到了很多问题,最后在老师的辛勤指导下,终于迎刃而解,在此我们表示感谢!