电子设计汽车行驶状态记录仪设计报告模板_第1页
电子设计汽车行驶状态记录仪设计报告模板_第2页
电子设计汽车行驶状态记录仪设计报告模板_第3页
电子设计汽车行驶状态记录仪设计报告模板_第4页
电子设计汽车行驶状态记录仪设计报告模板_第5页
已阅读5页,还剩205页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

电子设计汽车行驶状态记录仪设计报告资料内容仅供参考,如有不当或者侵权,请联系本人改正或者删除。大学生电子设计设计报告汽车行驶状态记录仪Vehicletravellingdatarecorder目录摘要…………1方案论…………………21.1系统微处理器的个数选择……………21.2存储显示微处理器作为主控制的选择………………2系统设计………………32.1系统基本功能…………32.2系统性能指标…………32.3系统的提升部分………32.4硬件设计………………42.5软件设计………………52.6特殊元件介绍…………17测试说明………………183.1测试工具………………183.2霍尔元件功能测试……183.3软件调试………………183.4测试数据……………………183.5调试过程中遇见的问题分析以及解决方案…………203.6系统功能参数…………213.7创新与特点……………21四、结束语…………………22五、附录……………………22汽车行驶状态记录仪Vehicletravellingdatarecorder摘要:本项目名称为”汽车行驶状态记录仪”,系统微处理器采用双单片机,关键部件有GPS模块、温度传感器和霍尔元件等,用于提取有效信息对汽车行驶位置进行精确定位,并获取轨迹、速度、温度等信息,然后进行存储,以供用户查询汽车一个星期的行驶路径(注:考虑成本问题,样机记录时间长度为6天;如果作为产品,能够记录1个月甚至一年以上,根据用户的要求而定)。本设计采用数字化电路,软件采用C语言,有利于对数据进行准确分析,减少干扰。系统电路采用模块化的设计思想,由5个模块组成,分别为GPS接收模块、数据处理分析模块、存储模块、键盘处理模块和显示模块。其中显示模块可采用LCD显示,还可提供经过串口与PC通信,然后在电子地图上将汽车轨迹形象地显示出来。关键字:单片机;GPS模块;温度传感器;霍尔元件;LCD;PC地图Abstract:Withthethemeofautomobileelectron,theGuangdongUniversitiesStudentsElectronDesignContestaimsatperfectingfunctionoftheautomobilebydesigningtheelectriccircuits.Andourdesignprojectistheautomobiletravelconditionrecordinginstrument.Thissystemadoptsthemicroprocessor(MCU)toanalyzetheGPSmodule,thetemperaturesensorandtheHallpartpositiontheautomobileaccurately,Moreover,itcangainandrestorethedataoftemperaturevalueandvelocityforinquiryoftheautomobile’sweek-longtravellingroute.Digitalelectriccircuitsareappliedinallofthissystem,allthesoftwaresareprogrammedinmonolithicintegratedcircuitClanguageinordertoanalyzethedataandorientateprecisely,andreducethedisturbance(interference)andtheerrorofthedataduetothehardwareelectriccircuit.Therearefivemodulesinthesystemcircuit:GPSreceivemodule,dataprocessinganalysismodule,memorymodule,keyboardprocessingmoduleanddemonstrationmodule.AnddemonstrationmoduleincludestheLCDdemonstrationmoduleandthePCelectronmapdemonstrationmoduleinwhichtheelectronicmapisconnectedwithGPSthroughtheserialport.Keywords:MCU;GPSmodule;Temperaturesensor;Hallpart;LCD;PCmap方案论证89C52微处理芯片89C52微处理芯片GPS接收模块PC地图显示模块数据存储模块时钟模块霍尔传感器温度传感器键盘扫描方案一:采用一个CPU控制芯片。判断1分钟是否到了,没到则处于显示和发送数据的状态,到了就采集GPS接收到的数据,提取出有效信息进行存储。该方案有效地利用了单片机的顺序执行程序的方式,避免了读出存储芯片总线与存储到时钟芯片,存储芯片的总线冲突。可是发送给PC地图的数据必须是2秒一组,接受到GPS的数据也是2秒一组,这对串口的使用产生了冲突,更重要的是我们是对GPS数据进行定时采集,如果恰巧那个时间GPS接收的数据不完整,那么那一分钟里将得不到有效信息,产生很大的误差,因此一块微处理芯片的处理方案不能保证系统的稳定性。存储微处理器显示微处理器时钟模块存储模块GPS接收模块霍尔传感器温度传感器PC电子地图LCD显示模块键盘模块存储微处理器显示微处理器时钟模块存储模块GPS接收模块霍尔传感器存储微处理器显示微处理器时钟模块存储模块GPS接收模块霍尔传感器温度传感器PC电子地图LCD显示模块键盘模块存储微处理器显示微处理器时钟模块存储模块GPS接收模块霍尔传感器温度传感器PC电子地图LCD显示模块键盘模块方案二采用两块控制芯片的优势:(1)、有两个串口,能够分开设置相同的波特率,同时进行接收和发送,保证两不误。(2)、减轻单个处理芯片的压力,让中断响应和对数据的读取都能及时响应。(3)、程序代码采用了大量的变量,导致单片机的内部数据存储器的空间不够,增加一个单片机就不用扩展外部数据存储器,不会降低性价比,反而更方便操作。(4)、有效准时地存储数据和读取数据,保证了数据的完整度和准确度,充分提高了系统的稳定性。因此,虽然在方案二中增加多一块单片机的成本,可是相比之下方案二有着更大的优越性,我们采用了方案二。1.2,存储/显示微处理器作为主控制的选择。方案一:存储控制器作为主控制器。利用一条导线连接存储处理芯片和显示处理芯片,经过接受GPS的时钟数据判断是否一分钟到了,如果是则拉下导线电平告知读取芯片释放总线,让存储芯片将当前采集的数据存储进去,然后将导线电平拉高,告诉其能够对存储芯片进行读写。该方案将存储芯片作为了住控制器,经过线扫描控制从控制器。优势是节省了时间,对芯片能够很充分利用。不足之处就是如果当前的数据存储不进EEPROM,则,一直对总线无法读取,那么显示的数据将会产生错误或者拖延。而且当读取芯片在读取芯片时则那么那个控制线无效,数据将无法进行及时存储。因此系统稳定性不高。方案二:将显示微处理器作为主控制器。经过给引脚发送高电平让存储控制器产生中断进行存储。该方案中先由GPS根据接收的数据进行初始化时钟芯片,后提供给显示芯片初始化时钟单元,由定时器产生中断来累加时钟单元,而且及时产生中断信号给存储芯片,这样的电路优势是:在中断前两个芯片都能准时地接收和发送数据,让数据得以准时而且正确地更新。中断过程中空出总线提供给存储芯片进行存储。而且中断是由计时器控制空出总线的时间,因此两芯片不会互相牵制。保证了系统的稳定性。相比之下方案二有着很高的实用性和稳定性,因此我们采用了方案二。系统设计。2.1系统的基本功能.根据我们的目标所要实现的功能,我们经过仔细分析,充分考虑各种影响因素,制定出了整体的设计方案。以两块单片机89C52为核心,协调完成以下几个功能:存储单片机完成采集GPS接收数据,采集霍尔传感器和温度传感器的数据,进行验证和存储;显示单片机完成数据的读取,以及在LCD上和PC电子地图上显示的功能。两个单片机共用EEPROM和时钟芯片,采用I2C总线接口方式,只使用两个端口,节省了单片机资源,2.2系统的性能指标工作电压:7.5~12V工作电流:不大于500MA工作环境温度:-40工作环境相对湿度:<85%(25℃产品外形尺寸:该作品体积小巧,安装方便,长16cm,宽8cm,高GPS接收经纬度精度:定位精确到小数后4位,误差小于5米。2.3系统的提升部分。系统经过设置键盘模块,让显示部分能够显示当前时间以及行驶状态,或是经过手动方式利用键盘设置时间定点查询某一时刻的速度温度,经纬度,而且在电子地图上及时显示出来。另外还能够从某点开始回放我们这些日子走过的那些路线,以及当时的环境,让人们清晰地知道最近车的行驶过程。系统上原来LCD的界面简单,繁杂的数据变化让人的视觉神经逐渐麻痹,我们经过设计创新了让画面更加美化,而且产生了循环渐变的FLASH数据更新效果。让整个LCD界面显得美观大方。2.4硬件设计。(1)电源模块本系统是采用了汽车上的12V直流电源,进行整流滤波降压为5V电源提供给系统的运行使用。为了保证电源的正常供给,我们在12V输入的时候加入了2.0A的保险丝以防电流过大。并加入7805的稳压管保证了整个系统电源的稳定。具体电路如图:(2)原理图模块本系统主要用软件实现的,对器件的需求量比较少,只需2个单片机和EEPROM和PCF8563以及GPS模块等器件,因此我们的电路板比较简单,大大提高了性价比,经济方便。下面是我们项目的电路图,两个单片机,一个作为显示模块,一个作为存储模块。2.5软件设计。(1)功能模块。该系统主要采用两块89C52单片机分别作为存储和显示的微处理器,外围电路由ubloxGPS提供经纬度和时间数据,DS18B20提供温度数据,霍尔元件实现对汽车的测速。所获得的数据用来初始化时钟芯片PCF8563,而且都存储到EEPROM中,显示微处理器芯片分别读取EEPROM和PCF8563的数据,然后在LCD和PC电子地图上显示,具体电路框图如下:存储微处理器存储微处理器STC89C52显示微处理器STC89C52GPS-25-LPDS18B20霍尔元件276EEPROMPCF8563LCD显示PC电子地图控制从机启动从机释放总线存储模块。在存储模块的单片机中,分别对GPS模块,温度传感器DS18B20的数据采集,对霍尔元件进行脉冲计数。GPS接收到数据帧有定位信息GPGGA帧、卫星信息GPGSA帧、地理定位信息GPGLL帧、卫星状态GPGSV帧、最小信息GPRMC帧等等,可是我们仅仅需要提取信息全面的GPRMC帧。在我们的软件中只需判断是不是以”$GPRMC”字符串开头,是则接收,否则退出。下面是按照”,”的第几个来对GPS模块对应的位置进行采集相关的数据。voidreceice()interrupt4 using1{unsignedchartemp;RI=0;temp=SBUF;switch(data_item){case0: if(temp=='$') { data_item++; } break; case1: if(temp=='G') { data_item++; } else { data_item=0; } break; case2: if(temp=='P') { data_item++; } else { data_item=0; } break; case3: if(temp=='R') { data_item++; } else { data_item=0; } break; case4: if(temp=='M') { data_item++; } else { data_item=0; } break; case5: if(temps=='C') { data_item++; } else { data_item=0; } break; case6: if(temp==',') { data_item++; time_num=0; lat_num=0; lon_num=0; speed_num=0; date_num=0; g_clock=0; } else { data_item=0; } break; case7: if(temp==',') { time_num=0; g_clock++; break; } if(temp=='$') { data_item=1; break; } switch(g_clock) { case0: if(time_num<9) { gps_timer[time_num++]=temp; } break; case2: if(lat_num<10) { gps_lat[lat_num++]=temp; } break; case3: { SN=temp; } break; case4: if(lon_num<11) { gps_lon[lon_num++]=temp; } break; case5: { EW=temp; } break; case6: if(speed_num<5) { gps_speed[speed_num++]=temp; } break; case8: if(date_num<6) { gps_date[date_num++]=temp; } break; default: break; } default: break; }}对温度传感器和脉冲个数的采集,分别只需调用下面的函数就能够采集温度和计数脉冲,详细代码见附录,整体的流程图如下: tempture=DS18B20ReadTemp();//采集温度voidSignal_INT(void)interrupt2using3//传感器中断{ round_count++; TR0=1;}开始开始初始化串口和中断接收完整数据?初始化PCF8563读18B20数据是否计数霍尔元件的时间到?采集GPS的数据是否完整检查是否收到存储的指令(一分钟)存储YNNY第一次存储完后启动从机返回Y返回N中断通信入口中断通信入口是否需要的数据采集数据Y退出外部中断入口脉冲加一定时时间是否到?取值退出NYN显示模块在这个模块中,主要是处理LCD界面的显示以及发数据到PC地图上定位。操作的方式是读取EEPROM,定时将数据发送给PC地图,则在电子地图上显示对应的位置,直观,操作又方便。由于电子地图只有接收到与串口参数设定的数据一致时才能够定位,因此将按照它的参数每两秒发送一组数据,下面就是每两秒发送一组数据给PC地图的程序:/******************************************************************************/voidTimer1(void)interrupt1using1//中断入口,冒号闪烁{unsignedchartemp,i; TH0=(65535-46080)/256;//50ms定时 TL0=(65535-46080)%256;timecount++; num_Send++; auto_num++; num_xianshi++; keep_int0++; rr_num++; if(rr_num>=5) { rr_num=0; flag_move=1; } if(keep_int0>=20) { keep_int0=0; keep++; } if(num_xianshi>40) { flag_xianshi=~flag_xianshi; num_xianshi=0; } if(timecount>9)//500MS { timecount=0; flag=~flag; //调试的时候实现时间显示闪烁 } if(auto_num>200)//自动回放的时候6秒更新一组数据 { auto_num=0; flag_auto=1; } if(num_Send>40)//两秒的时候发送一组数据给PC地图 { num_Send=0;/**********************当前状态的发送*******************/ if(key_now_last==1) { for(i=0;i<67;i++) { switch(i) { case0:temp='$';break; case1:temp='G';break; case2:temp='P';break; case3:temp='G';break; case4:temp='G';break; case5:temp='A';break; case6:temp=',';break; case7:temp=((hour_CLK-8)+24)%24/10+'0';break; case8:temp=((hour_CLK-8)+24)%24%10+'0';break; case9:temp=(min_CLK/10)+'0';break; case10:temp=(min_CLK%10)+'0';break; case11:temp='0';break; case12:temp='0';break; case13:temp=',';break; case14:temp=read_latlon[0]/10+'0';break; case15:temp=read_latlon[0]%10+'0';break; case16:temp=read_latlon[1]/10+'0';break; case17:temp=read_latlon[1]%10+'0';break; case18:temp='.';break; case19:temp=read_latlon[2]/10+'0';break; case20:temp=read_latlon[2]%10+'0';break; case21:temp=read_latlon[3]/10+'0';break; case22:temp=read_latlon[3]%10+'0';break; case23:temp=',';break; case24:temp=read_latlon[4];break; case25:temp=',';break; case26:temp=read_latlon[5]/10+'0';break; case27:temp=read_latlon[5]%10+'0';break; case28:temp=read_latlon[6]%10+'0';break; case29:temp=read_latlon[7]/10+'0';break; case30:temp=read_latlon[7]%10+'0';break; case31:temp='.';break; case32:temp=read_latlon[8]/10+'0';break; case33:temp=read_latlon[8]%10+'0';break; case34:temp=read_latlon[9]/10+'0';break; case35:temp=read_latlon[9]%10+'0';break; case36:temp=',';break; case37:temp=read_latlon[10];break; case38:temp=',';break; case39:temp='1';break; case40:temp=',';break; case41:temp='0';break; case42:temp='7';break; case43:temp=',';break; case44:temp='1';break; case45:temp='.';break; case46:temp='4';break; case47:temp=',';break; case48:temp='7';break; case49:temp='.';break; case50:temp='6';break; case51:temp='2';break; case52:temp=',';break; case53:temp='M';break; case54:temp=',';break; case55:temp='7';break; case56:temp='.';break; case57:temp='0';break; case58:temp=',';break; case59:temp='M';break; case60:temp=',';break; case61:temp='';break; case62:temp=',';break; case63:temp='*';break; case64:temp='6';break; case65:temp='6';break; case66:temp='\n';break; } SBUF=temp; while(TI==0); TI=0; } }/****************************停止/回放状态的发送*********/ else { for(i=0;i<67;i++) { switch(i) { case0:temp='$';break; case1:temp='G';break; case2:temp='P';break; case3:temp='G';break; case4:temp='G';break; case5:temp='A';break; case6:temp=',';break; case7:temp=((hour-8)+24)%24/10+'0';break; case8:temp=((hour-8)+24)%24%10+'0';break; case9:temp=(min/10)+'0';break; case10:temp=(min%10)+'0';break; case11:temp='0';break; case12:temp='0';break; case13:temp=',';break; case14:temp=read_latlon[0]/10+'0';break; case15:temp=read_latlon[0]%10+'0';break; case16:temp=read_latlon[1]/10+'0';break; case17:temp=read_latlon[1]%10+'0';break; case18:temp='.';break; case19:temp=read_latlon[2]/10+'0';break; case20:temp=read_latlon[2]%10+'0';break; case21:temp=read_latlon[3]/10+'0';break; case22:temp=read_latlon[3]%10+'0';break; case23:temp=',';break; case24:temp=read_latlon[4];break; case25:temp=',';break; case26:temp=read_latlon[5]/10+'0';break; case27:temp=read_latlon[5]%10+'0';break; case28:temp=read_latlon[6]%10+'0';break; case29:temp=read_latlon[7]/10+'0';break; case30:temp=read_latlon[7]%10+'0';break; case31:temp='.';break; case32:temp=read_latlon[8]/10+'0';break; case33:temp=read_latlon[8]%10+'0';break; case34:temp=read_latlon[9]/10+'0';break; case35:temp=read_latlon[9]%10+'0';break; case36:temp=',';break; case37:temp=read_latlon[10];break; case38:temp=',';break; case39:temp='1';break; case40:temp=',';break; case41:temp='0';break; case42:temp='7';break; case43:temp=',';break; case44:temp='1';break; case45:temp='.';break; case46:temp='4';break; case47:temp=',';break; case48:temp='7';break; case49:temp='.';break; case50:temp='6';break; case51:temp='2';break; case52:temp=',';break; case53:temp='M';break; case54:temp=',';break; case55:temp='7';break; case56:temp='.';break; case57:temp='0';break; case58:temp=',';break; case59:temp='M';break; case60:temp=',';break; case61:temp='';break; case62:temp=',';break; case63:temp='*';break; case64:temp='6';break; case65:temp='6';break; case66:temp='\n';break; default:break; } SBUF=temp; while(TI==0); TI=0; } } }}开始开始初始化中断和LCD显示等待接收主机的启动命令?读PCF8563并显示对应数据显示是否释放总线返回NY2.6特殊元件的介绍。(1)GPS模块GPS(GlobalPositioningSystem)是全球定位系统的缩写,全球定位系统现在也经常称为全球卫星导航技术,是美国从20世纪70年代开始研制,于1994年全面建成,具有在海陆空进行全方位实时三维导航与定位能力的新一代卫星导航与定位系统。GPS卫星时刻发布其位置与时间数据信号,用户接收机能够测量每颗卫星信号到接收机的时间延迟,根据信号传输的速度就能够计算出接收机到不用卫星的距离,同时手机到至少4颗卫星的数据时就能够计算出三维坐标,速度和时间。GPS接收到数据帧有定位信息GPGGA帧,卫星信息GPGSA帧,地理定位信息GPGLL帧,卫星状态GPGSV帧,最小信息GPRMC帧等等,可是我们仅仅需要提取信息全面的GPRMC帧。(2)温度传感器DS18B20DS18B20体积小,经济,灵活,测温范围为-55℃~+125℃。在-10℃~+85℃范围内,精确度±0.5℃(3)霍尔元件ATS276适用范围:无刷电机,风扇电机,开关电路。电压范围:v=3.5v~20v;输出电流:i=400MA;温度范围:t=-20℃~85℃,操作简单,(4)时钟芯片PCF8563PCF8563是低功耗的CMOS实时时钟芯片,她提供了一个可编程的时钟芯片输出,一个中断输出和掉电检测器,所有的地址和数据经过I2C总线接口串行传递,最大总线速度为400Kbits/s,每次读写数据后,内嵌的字地址起存期会自动产生增量。测试说明。3.1测试工具。马达,频率计,,LED指示灯,LCD,频率计,直流电源,电池。3.2霍尔元件功能测试。连接马达到直流电源,经过改变电源的大小看马达的转速是不是不停改变,然后在马达上安装上霍尔元件,接好霍尔元件,连接到频率计后,经过改变电源的大小看频率是不是也跟着变化。3.3软件调试。本系统采用了两块单片机,因此分单独调试和联调两部分。为了节省调试时间和更加直观地看出数据变化过程,我们把一分钟的存储改为十秒钟存储一次。(1)单独调试存储模块,加入了LCD显示模块,P3.2口接脉冲发生器,每十秒准时产生一个中断,中断时让纬度低位累加计数单元,存储过后也将相应单元的内容读出到LCD上,看纬度的地位是不是会均匀地递加,会则说明存储模块能够正常地工作,数据能够完整地接收和存储。(2)单独调试显示模块,令P1.5口接LED,看每十秒LED会不会灭一次,灭的时间是不是一秒。而后观察LCD上的时间是不是能每秒跳变,是不是十秒到来的时候灯就闪一下,是则说明计数单元计数正确,能准时地为存储模块提供脉冲,按查询键的时候星期会闪烁,按位选择键就能让相应的时、分、秒轮流闪烁,闪烁的同时按加键或按减键就能使其进行相应的变化,在停止状态下按回放键秒的十位是不是会按每十秒均匀地累加1进位。(3)存储/显示模块联调部分。将显示的P1.5接到存储部分的P3.5引脚,设置存储的模块P0口接到LED上,当中断到来的时候给纬度低位累加计数单元,存储到存储芯片中,而且从存储芯片读出显示到LED上会不会及时变化,观看显示部分。对于时间进行的调试步骤与第(2)相同,同时观看LCD经纬度的数据会不会跟随时间的变化而变化,如果会,则说明对存储芯片的读取正常,将显示芯片的串口连接到电脑,让系统处于读取当前状态,观看电脑接收到数据是不是每2秒就接受到一条语句,该语句的是以$GPGGA开头,看数据是不是每5组就更新了一下经纬度,而且串口调试接收到经纬度与LCD显示的一样。如果是则说明发送与显示的功能正常。最后关闭串口调试,打开PC地图设计导航,看在地图上是否显示出汽车行驶的轨迹。3.4测试数据在数据的测试过程中,由于GPS的特殊性,不可能在一个固定的位置进行验证,于是我们在自己的校园测两组数据,由于所测的数据比较多,没必要一一列出,下面只列出几组代表的数据以及在电子地图相应的位置上显示:(一)、9月11日(星期四)时间纬度经度温度19:2523°05′6871″113°18′0829″35.19:2723°05′6865″113°18′0513″35.19:3023°05′6809″113°17′9661″35.19:3223°05′6638″113°17′9104″35.19:3323°05′6560″113°17′8839″35.19:3523°05′6354″113°17′8171″35.19:3623°05′6265″113°17′7850″35.19:3723°05′6052″113°17′7557″35.19:3823°05′5947″113°17′7210″35.(二)、9月11日(星期四)时间纬度经度温度19:4323°05′6589″113°17′7173″35.19:4423°05′6665″113°17′7435″35.19:4623°05′6917″113°17′7748″35.19:4723°05′7165″113°17′8012″35.19:4823°05′7165″113°17′8012″35.19:5023°05′7876″113°17′8745″35.19:5123°05′8122″113°17′8999″35.19:5223°05′8362″113°17′9295″35.19:5323°05′8458″113°17′9714″35.19:5423°05′8477″113°18′0068″35.919:5523°05′8427″113°17′0432″35.上面的地图是记录两组数据所对应的地理位置,我们经过路线的轨迹把走过的路线直观的在地图上显示出来,让我们清楚当时是在哪个位置,同时在左上角也会更新时间显示的数据。3.5调试过程中遇见的问题分析以及解决方案。联调的时候纬度不是很均匀地加一,用脉冲单独调试时能够均匀加一,经过分析发现,我们联调的时候是给P3.2口一秒钟的高电平,尽管我们设置P3.2是上升沿中断,可是由于电源的小小抖动,可能会产生两次甚至多次中断,可是因为串口接收到数据是每两秒一组,而且在响应存储中断的时候关闭了总的中断开关,因此我们两次存储的中断的数据是相同,不影响整个系统,反而能更进一步地提升我们存储的准确率。3.6系统功能参数。这次我们所设计的系统完成了一个星期的数据记录,每一条数据采集存储的时间间隔是1分钟,我们能够以十秒钟一组数据的方式回放出汽车一个星期走过的路线。考虑成本问题。样机记录时间为7天.如果作为产品,我们能够记录1个月或一年的时间,如果系统处于显示当前位置的时候数据每一分钟更新一次,由于LCD界面过小,我们用动画效果让经纬度和速度温度循环变化。我们数据的存储是以当时GPS接收到的时间作为地址运算的,读出的时候也是利用对时间的运算读出相应地址的内容。速度的最大值能够是999转/秒,温度的范围是00.0℃~99.93.7创新与特点汽车行驶记录仪能完整、准确地记录汽车行驶状态下的有关情况,能将汽车行驶轨迹完整记录,并经过专用\o"软件"软件在电脑上再现,因此利用记录仪记录的数据,能够对运营车辆和司乘人员的工作进行全方位管理。提高交通的管理执法水平和运输管理水平、保障车辆运行\o"安全"安全也有着重要的实际作用及意义。该作品可实现多种信息处理,显示汽车工况,对车速、发动机转速、等一系列参数进行有效监控,并经过LCD和电子地图显示影响为司乘人员提供直接的工况和发出各种超限的记录等,可有效防范和化解车辆事故的发生。并详细记录车辆每次的起动时间、行驶速度、行驶时间等,总的来说具有如下特点:(1)可靠性高:该作品在任何车辆能工作的的环境下都能正常稳定的工作。

(2)通用性强:该作品适合各种车辆安装使用。

(3).FLASE显示:该作品采用LCD液晶显示,经过设计让画面更加美化,而且产生了循环渐变的FLASH数据更新效果。让整个LCD界面显得美观大方。

(4).功能扩展性强:系统软件具有动态装载功能,即在不改变硬件的情况下,仅经过更新记录仪的系统软件即可实现产品功能的更新和升级。

(5)操作简便:使用6个按键,根据用户的意愿对想要的时刻进行手动设置,各功能操作均为LCD屏幕上显示,操作简便、直观。四.结束语。汽车行驶状态记录仪是基于接收GPS数据辅以温感,霍尔元件记录了汽车一个星期的行驶数据,既能及时了解汽车当前的所在位置,车速以及温度进行了解,也方便对过去一周的行程进行追踪,有着较强的实用意义。本系统有待提升的部分就是细分行程,能够将时间分10秒钟进行存储一组,有必要能够将记录时间更长一些,比如1个月甚至1年以上,使记录的数据更加紧凑,查询的时间范围加长,更能符合用户的要求,不过我们作为样品,只有1分存储一次,存储一个星期。另外一点就是在显示中断部分每隔1分钟存储1次,我们能够更进一步缩短时间,可是由于我们读出是10秒才更新一组数据,因此影响不大。五、附件参考文献[1]丁向荣.单片机应用系统与接口技术.北京:电子工业出版社,.3[2]贾萍.单片机原理及应用.广州:广东高等教育出版社,.8[3]谭浩强.C语言程序设计.清华大学出版社,.4[4]于永,戴佳.51单片机常见模块与综合系统设计实例精讲.北京:电子工业出版社,.4[5]张萌.单片机应用系统开发综合实例.北京:清华大学出版社,.7附1:程序清单附2:电路图附录一:输出模块/*程序功能是实现查询与回放,当查询调时的时候位选择和增加和减少都有效,调时确定的时候这3个位无效,在调时过程中回放键没有效*/#include<reg52.h>#include"PCF8563.H"#include"LCM12864driver.H"#include"VIIC_C51.H"#include"zm.h"sbitdemand_key=P1^0;//查询&确定键sbitauto_key=P1^1; //回放&暂停sbitnum_key=P1^2;//位选择 选择位以及增加减少键仅查询键有效时才有效sbitAdd_key=P1^3; //增加建sbitDec_key=P1^4; //减键sbitselect=P1^5; //读取总线控制sbitstart_flag=P3^2; //启动控制sbitkey_now_last=P3^6;/*****************************************************************************/staticunsignedchartimecount=0;//调时间时候时间的闪烁的计数单元staticunsignedcharnum_Send=0;//两秒发送一组数据给PC地图的计数单元unsignedcharauto_num=0;//回放时数据更新的计数单元unsignedintaddr_num_lat1; //读出的地址变量unsignedcharread_latlon[15]={0};unsignedcharread_latlon1[15]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};unsignedcharnum;//位选择计数unsignedcharweek_CLK=0,hour_CLK=0,min_CLK=0;sec_CLK=0;unsignedcharweek=0,hour=0,min=0,sec=0,sec1=0;unsignedcharnum_xianshi,num_read=0; //3秒钟交换显示计数变量unsignedcharrr_num;unsignedintkeep_int0=0,keep=0;unsignedcharsuba;bitflag_hour=0,read_flag=0; //小时加1表示位bitflag_min=0; //星期加1标志位bitflag_xianshi=0; //3秒变换标志位bitflag=0;//闪烁标志位bitflag_auto=0;//自动回放更新数据标志位bitauto_flag=0;//=1的时候是回放,=0的时候是暂停bitdemand_flag=0,Init_flag=1;//=1的时候查询,=0的时候确定bitssou=1;bitfuzhi=1;bitpingbi=0;bitflag_move=0;bitint00,int01;/***************************************************************************名称:Init_gps说明:初始化计数单元和中断口**************************************************************/voidInit_gps(void){TMOD=0x21;TL1=0xfa;TH1=0xfa;TH0=(65535-46080)/256;//50ms定时TL0=(65535-46080)%256;SCON=0x50;PCON=0x00;TR1=1;TR0=1;ET0=1;EA=1;ES=1;PT1=1;PX0=1;}/*******************************************************************名称:Delay1说明:延时程序******************************************************************************/voidDelay1(intnum){while(num--);}/******************************************************************************名称:Timer1说明:定时/计数器1中断程序**********************************************************************/voidTimer1(void)interrupt1using1//中断入口,冒号闪烁{unsignedchartemp,i; TH0=(65535-46080)/256;//50ms定时 TL0=(65535-46080)%256;timecount++; num_Send++; auto_num++; num_xianshi++; keep_int0++; rr_num++; if(rr_num>=5) { rr_num=0; flag_move=1; } if(keep_int0>=20) { keep_int0=0; keep++; } if(num_xianshi>40) { flag_xianshi=~flag_xianshi; num_xianshi=0; } if(timecount>9)//500MS { timecount=0; flag=~flag; //调试的时候实现时间显示闪烁 } if(auto_num>200)//自动回放的时候6秒更新一组数据 { auto_num=0; flag_auto=1; } if(num_Send>40)//两秒的时候发送一组数据给PC地图 { num_Send=0;/********************************发送查询状态的数据给地图************************************/ if(key_now_last==1) { for(i=0;i<67;i++) { switch(i) { case0:temp='$';break; case1:temp='G';break; case2:temp='P';break; case3:temp='G';break; case4:temp='G';break; case5:temp='A';break; case6:temp=',';break; case7:temp=((hour_CLK-8)+24)%24/10+'0';break; case8:temp=((hour_CLK-8)+24)%24%10+'0';break; case9:temp=(min_CLK/10)+'0';break; case10:temp=(min_CLK%10)+'0';break; case11:temp='0';break; case12:temp='0';break; case13:temp=',';break; case14:temp=read_latlon[0]/10+'0';break; case15:temp=read_latlon[0]%10+'0';break; case16:temp=read_latlon[1]/10+'0';break; case17:temp=read_latlon[1]%10+'0';break; case18:temp='.';break; case19:temp=read_latlon[2]/10+'0';break; case20:temp=read_latlon[2]%10+'0';break; case21:temp=read_latlon[3]/10+'0';break; case22:temp=read_latlon[3]%10+'0';break; case23:temp=',';break; case24:temp=read_latlon[4];break; case25:temp=',';break; case26:temp=read_latlon[5]/10+'0';break; case27:temp=read_latlon[5]%10+'0';break; case28:temp=read_latlon[6]%10+'0';break; case29:temp=read_latlon[7]/10+'0';break; case30:temp=read_latlon[7]%10+'0';break; case31:temp='.';break; case32:temp=read_latlon[8]/10+'0';break; case33:temp=read_latlon[8]%10+'0';break; case34:temp=read_latlon[9]/10+'0';break; case35:temp=read_latlon[9]%10+'0';break; case36:temp=',';break; case37:temp=read_latlon[10];break; case38:temp=',';break; case39:temp='1';break; case40:temp=',';break; case41:temp='0';break; case42:temp='7';break; case43:temp=',';break; case44:temp='1';break; case45:temp='.';break; case46:temp='4';break; case47:temp=',';break; case48:temp='7';break; case49:temp='.';break; case50:temp='6';break; case51:temp='2';break; case52:temp=',';break; case53:temp='M';break; case54:temp=',';break; case55:temp='7';break; case56:temp='.';break; case57:temp='0';break; case58:temp=',';break; case59:temp='M';break; case60:temp=',';break; case61:temp='';break; case62:temp=',';break; case63:temp='*';break; case64:temp='6';break; case65:temp='6';break; case66:temp='\n';break; } SBUF=temp; while(TI==0); TI=0; } }/***************发送当前状态的数据给电子地图************************************/ else { for(i=0;i<67;i++) { switch(i) { case0:temp='$';break; case1:temp='G';break; case2:temp='P';break; case3:temp='G';break; case4:temp='G';break; case5:temp='A';break; case6:temp=',';break; case7:temp=((hour-8)+24)%24/10+'0';break; case8:temp=((hour-8)+24)%24%10+'0';break; case9:temp=(min/10)+'0';break; case10:temp=(min%10)+'0';break; case11:temp='0';break; case12:temp='0';break; case13:temp=',';break; case14:temp=read_latlon[0]/10+'0';break; case15:temp=read_latlon[0]%10+'0';break; case16:temp=read_latlon[1]/10+'0';break; case17:temp=read_latlon[1]%10+'0';break; case18:temp='.';break; case19:temp=read_latlon[2]/10+'0';break; case20:temp=read_latlon[2]%10+'0';break; case21:temp=read_latlon[3]/10+'0';break; case22:temp=read_latlon[3]%10+'0';break; case23:temp=',';break; case24:temp=read_latlon[4];break; case25:temp=',';break; case26:temp=read_latlon[5]/10+'0';break; case27:temp=read_latlon[5]%10+'0';break; case28:temp=read_latlon[6]%10+'0';break; case29:temp=read_latlon[7]/10+'0';break; case30:temp=read_latlon[7]%10+'0';break; case31:temp='.';break; case32:temp=read_latlon[8]/10+'0';break; case33:temp=read_latlon[8]%10+'0';break; case34:temp=read_latlon[9]/10+'0';break; case35:temp=read_latlon[9]%10+'0';break; case36:temp=',';break; case37:temp=read_latlon[10];break; case38:temp=',';break; case39:temp='1';break; case40:temp=',';break; case41:temp='0';break; case42:temp='7';break; case43:temp=',';break; case44:temp='1';break; case45:temp='.';break; case46:temp='4';break; case47:temp=',';break; case48:temp='7';break; case49:temp='.';break; case50:temp='6';break; case51:temp='2';break; case52:temp=',';break; case53:temp='M';break; case54:temp=',';break; case55:temp='7';break; case56:temp='.';break; case57:temp='0';break; case58:temp=',';break; case59:temp='M';break; case60:temp=',';break; case61:temp='';break; case62:temp=',';break; case63:temp='*';break; case64:temp='6';break; case65:temp='6';break; case66:temp='\n';break; default:break; } SBUF=temp; while(TI==0); TI=0; } } }}/*********************************************名称:auto_play说明:回放过程时间的计数程序。**********************************************************/voidauto_play(void){ flag_min=1; if(flag_min==1) { flag_min=0; if(min_CLK<59) { min_CLK=min_CLK+1; } else { min_CLK=0; flag_hour=1; } } if(flag_hour==1) { flag_hour=0; if(hour_CLK<23) { hour_CLK=hour_CLK+1; } else { hour_CLK=0; if(week_CLK<6) {week_CLK++;} else {week_CLK=0;} } } }/***************************************************************名称:auto_play1说明:时钟的计数程序。***************************************************************/voidauto_play1(void){ if(sec<5) { sec=sec+1; } else { sec=0; flag_min=1; } if(flag_min==1) { flag_min=0; if(min<59) { min=min+1; } else { min=0; flag_hour=1; } } if(flag_hour==1) { flag_hour=0; if(hour<23) { hour=hour_CLK+1; } else { hour=0; if(week<6) {week++;} else {week=0;} } } }/***********************************************************名称:JIsuan说明:查询记录时间的设置程序*********************************************************/unsignedcharJIsuan(unsignedcharss,unsignedchari) { if(Add_key==0) { Delay1(100); if(Add_key==0) { while(Add_key==0); ss=(ss+1)%i; } } if(Dec_key==0) { Delay1(100); if(Dec_key==0) { while(Dec_key==0); if(ss>0) {ss=ss-1;} else {ss=i-1;} } } return(ss);}/*******************************************名称:Disp_tiaoshi说明:查询记录时间在LCD上的显示程序**********************************************/voidDisp_tiaoshi(void){unsignedcharsj[]={'','',':','','',':','','0'};unsignedchari;sj[0]=Disp_sz[hour_CLK/10];sj[1]=Disp_sz[hour_CLK%10];sj[3]=Disp_sz[min_CLK/10];sj[4]=Disp_sz[min_CLK%10];sj[6]=Disp_sz[0];

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论