毕设2 c8051f020超声波测距及显示 语音报警Word格式.docx
《毕设2 c8051f020超声波测距及显示 语音报警Word格式.docx》由会员分享,可在线阅读,更多相关《毕设2 c8051f020超声波测距及显示 语音报警Word格式.docx(18页珍藏版)》请在冰豆网上搜索。
从而使系统的运行大大提高了可靠性和稳定性。
在开发上采用软硬件结合,减少了很多硬件的开发,大大降低了开发成本和硬件电路的复杂性。
论文概述汽车防撞报警器设计基本要求和目的、超声波原理及应用,在设计中对方案进行了论证及确定,逐一分析个模块的硬件功能和软件编写设计综合实现系统的功能及要求。
比较遗憾的是因个人能力问题,系统的反应比较迟钝,需进一步优化。
在本次设计中,碰到了许多问题和困难,但经过认真思考,仔细分析具体情况最终解决了大部分问题。
在此过程中自己对各种仪器的使用方法都的到了重新认识,特别是对Keil和proteus软件更进一步熟悉。
通过本次毕业设计把以前很多不懂得,忘了的东西重新温习了,加强了自己的动手能力以及综合运用知识的能力。
附录A
系统总原理图:
附录B
源程序:
#include<
c8051f020.h>
#include"
delay.h"
isd4004.h"
#defineSYSCLK22118400//SYSCLKfrequencyinHz
#defineBAUDRATE9600//BaudrateofUARTinbps
#defineMAX_LEN10//receivebufMAXlength
ucharaddl[]={0x00,0x20,0x40,0x60,0x80,0xa0,0xc0,0xe0,0x00,0x20};
ucharaddh[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01};
ucharreadCounts=0,Counts=0;
uchartrdata[MAX_LEN]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};
//发送暂存缓冲区
uchartrdata1[16]={"
xianshiJL:
0000mm"
};
sbitrs=P3^0;
//43
sbitrw=P3^1;
//42
sbite=P3^2;
//41
sbitBeepIO=P3^5;
//蜂鸣器控制脚
sbitSS=P1^0;
//片选
sbitMOSI=P1^1;
//数据输入
sbitMISO=P1^2;
//数据输出
sbitSCLK=P1^3;
//ISD4004时钟
sbitLED=P1^7;
//指示灯
//-------------------------------------------------------------------
//函数声明
voidSYSCLK_Init(void);
voidPORT_Init(void);
voidUART0_Init(void);
voidSend_Char(ucharch);
voidsend_string_com(unsignedchar*str,unsignedintstrlen);
voiddelay_10us(intn)
{
charm;
intj;
for(j=0;
j<
n;
j++)
for(m=0;
m<
30;
m++);
//Wait10us
}
voiddelay1us(ucharc)//误差-0.005353009259us
{
uchara,b;
for(b=c;
b>
0;
b--)
for(a=8;
a>
a--);
voiddelay1ms(uchard)//误差-0.018084490741us
uchara,b,c;
while(d--)
for(c=5;
c>
c--)
for(b=68;
for(a=31;
voidwrite_comd(unsignedcharcom)
e=0;
rs=0;
rw=0;
P5=com;
delay_10us
(1);
delay_10us
(2);
e=1;
voidwrite_word(unsignedcharword)
rs=1;
P5=word;
delay_10us(5);
voidInit_lcd(void)
delay_10us(4500);
write_comd(0x38);
delay_10us(1500);
delay_10us(500);
write_comd(0x08);
write_comd(0x01);
write_comd(0x06);
write_comd(0x0c);
ucharsave(ucharreceve)
uchartrans=0;
switch(receve)
{
case0:
trans='
0'
;
break;
case1:
1'
case2:
2'
case3:
3'
case4:
4'
case5:
5'
case6:
6'
case7:
7'
case8:
8'
case9:
9'
}
return(trans);
voidisd_send(ucharisdx)//spi串行发送子程序,8位数据
ucharcounter;
SS=0;
//ss=0,打开spi通信端
SCLK=0;
for(counter=0;
counter<
8;
counter++)//先发低位再发高位,依次发送。
{
if((isdx&
0x01)==1)
MOSI=1;
else
MOSI=0;
isdx=isdx>
>
1;
SCLK=1;
delay1us
(1);
delay1us
(2);
}
voidisd_powerup()//发送上电指令
delay1us(10);
isd_send(0x20);
SS=1;
delay1ms(50);
}
voidisd_play()//发送play指令
LED=0;
isd_send(0xf0);
voidisd_setplay(unsignedcharadl,unsignedcharadh)//发送setplay指令
delay1ms
(1);
isd_send(adl);
//发送放音起始地址低位
isd_send(adh);
//发送放音起始地址高位
isd_send(0xe0);
//发送setplay指令字节
//主函数
voidmain(void)
uchardatah=0,datal=0,dataq=0,datab=0,datas=0,datag=0;
uchari=0,j=0;
uintsdata=0,sdatah=0,sdatal=0;
WDTCN=0xde;
WDTCN=0xad;
//关闭WDT
SYSCLK_Init();
PORT_Init();
UART0_Init();
Init_lcd();
EA=1;
ES0=1;
do
{
Send_Char(0x55);
if(Counts==10)
Counts=0;
for(i=0;
i<
10;
i+=2)
sdatah+=trdata[i];
sdatal+=trdata[i+1];
}
datah=sdatah/5;
datal=sdatal/5;
sdata=datah*256+datal;
dataq=sdata/1000;
datab=sdata/100%10;
datas=sdata/10%10;
datag=sdata%10;
trdata1[10]=save(dataq);
trdata1[11]=save(datab);
trdata1[12]=save(datas);
trdata1[13]=save(datag);
write_comd(0x80);
delay_10us(9000);
for(j=0;
j<
16;
j++)
write_word(trdata1[j]);
delay_10us(90);
isd_powerup();
isd_setplay(addl[dataq],addh[dataq]);
isd_play();
delay1ms(200);
isd_setplay(addl[datab],addh[datab]);
isd_setplay(addl[datas],addh[datas]);
isd_setplay(addl[datag],addh[datag]);
sdatah=0;
sdatal=0;
}
//delay1ms(230);
}while
(1);
//-----------------------------------------------------------------------------
//系统时钟配置
voidSYSCLK_Init(void)
//OSCICN=0x87;
//使用内部时钟16M
//while((OSCICN&
0x10)==0);
//内部时钟按设定频率运行
inti=0;
//delaycounter
OSCXCN=0x67;
//startexternaloscillatorwith
//22.1184MHzcrystal
for(i=0;
i<
256;
i++);
//Waitforosc.tostartup
while(!
(OSCXCN&
0x80));
//Waitforcrystalosc.tosettle
OSCICN=0x88;
//selectexternaloscillatorasSYSCLK
//sourceandenablemissingclock
//detector
//I/O配置
voidPORT_Init()
XBR0=0x04;
//允许UART0,RX,TX连到2个端口引脚.XBR0=0000,0100
XBR1=0x00;
XBR2=0x40;
//交*开关使能
P0MDOUT|=0x01;
/*使能TX0作为推挽输出*/
P1MDOUT=0xFF;
P3MDOUT=0xFF;
P74OUT=0x0C;
//P0MDOUT|=0x03;
//P0.0为推拉方式输出,即TX0,RX0所在的端口0000,0011
//P1MDOUT|=0x40;
//P1.6为推拉方式输出,即LED所在的端口0100,0000
//串口初始化
voidUART0_Init(void)
SCON0=0x50;
//SCON0:
mode1,8-bitUART,enableRX
TMOD=0x20;
//TMOD:
timer1,mode2,8-bitreload
TH1=0xB8;
//setTimer1reloadvalueforbaudrate
TR1=1;
//startTimer1
CKCON|=0x10;
//Timer1usesSYSCLKastimebase
//发送单个字符
voidSend_Char(ucharch)
SBUF0=ch;
//送入缓冲区
while(TI0==0);
//等待发送完毕
TI0=0;
//软件清零
//UART0中断服务程序.接收字符
voidUART0_ISR(void)interrupt4using1
ucharrxch;
if(RI0)//中断标志RI0=1数据完整接收
RI0=0;
rxch=SBUF0;
//读缓冲
if(readCounts==10)readCounts=0;
trdata[readCounts]=rxch;
//存入数组,供发送
readCounts++;
Counts++;
参考文献
[1]陆化普,史其信﹒智能交通系统研究发展动向与启示﹒科技导报,1996﹒第10期
[2]朱红讯﹒现代汽车电器电子设备修理全书﹒沈阳:
辽宁科学技术出版社,1996﹒96
[3]于万海﹒汽车电器设备原理与检修﹒北京:
电子工业出版社,2005﹒60
[4]谢兴盛,方勇文,吴云峰﹒汽车自适应驰控装置中的红外激光测距﹒激光技术﹒2004﹒05
[5]潘仲明,简盈,王跃科﹒大作用距离超声传感技术研究﹒传感技术学报﹒2006﹒01
[6]杨斌虎,谢克明,杜艳生﹒基于DSP芯片的超声波测距系统﹒太原理工大学学报﹒2004﹒02
[7]丹亚,陈德池﹒计算机控制汽车安全语音提示系统﹒汽车电器﹒1999﹒03
[8]钟勇,姚剑锋﹒现代汽车的四种测距方法﹒汽车工业研究﹒2001﹒02
[9]孟立凡,蓝金辉﹒传感器原理与应用﹒北京:
电子工业出版社,2007﹒195
[10]胡建恺,张谦琳﹒超声检测原理和方法﹒合肥:
科学技术出版社,1993﹒136
[11]李朝青﹒单片机原理及其接口技术﹒北京:
北京航空航天大学出版社,2006﹒17
[12]潘琢金,施国君﹒C8051f高速SOC单片机原理及其应用﹒北京:
北京航空航天大学出版社,2002﹒20
[13]张毅,曹丽等﹒自动检测技术及仪表控制系统﹒北京:
化学工艺出版社,2011﹒265
[14]张晔,王玉民﹒单片机应用技术﹒北京:
高等教育出版社,2006﹒85
[15]华成英,童诗白﹒模拟电子技术基础﹒北京:
高等教育出版社,2006﹒575
[16]毕满清﹒模拟电子技术基础﹒北京:
电子工业出版社,2008﹒261
[17]韩焱﹒数字电子技术基础﹒北京:
电子工业出版社,2009﹒291
[18]刘朝阳,张丽红﹒电路原理导论﹒北京:
电子工业出版社,2008﹒143
[19]StefanKocis,ZdenkoFigura﹒UltrasonicMeasurementsandTechnologies﹒Springer,1996
[20]Han-WayHuan﹒UsingtheMCS-51Micrpcontroller[Hardcover]﹒Oxford
UniversityPress,1999
致谢
首先,我要感谢我的指导老师xx在毕业设计中对我给予的细心指导和严格要求,同时也感谢本校的一些老师在毕业设计期间所给予我得帮助。
在我毕业论文写作期间,各位老师给我提供了种种专业知识上的指导和日常生活上的关怀,没有您们这样的帮助和关怀,我不会这么顺利的完成毕业设计,借此机会,向您们表示由衷的感激。
同时还要感谢院实验室在毕业设计期间提供给我们优越的实验条件。
接着,我要感谢和我一起做毕业设计的同学。
在毕业设计的短短4个月里,你们给我提出很多宝贵的意见,给了我不少帮助还有工作上的支持,在此也真诚的谢谢你们。
同时,我还要感谢我的寝室同学和身边的朋友,正是在这样一个团结友爱,相互促进的环境中,在和他们的相互帮助和启发中,才有我今天的