毕业设计毕业论文基于51单片机汽车行驶状态记录仪系统设计.doc
本科生毕业设计基于51单片机汽车行驶状态记录仪系统设计 独 创 性 声 明本人郑重声明:所呈交的毕业论文(设计)是本人在指导老师指导下取得的研究成果。除了文中特别加以注释和致谢的地方外,论文(设计)中不包含其他人已经发表或撰写的研究成果。与本研究成果相关的所有人所做出的任何贡献均已在论文(设计)中作了明确的说明并表示了谢意。签名: 年月日授 权 声 明本人完全了解许昌学院有关保留、使用本科生毕业论文(设计)的规定,即:有权保留并向国家有关部门或机构送交毕业论文(设计)的复印件和磁盘,允许毕业论文(设计)被查阅和借阅。本人授权许昌学院可以将毕业论文(设计)的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存、汇编论文(设计)。本人论文(设计)中有原创性数据需要保密的部分为(如没有,请填写“无”): 签名: 年 月 日指导教师签名: 年 月 日摘 要汽车行驶状态记录仪是一种安装在汽车上的特殊的数字式电子记录装置。它可以全程记录汽车行驶数据,并通过对所记录的行驶信息数据进行分析,精确掌控汽车的各种状况。利用它,可有效预防驾驶员违章驾驶、遏制重大交通事故,约束驾驶员的不良驾驶习惯,为执法人员进行事故的分析、处理提供科学的原始数据,因此在交通运输管理中发挥着十分重要的作用。针对目前汽车行驶记录仪的研究现状,本文设计并实现了一种基于51单片机的汽车行驶状态记录仪,该汽车行驶状态记录仪具有准确性、可靠性、高效性、易读性和价格低廉等特点。关键词:汽车行驶状态记录仪;单片机;C51;液晶显示;ABSTRACTVehicle traveling data recorder(VTDR) is a special digital electronic recorder which used to acquire and store vehicles traveling speed,time-distance and other related status information,and then display data via LCD and RS232 interfaceThe use of vehicle travel- ling data recorder carol not merely halt the break in traffic rules and regulations, restrain the drivers from being drive at bad habit,and call prevent the traffic accident effectively, it can also offer scientific initial data for the tipstaffs carries on the accidentsSo it plays a very important role in transportation managementAiming at the actuality of the VTDR research,a VTDR is designed in this paper which bases on the 51 MCUIt also has some characteristics such as real-time,reliable,high dependability, read-easy and less costKey words: Vehicle Traveling Data Recorder;Single Chip Microcomputer;C51;LCD Display目 录1 绪论11.1国内外汽车行驶状态记录仪发展的状况11.2本课题的目的和意义21.3本课题的主要研究内容32 汽车行驶状态记录仪总体方案设计32.1汽车行驶记录仪的功能和技术指标32.2汽车行驶状态记录仪的系统结构42.2.1设计思路分析42.2.2面板介绍和使用方法53 汽车行驶状态记录仪硬件设计与实现63.1 记录仪的供电63.2 信息采集模块73.3单片机模块83.4可编程逻辑器件93.5日历时钟芯片123.6液晶显示模块LCD143.7信息的存储154 汽车行驶状态记录仪软件设计与实现164.1 软件流程164.2中断子程序184.3 获取状态信息204.4 时间信息的设置和获取214.5 键盘输入224.6 液晶显示254.7 IC卡操作265 分析与结论286 后续研究与发展前景29附 录30参考文献31致 谢321 绪论目前,我国交通建设持续快速发展,车辆的数目急剧增多,道路交通安全形势相当严峻,这样提高运输企业规模与管理等级,加强道路交通安全管理及运输等问题越来越受到社会和行业的关注。汽车行驶状态记录仪(Vehicle travelling data recorder),亦称“汽车黑匣子”,是一种安装在车辆上,对车辆行驶速度、时间、里程以及有关车辆行驶的其它状态信息进行记录、存储并可通过液晶屏显示的数字式电子记录装置。汽车行驶状态记录仪能完整、准确地记录汽车行驶状态下的相关情况,能将汽车行驶轨迹完整记录,并通过专用电子器件在液晶显示屏上显现,达到遏止疲劳驾驶,车辆超速违章的效果,从而约束驾驶员的不良行为。当然,对分析鉴定事故,提高交通的管理执法水平和运输管理水平、保障车辆运行安全也有着重要的实际意义和社会价值。1.1国内外汽车行驶状态记录仪发展的状况资料表明,在20世纪80年代,发达国家就开始安装并使用汽车行驶记录仪。其中,欧共体已在1975年就通过了在汽车上安装汽车行驶记录仪的立法,要求35吨以上货车、9座以上客车必须安装行车记录仪;欧盟在第3825/85号法规关于公路运输车辆的记录设备的第三款中规定:“记录设备应在欧盟成员国使用的客货运输车辆上安装和使用。”这一立法要欧洲的15个成员国在10年内,给在用的900万辆卡车和轿车安装这一装置。这一作法很快在美国引起效仿。1998年,马来西亚内阁会议决定,强制使用汽车行驶记录仪。以日本为例,日本的法律规定,拥有5辆以上汽车的运输单位必须配备一名专职安全管理人员,以后每增加20辆汽车必须增加1名安全管理人员。安全管理人员监督使用汽车行驶记录仪,通过定期采集和分析行驶记录仪的各种数据,可以完整、准确地判定每辆车在每一时刻的运行状况,以此加强企业的安全生产管理。2001年10月24日,交通部、公安部、国家安全生产监督管理局共同发布了关于加强公路客运交通安全管理的通告,为明确长途客车应当使用行驶记录仪奠定了坚实的基础。自2001年以来,交通部交规划发200l268号发布的公路行业产业政策、交公路发2002226号和交公路发2002418号文件等分别要求利用全球定位系统(GPS)以及行驶记录仪对运输全过程进行跟踪,尤其是长途客运车辆、危险品运输车辆和旅游客运车辆要逐步采用GPS行车记录仪,以确保运输及人身安全。2003年国家质量监督检验检疫总局发布并实施了GB/T19056-2003汽车行驶记录仪国家标准,该标准对汽车行驶记录仪的各项性能、试验方法、检验规则及安装作了详细的规定。2004年12月10日,在第二届中国智能交通论坛期间,1l家汽车行驶记录仪厂家于深圳正式签字成立中国汽车行驶记录仪联盟。联盟初步成立后,行业内一些具有实力的厂家继续加盟。行业联盟首先将在联盟成员内解决产品的互联互通。美国、日本、香港、马来西亚等地也在大量使用汽车行驶记录仪,我国许多大中小城市一部分车辆也安装上了汽车行驶状态记录仪。近年来的统计资料表明:使用汽车行驶状态记录仪以来,交通事故率降低了37-52,大大减少了人员伤亡和财产损失,产生了很明显的社会效益与经济效益。1.2本课题的目的和意义汽车行驶状态记录仪能够为驾驶员提供其驾驶活动的反馈信息,为道路运输企业提供良好的管理工具。首先,汽车行驶状态记录仪能真实、准确反映车辆运行中的实际状况,记录相关行驶的数据。其存储的数据可作为企业加强对车辆的使用、运行、调度的科学管理的依据。其次,汽车行驶状态记录仪在车辆超速或超时行驶时能发出报警声,督促司机安全行车。而且,司机保持车辆中速行驶,可以延长车辆使用寿命、节约燃料、减轻耗损,减少企业的经营成本。另外,汽车行驶记录仪记录的数据,对交通事故的原因和责任分析,也有一定的作用。我国公安部为遏制日益频繁的交通事故,责成公安部交通管理科学研究所、中国公路学会客车学会、中国航空工业第61l研究所、中国道路运输协会、中国汽车技术研究中心、广州银宜智能交通有限公司共同参加起草并制定了汽车行驶记录仪的国家标准GBIT90562003,并将在我国的营运车辆中运用法规强制安装汽车行驶记录仪。因此,研制汽车行驶记录仪将具有重大的现实意义和社会价值。1.3本课题的主要研究内容本系统包括汽车端的汽车行驶状态记录仪和计算机端的汽车行驶信息分析软件两部分,前者记录下的状态数据最终送到计算机,由计算机侧相应的分析软件来分析,这样得到的结果有助于运输企业和管理部门监控车辆的运行状态,加强对车辆和驾驶员的管理,同时也可为交通管理部门对汽车事故处理提供相应的技术手段。对于计算机端的车辆行驶信息分析软件部分,由于不在51单片机系统开发的研究范畴之内,因此本文中不做具体介绍。2 汽车行驶状态记录仪总体方案设计2.1汽车行驶记录仪的功能和技术指标汽车行驶状态记录仪的主要功能及技术指标应包括以下几个方面。(1) 能够实时监督并记录汽车行驶的各种状态信息,包括速度、里程等重要数据。(2) 为每个驾驶员提供单独的可移动存储卡式设备,用于记录驾驶员信息(如姓名、工号等)和汽车(如车号等),为有关部门检查提供必要的信息;同时,还需要提供存储发车站和终点站的功能。(3) 安装在汽车上的行驶状态记录仪要提供方便、灵活的操作界面,可进行输入信息的提示,同时还要有实时信息的显示,并可根据用户要求或设置,另外还要具备汽车超速时的报警功能。(4) 安装在计算机上的汽车行驶信息分析软件应该提供方便的图形用户界面,支持鼠标和键盘操作,能统计分析任何时段的行驶速度、行驶里程、停车次数、停车时间、超速次数、超速时间、发车以及到站时间,并能用图形显示速度、里程的变化情况;在汽车正常行驶或发生交通事故时,可向管理部门提供详实的汽车行驶数据,帮助管理人员全面了解汽车的行驶情况,同时也可提供故障诊断功能,便于汽车维护和维修人员判断及修理。所开发的汽车行驶状态记录仪作为产品使用还需要满足下面的要求:l 合适的数据记录频率:速度的采样周期可设置为1次/ s0.2次/s。l 一定的数据记录容量:0240h。l 较长的数据存储时间:掉电情况下可至少保存10年以上。l 监测汽车行驶速度范围:0240km/h。l 记录需要的汽车行驶数据,包括速度、里程、超速度及时间、停车次数及时间。l 存储卡还要可以存储驾驶员信息、汽车信息、发车时间和到站时间、起始站和终点站。l 要能够抗电磁干扰、防火、防潮、抗冲击。l 尺寸要合适,便于在汽车上安装。2.2汽车行驶状态记录仪的系统结构2.2.1设计思路分析本系统包括数据采集、控制、键盘输入、液晶显示、日历、数据存储等功能模块,其中采集、控制、键盘及“屏显”都属于51单片机的应用范畴。本课题研究的汽车行驶状态记录仪的总体结构框图如图2-1:汽车内部供电单元信号采集键盘输入单片机系统液晶显示可编程控制模块信息存贮图2-1汽车行驶状态记录仪总体结构框图在图2-1中,单片机系统是整个系统的核心,通过硬件和内部软件的配合控制整个系统的运行。供电单元的作用是将汽车内部配电模块提供的电压转换成记录仪可以正常工作的电压,这其中为了避免汽车内部电机的干扰,需要进行屏蔽。信号采集模块是指将汽车内部霍尔传感器传过来的一对分差信号经过适当的变换变成一个脉冲信号提供给单片机系统。这其中需要用光耦模块进行隔离,来避免强脉冲信号对电路板的干扰。信息储存是指单片机系统将采集到的信息经过适当的运算处理之后存储到智能IC卡中,IC 卡中的信息可以长时间保存,可以用读卡设备读出其中的信息然后进行分析。设计这样的单片机系统当然还要用到可编程逻辑器件,它可以灵活方便地产生译码、控制等信号。键盘输入和液晶显示是常用的单片机输入/输出模块,为用户提供友好方便的人机操作界面,用户可以输入特定的信息,也可以看到实时的速度、里程及时间等信息,可以做出实时判断。2.2.2面板介绍和使用方法本论文中介绍的汽车行驶状态记录仪最终会作为车载设备在汽车上,它需要具有有好的用户操作界面,和一般的仪器仪表开发一样,需要有用户操作面板,可设计类似于图2-2所示的操作界面。 图 2-2 汽车行驶状态记录仪面板图主屏为系统的显示界面,由液晶模块实现,它的功能是显示实时速度、里程等信息;键盘主要用于输入车号、站号等信息;面板的右下方是IC卡插座,用户(此处实际就是司机)由此插入自己的智能IC卡,IC卡记录此次行驶的信息。面板中间区域是两个指示灯,左边为电源指示灯,正常情况下接通电源后亮绿灯,右边为超速报警灯,超速时亮红灯。3 汽车行驶状态记录仪硬件设计与实现3.1 记录仪的供电电源系统是任何汽车电子设计中最重要的子系统之一,电源设计非常重要,如果电源设计比较糟糕的话,其它单元设计无论多么完美,系统也不能正常发挥作用。整体功耗、电磁干扰等都是必须考虑的因素。目前汽车内部产生的供电是+12V,记录仪本身需要的是+5V供电,所以系统需要供电模块来实现+12V+5V的电源变换,其工作原理如图3-1(a)、3-1(b)所示。图3-1(a) 汽车行驶状态记录仪电源部分原理图图3-1(b) 汽车行驶状态记录仪电源部分原理图由于汽车行驶状态记录仪电源部分原理图画出来比较大,故分成3-1(a)、3-1(b)显示。汽车内部会提供一条屏蔽线PB,它的作用是屏蔽汽车内部产生的干扰,它被引入到光耦模块,光耦模块起到光耦隔离作用,屏蔽线和光耦电路一起可以使得采集到的信号波形尽可能干净,信号采集电路受汽车内部电动机产生的干扰尽可能小。3.2 信息采集模块此部分的硬件设计较为简单,因为需要采集的信号很少,而且汽车内部有自己的传感器,实际上也就是有现成的信号提供给记录仪。汽车轮子每转一周,会通过车子内部的霍尔传感器传送一对差分信号,此差分信号经过信号采集模块变成满足要求的计数脉冲,此脉冲信号经过一定的处理即可用来得到速度、里程等信息。信号采集模块的电路原理图如图3-2所示图3-2汽车行驶状态记录仪信号采集电路原理图图 3-2中U8是东芝公司的单光耦芯片TLP521-2,实际上它的内部就是两组光敏三极管,如图3-3所示。光敏三极管也是利用硅PN结的光电效应制成的。光敏三极管使用时,其基极通常开路,基极集电极产生的光敏感生电流反馈入基极,并被光敏三极管自己所放大,因此光敏三极管的灵敏度比光敏二极管大得多,通常要大100多倍。光敏三极管的最大工作频率只有几百KHz。光耦模块主要就是通过电光电的变换将电信号隔离开来的,它可以避免一侧对另一侧产生的干扰。记录仪上的+5V工作系统是弱电电路,汽车内部提供的脉冲信号在送入记录仪之前必须经过光耦隔离的处理。图3-2中HP和FP是汽车轮子转一周内部提供的差分信号,它在通过系统的信号采集模块后产生状态记录仪系统可以使用的信号SIG;图3-2中PB为屏蔽线,由它构成了屏蔽网络,有效地屏蔽了汽车电动机等对硬件电路的干扰。通过屏蔽和光耦隔离,得到波形干净的SIG信号,信号采集功能完成。采集到的SIG信号需要送到可编程逻辑器件中进一步处理,由单片机系统对处理后的结果进行相应的运算,可以得到速度、里程等状态信息。图3-3 单光耦芯片(TLP521内部工作框图)3.3单片机模块对于整个汽车行驶状态记录仪而言,起到控制和枢纽作用的单片机模块无疑是其中最重要的部分。其工作原理图如图3-4所示。图3-4 汽车行驶状态记录仪单片机模块原理图图3-4中U4为12M晶振,它为单片机提供稳定的12MHz工作时钟。系统选用Atmel公司的带有8KB Flash的8位微控制器AT89S8252作为单片机芯片,它完全与MCS-51系列单片机兼容(从指令集到引脚)。和51单片机相比AT89S8252还具有一些增强型的功能。因为记录仪最终需要将记录的车辆行驶状态信息存入IC卡,本系统选用的IC卡是通过SPI口存储的,所以本文选用带有SPI接口功能的单片机芯片AT89S8252。由于单片机AT89S8252芯片各管脚的功能与作用和80C51芯片的基本一样,在文中将不做详细介绍。3.4可编程逻辑器件可编程逻辑器件(Programmable Logic Device,PLD)技术是目前电子设计领域中最具活力和发展前途的一项技术,在PLD上,工程师可以通过传统的原理图输入法,或是硬件描述语言自由地设计一个数字系统。通过软件仿真,可以事先验证设计的正确性。在印刷电路板PCB完成以后,还可以利用可编程逻辑器件的在线修改能力,随时修改设计而不必改动硬件电路。使用可编程逻辑器件来开发数字电路,可以大大缩短设计时间,减少PCB面积,提高系统的可靠性。可编程芯片和单片机的配合使用已成为单片机系统的最常用开发模式。本文中可编程逻辑器件主要完成的功能包括:脉冲信号的计数、定时器和产生芯片选择信号。实现的功能比较简单,使用端口不多,选用Altera公司的EPM7032S44可以达到要求。EPM7032S44属于MAX7000S系列,此系列是Altera公司的主流芯片,采用5V/3.3V工艺,价格便宜。可编程逻辑器件设计的常用方法有图形输入法和文本输入法。图形输入法类似于数字电路设计,只是它是通过器件模型而不是具体器件搭建的;文本输入法则是通过编程的方法从已知输入得到需要的输出。相比之下文本输入法更为灵活,在实现复杂电路的设计时常采用它。本文中可编程逻辑器件实现的功能采用了图形输入和文本输入结合的方式,比较简单。本文中选用了Altera公司的开发软件Maxplus来设计的GDF文件如图3-5所示。由图3-5可知,液晶显示模块和日历时钟芯片的片选信号由读、写信号及最高位地址线A15经过简单的逻辑电路搭建而成。图中另外一部分电路由两个子模块timer和sigcounter构成,它们的作用是对信号采集到的信号SIG进行计数,结果通过系统的地址/数据复用总线送给单片机处理。图3-5汽车行驶状态记录仪可编程逻辑器件顶层图形输入设计(GDF文件)Timer模块用VHDL语言实现,代码如下:SUBDESIGN timer( clk: INPUT ; suocun: OUTPUT;)VARIABLE f3.0 : DFF; suocun: DFF;BEGIN f.clk=clk; suocun.clk=clk; f.d=(!suocun)&(f+1); suocun.d=f3 & !f2 & !f1 & !f0;END;Timer模块的输入信号为日历时钟芯片产生的方波信号,输出为计数器模块sigcounter需要的锁存信号“suocun”。计数器模块sigcounter也采用VHDL编程实现,代码如下:SUBDESIGN sigcounter( sig, lrst,suocun,oe: INPUT ; ad7.0: OUTPUT;)VARIABLE cnt07.0:DFF; cnt17.0:DFF; reg4.0:DFF; tnode7.0 : TRI_STATE_NODE;BEGIN reg0.clk=suocun; reg0.d=!reg0; reg1.clk=!oe; reg1.d=!reg0; reg2.clk=!suocun; reg2.d=reg0; reg3.clk=!oe; reg3.d=reg0; reg4.clk=!suocun; reg4.d=!reg0;cnt0.clk=sig & reg0; cnt1.clk=sig & !reg0; cnt0.clrn=lrst & (reg3.q # reg4.q); cnt1.clrn=lrst & (reg1.q # reg2.q);cnt0.d=cnt0+1; cnt1.d=cnt1+1; tnode7=TRI(cnt07.q,oe & !reg0); tnode7=TRI(cnt17.q,oe & reg0); tnode6=TRI(cnt06.q,oe & !reg0); tnode6=TRI(cnt16.q,oe & reg0); tnode5=TRI(cnt05.q,oe & !reg0); tnode5=TRI(cnt15.q,oe & reg0); tnode4=TRI(cnt04.q,oe & !reg0); tnode4=TRI(cnt14.q,oe & reg0); tnode3=TRI(cnt03.q,oe & !reg0); tnode3=TRI(cnt13.q,oe & reg0); tnode2=TRI(cnt02.q,oe & !reg0); tnode2=TRI(cnt12.q,oe & reg0); tnode1=TRI(cnt01.q,oe & !reg0); tnode1=TRI(cnt11.q,oe & reg0); tnode0=TRI(cnt00.q,oe & !reg0); tnode0=TRI(cnt10.q,oe & reg0); ad=tnode;END;至此本设计中可编程逻辑电路的设计已经完成。在调试过程中若发现需要更改设计也很方便,只需重新编写程序、设计.gdf文件重新下载即可,不用对电路板做修改,这也是采用可编程逻辑器件的最大优点。3.5日历时钟芯片汽车行驶状态记录仪需要对状态发生时所对应的时间信息做相应的记录,以便后来的分析使用,所以需要获取详细的时间信息。在2.1节中系统的技术指标中提到数据记录容量要求在0240小时,数据存储时间在掉电情况下至少保存10年以上。根据这些要求,系统中选用了日历时钟芯片来提供详细的日期和时、分、秒的时间信息。本文中选用达拉斯半导体公司的芯片DS12C887.。DS12C887是一款实时时钟芯片,内部有锂供电的石英晶振,它可以在无外部供电的情况下将数据保存10年以上。它内部通过计数可以实现时间的记录,时间信息可以详细到时、分、秒、年、月、日,以及星期,时间显示模块可以选择带有“AM”和“PM”指示的12小时模式及正常的24小时模式,芯片可以提供闹钟的设置,在芯片内部还有15个字节的时钟和控制寄存器,以及113个字节的通用RAM空间。芯片DS12C887的内部工作原理如图3-6所示。用户RAM113字节时钟产生÷8÷64÷64周期振荡/方波选择电源切换和写保护方波输出寄存器A、B、C和D时钟日历和报警RAM世纪字节时钟日历更新总线接口BCD/二进制增加CSVccVbatDSR/WASMOAD0AD7VccPOKVccSQWIRQRESET双缓冲图3-6日历时钟芯片DS12C887的内部工作原理框图DS12C887的内存空间为128个字节,其中11个字节专门用于存储实时时间信息,4个字节专门用于控制和存放状态信息,剩下的113个字节为用户可以使用的普通RAM空间。14字节秒闹钟分闹钟分钟星期时闹钟时钟秒日月年寄存器A寄存器B寄存器D寄存器C世纪0000D01233546131478495051127910111213500E3132337F二进制或BCD输入图3-7日历时钟芯片DS12C887内部内存空间映射示意图3.6液晶显示模块LCD本文中液晶显示模块LCD(Liquid Crystal Display)选用内含KS0108B/HD61202控制器的图形液晶显示模块GXM12864,它是一种采用低功耗CMOS技术实现的点阵图形LCD模块,有8位微处理器接口,通过内部的128×64位映射DDRAM(Display Data RAM)实现128点×64点大小的平板显示。该液晶显示模块使用KS0107B为行驱动器,同时使用KS0108B作为列驱动器。KS0107B不与MPU发生联系,只要提供电源就能产生行驱动信号和各种同步信号,比较简单。对于用户来说,LCD模块的使用关键在于驱动芯片的使用,驱动芯片和LCD显示屏的接口电路已经做好在GXM12864的内部,用户使用时只需阅读驱动芯片的相关资料,设计出驱动芯片和微处理器之间的接口电路,编写具体的驱动程序。前面提到行驱动芯片KS0107B不与MPU发生联系,只要提供电源就能产生行驱动信号和各种同步信号,比较简单,在此就不做介绍了。列驱动芯片KS0108B与KS0107B配合对液晶屏进行行列驱动,可直接与8位微处理器相连。微处理器对液晶显示模块的操作是通过KS0108B支持的指令系统实现的,掌握这些命令是编写液晶模块驱动程序的关键。3.7信息的存储汽车行驶状态记录仪最终的任务是要将记录下的信息存储到智能IC卡中,以便以后对信息进行分析。IC卡采用符合国际标准的智能卡,本系统选用的是ATMEL公司的AT45D041A。AT45D041A是4M位的串行数据Flash,采用+5V供电,它支持在系统的页编程,删除操作可选择页或块删除,支持SPI接口的读写操作,主要用于数字语音、图像和数据的存储。AT45D041A具有4M位的内存空间,此空间由2048页构成,每页264B,除此外,它还有两个SRAM数据缓冲,每个缓冲区的大小也是264B,缓冲区的作用使得主内存在重新编程的时候允许接受新数据。AT45D041A的内部结构如图3-8所示。I/O接口FLASH内存阵列页(264字节)BUFFER1(264字节)BUFFER2(264字节)SISOSCKCSRESETVCCGNDRDY/BUSY图3-8 IC卡芯片AT45D041A的内部结构框图与普通Flash并行的数据接入相比,AT45D041A使用SPI接口串行接入数据,采用简单的串行数据接口可以增加系统可靠性,减小器件的封装,减少引脚数目。AT45D041A和CPU接口的引脚主要有7个:CS为低电平有效的片选脚;SCK为串行时钟脚;SI、SO分别为串行输入、输出脚;WP为低电平有效的硬件页写操作保护脚,低电平时主内存空间的前256页不允许进行编程操作,在此可接VCC;RESET是低电平有效的芯片复位脚;RDY/BUSY是状态指示脚,表示当前卡的状态是准备好(高电平)或是忙(低电平)。这些引脚中SCK、SI和SO即为芯片的串行接口。4 汽车行驶状态记录仪软件设计与实现下面将介绍如何在前面实现的硬件平台上实现软件设计过程。4.1 软件流程本文中设计的软件流程如图4-1所示。开始初始化汽车启动后主屏显示提示信息输入初始相关信息并存入IC卡汽车第一次开动?While 定时显示车速等信息超速?到站?汽车到站后主屏显示提示信息输入到站相关信息并存入IC卡NoYes超速报警YesNoNo图4-1 汽车行驶状态记录仪软件流程图从图4-1中可以看出,软件的流程是和汽车行驶状态记录仪工作时的工序相对应的。在启动后,液晶显示屏会提示输入站号、车号等信息,用户可以通过键盘输入,汽车开动以后,显示屏会显示汽车实时的速度和所行驶的里程信息,在到站以后,用户按先功能键“FUN”则可以输入到站的站号,之后记录下的行驶状态信息被存入到IC卡中。在行驶过程中还要判断汽车是否超速,超速要给出报警等提示。可编程逻辑器件对车轮转一周产生的信号进行计数,单片机利用定时中断定期对计数值进行统计计算,从而得到速度等信息,程序中不断将速度值和门限值做比较,如果超过就打开超速报警红灯。除了定时中断以外,本系统还使用了一个外部中断INT0,汽车到站时,用户按下“FUN”键就会触发此中断。程序检测到此中断后会执行到站后的相应操作。主程序在检测到车子开动以后进入一个无限循环,循环和中断的配合实现了系统的整个功能。4.2中断子程序本例中使用了定时器0中断(工作在计时器方式)和外部中断0。前者用于定时显示速度、里程等信息;后者用于到站操作。主程序需要根据要求对中断有关的寄存器进行设置。TMOD=0x06;TH0=5;TL0=5;IP=0x01;EA=1;ET0=1;EX0=1;TR0=1;定时中断服务程序如下:void timer0 ( ) interrupt 1 using 1EA=0;timecount+;circle=P0;P14=0;ttcy+ =circle;P31=0;P17=1;EA=1;程序中最主要的是三个变量timecount、circle和ttcy。其中circle值由CPLD计算获得,它表示的是转速信息;ttcy值对circle进行累加,在主程序中由它可得到行驶里程信息;timecount变量也是一个全局变量,在定时中断中不断累加,它决定了主程序何时刷新速度和里程的更新显示。外部中断采用的是中断查询的方式,也就是中断到来的时候只做置位操作(给设定的中断标志位置1),主程序中不断轮询此标志位,发现被置位后进行相应的处理,这样可简化中断服务子程序。外部中断服务程序如下:void int0 ( ) interrupt 0 using 2 EA=0; int0flag=1; EA=1;上述程序完成对int0flag的置位操作。在主程序中需要轮询int0flag变量。void main (void) while (1) if ( int0flag) 4.3 获取状态信息硬件电路中,车轮每转一周都会提供一个脉冲信号SIG,然后可编程逻辑器件EPM7032会算出转速信息通过P0口送给单片机。单片机获取状态信息的程序如下:if (timecount>=120)timecount=0;hi=36*circle/35;mid=hi/100;disp1(mid);lo=(himid*100)/10;disp2(lo);disp2(himid*100lo*10);mid=(36*circle35*hi)*10/35;disp3(mid);j=ttcy/700;mid=j/100;disp4(mid);lo=(jmid*100)/10;disp5(lo);disp5(jmid*100lo*10);mid=(ttcy700*j)*10/700;disp6(mid);4.4 时间信息的设置和获取主程序流程图中,初始化部分要包括时间信息的初始化。首先屏幕会显示提示信息,比如“请输入年”,然后用户通过键盘输入正确信息,比如“2008”,此时程序记录此信息并显示在液晶屏上,这样依次根据屏幕提示输入所有的时间信息,包括年、月、日、时、分、秒。具体程序如下:void presettime ( ) unsigned char year,month,day,hour,min,sec; timeregb=0x8e; timerega=0x2f; dispnian( ); year=getkey( ); timeyear=year; dispyue( ); month=getkey( )timemonth=month; dispri( ); day=getkey( ); timeday=day;dispshi;hour=getkey( );timehour=hour;dispfen;min=getkey( );timemin=min;dispmiao;sec=getkey( );timesec=sec;timeregb=0x0e;设置初始时间主要是对实时时钟芯片DS12C887的操作,程序通过获取键盘输入的值,写入芯片内部的6种时间寄存器。芯片内部还有4个控制寄存器,在此设计中只用了A、B寄存器。此外,程序中还用到了键盘扫描和液晶显示相关的函数。4.5 键盘输入记录仪的输入通过键盘来实现,使用的键盘扫描函数keyscan()如下:unsigned char keyscan(void)( unsigned char sccode