40基于单片机的汽车行驶状态记录仪系统的软件设计大学毕业论文.doc
-
资源ID:91489163
资源大小:1.13MB
全文页数:53页
- 资源格式: DOC
下载积分:19.9金币
快捷下载
![游客一键下载](/images/hot.gif)
会员登录下载
微信登录下载
三方登录下载:
微信扫一扫登录
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
40基于单片机的汽车行驶状态记录仪系统的软件设计大学毕业论文.doc
基于单片机的汽车行驶状态记录仪系统的软件设计1 绪论1.1本课题的研究意义 随着交通的迅速发展,汽车已经成为现代社会的一种重要的交通工具。道路交通事故频繁发生,群死群伤的恶性交通事故屡屡发生。据有关部门统计,2005年上半年,全国共发生道路交通事故228657起,造成46012人死亡、236483人受伤,直接财产损失9.6亿元1。据统计资料显示,汽车驾驶员的超速行驶、违章抢道、疲劳驾驶、疏忽大意是导致交通事故的主要原因,占交通事故数量的80以上。哪里有交通警察在场,哪里的交通事故就极少发生。如果给每辆汽车安装上“电子警察",有效地监督驾驶人员的驾驶行为,必能预防或减交通事故的发生;在发生交通事故后,“电子警察”也能给我们提供数据和资料,提高事故处理的效率和准确性2.3。汽车行驶记录仪对预防驾驶员疲劳驾驶、约束驾驶员违章、分析鉴定事故、提高交警的执法水平和运输管理水平、保障车辆运行安全等具有重要的实际作用及意义。统计资料表明,汽车黑匣子的使用,使交通事故率降低3752,大大减少了人员伤亡和财产损失,产生了显著的社会效益和经济效益4。1.2记录仪的国内外发展现状1934年,德国发明了世界上第一台纸盘式行驶记录仪,至今已有75年的历史。它可以将曲线画在圆形的记录纸上。由于技术的发展,纸盘式记录仪现在应用少。20世纪70年代后期,欧洲率先推出了机模拟式驾驶记录仪。进入九十年代,科学技术飞速发展,计算机日益普及,美国和德国又开发了数字式汽车事故记录仪。20世纪90年代,美国、欧共体相继推出性能优良的电子式记录仪,并得到美国国家运输安全委员会的支持,敦促在其轿车和卡车上安装这种仪器。主管交通安全的国家安全委员会(NTSB)也一直在致力于推广汽车黑匣子的工作。NTSB正式要求各汽车生产厂家安装汽车黑匣子,通用、福特等汽车公司随即纷纷行动。据报道,仅通用一家公司就为600万辆出厂车安装了黑匣子5.6。2003年日本汽车研究所开发小组研制出一种能记录在交通事故发生时驾驶数据的汽车“黑匣子"。“黑匣子”安装在司机座位下面,能够记录速度、方向盘角度、刹车板及油门踩放的情况。当急刹车或急转弯使汽车达到一定的速度时,便判断为“事故”,事故发生前55秒和后5秒问的各种数据自动记录到磁盘中。另有一个如后视镜一样的照相机,自动收录事故发生前10秒和后5秒间从驾驶座上能看到的场面。在一年半的试验期间,在实际发生的38起交通事故中,黑匣子都正确地显示了何时踩刹车等情况7。这种“黑匣子"数据存储在磁盘中,车辆行驶中可能颠簸,磁盘抗震能力较差。随着半导体技术和集成电路的发展,容量大体积小的存储芯片层出不穷,而且相对磁盘来说,存储芯片具有抗震性能,更适合车辆的行驶环境,在车辆行驶记录装置上得到了广泛应用。视频功能对存储空间要求较高,实现复杂,成本较高。记录仪最早是在1984年国内某大学研发了汽车行车记录仪,由于技术不太成熟,没有投入实际生产。1994年,记录仪在我国市场上蓬勃发展,出现了近百家记录仪生产企业8。2002年我国公安部根据2001年底公安部、交通部、国家安全生产监督管理局下发的关于加强公路客运交通安全管理的通告和2002年公安部、·国家安全生产监督管理局制定的2002年预防道路交通事故工作方案的要求,着手制定汽车行驶记录仪的国家标准。汽车行驶记录仪GBT 190562003标准于2003年4月15日发布,2003年9月1日实施9。广州市二汽公司率先试用NC7000系列数字式行车记录仪。2004年5月北京巴士旅游分公司的150辆旅游车上都已经安装了记录仪10。目前市面上的汽车行驶状态记录仪主要有以下类型: 记录式记录仪记录式记录仪的主要特点是模拟航空记录仪的工作方式,记录车辆的实时状态数据并保存,为交通肇事的评判提供佐证。但是,记录数据一般只作为交通事故的事后技术参考,不能作为评判的直接依据。该记录仪以一个合适的间隔采集、存储车辆状态数据,包括车速、发动机转速、节气门位置、车灯、制动等指标。采样时间间隔一般有0.3、0.5、1、5min等几种。同时可以记录车辆停车前20-120s间隔的密集数据,为事故疑点分析提供帮助,密度一般为0.1s左右。为了扩展使用范围,有些型号的产品还附加有超速和超时驾驶报警功能。功能上实现了“实现预警”,延伸了传统记录仪“事后决断”的特点。 管理式记录仪管理式记录仪在使用应用上与记录式有所不同,它是记录式记录仪的升级,是为满足车辆营运管理要求而设计的,主要的应用是基于加强车队营运管理。管理式记录仪主要由车载记录系统和管理系统组成,车载记录部分完成相当于记录式记录仪的工作,将记录数据传递给管理系统进行高级处理。因此可以实现多个记录仪的统一管理,为车队调度提供便利。数据的传递一般有计算机串口、存储卡、专用读取设备等几种方式。管理式记录仪一般是以记录式为基础与GPS和GIS技术结合。因此所获取的信息更加丰富,除了基本的车速、里程、节气门位置、制动等信号外,还有车辆实时的地理位置、海拔高度等地理信息,使车辆在平面上,甚至空间上的管理成为可能。因此,该类型记录仪应该属于交通管理设备,也正是由于这种原因,它正在成为行车记录仪的主流产品11。记录仪的使用场合主要有以下几个方面: 交通执法管理记录仪可以记录汽车停车前20-120s的密集状态数据(事故疑点数据)。这些数据在事故调查中具有重要作用。管理系统可以利用疑点数据仿真再现事故的发生过程,帮助交通管理部门准确、科学地执法。此外,管理人员还可以通过查看记录数据来判别驾驶员是否违章驾驶,为严格执法提供科学依据。 公共交通管理在公共交通管理中,记录仪可以为管理部门提供行车信息服务,管理部门可以及时地掌握公交车的行驶状态和地理位置。因而,行车记录仪既起到了公共交通行业服务监督的作用,又方便了车队的管理和调度。 长途运输管理在长途运输过程中,交通事故的发生大多由于驾驶员的疲劳驾驶和路途生疏引起的。记录仪通过对驾驶员进行超时和超速驾驶报警,来提醒驾驶员注意安全。另一方面,管理中心向记录仪及时发送GSM信息,使驾驶员及时了解路况信息,也可以及时避免事故。 特殊运输管理 特殊运输包括重要人物、物资的运输以及危险品运输。管理部门为了实时掌握相关的运输状况,就要不断地监测记录仪的记录数据,不断了解运输车辆的状态和位置。因此,记录仪可以有效地保证特殊运输的安全与可靠性11。1.3系统设计思路分析 分析系统需要实现的功能可知,需要设计的功能模块应包括数据采集、控制、键盘输入、液晶显示、日历时钟、数据存储等,对于这些功能,选用51单片机来实现是合适的,采集、控制、键盘以及“屏显”都属于51单片机的典型应用范畴。1.3.1获取行驶状态信息毫无疑问,对于汽车行驶状态记录仪系统来说,获取行驶状态信息是所有工作的前提。系统的首要任务是采集汽车的行驶状态信息,包括速度、里程、超速度及时间、停车次数及时间等,这里最重要的是速度,其它信息可由计算机分析得出。信息采集的方法和汽车上的速度表实现的方法类似,汽车行驶过程中轮子每转一周会通过内部的霍尔传感器送给系统一对差分信号,系统通过信号采集模块获得一个对应的脉冲信号,通过对脉冲的基计数及已知的轮子的直径信息计算出汽车的运行的速度。然后根据速度和计时信息可以算出车子的里程,速度超出设定的门限值便认为是超速度行驶,记下此时通过日历模块显示的超速度发生时间;从速度大于零到速度等于零是一次停车,记下此时通过日历模块显示的时间。经过这些处理就可以得到较为全面的行驶状态信息了12。1.3.2系统模块分析在获取行驶状态信息后,系统需要对信息进行实时的处理、显示、存储,存储后的信息可以用来进行分析。信号采集模块:将汽车内部霍尔传感器传过来的一对差分信号经过适当的变换变成一个脉冲信号提供给单片机系统,这其中需要用光耦模块进行隔离,来避免强脉冲信号对电路板的干扰。信息存储模块:单片机系统将采集到的信息经过适当的运算处理后存储到IC卡芯片中,IC卡中的信息可以长时间地保存,可以用读卡设备读出其中的信息然后进行分析。由于IC卡芯片存取的速度有限,引入数据扩展芯片作为缓存。键盘输入和液晶显示是常用的单片机输入输出模块,为用户提供友好方便的人际操作界面,用户可以输入特定的信息,也可以看到实时的速度、里程及时间等信息,可以做出实时判断12。2 系统方案设计2.1系统设计要求系统的设计要求如下: 能实时监测并记录汽车行驶的各种状态信息,包括速度、里程、超速度及时间、停车次数及时间等重要数据; 能记录驾驶员信息、汽车信息、发车时间、到站时间、发车站和终点站等信息; 具有汽车超速报警的功能。2.2系统总体方案设计2.2.1仪器的功能要求及技术性能指标根据国家标准GB T19056-2003汽车行驶记录仪1的要求,汽车行驶记录仪应该满足如下几个方面的要求。(1)电气性能要求:由于汽车的供电系统通常为蓄电池,随着汽车行驶状态的不同,汽车放电机的输出电压会有较大的波动;另外随着蓄电池使用年限和工作状态等的不同,其输出电压往往有一定波动,从而影响到整个汽车的供电电压。因此,国家标准GB_T19056-2003要求记录仪能够在一定的电压波动范围内正常工作13。电源电压的波动范围如表2-1所示。表2-1 电气性能试验参数 单位:伏特标称电源电压电源电压波动范围极性反接试验电压过电压值1291614(0.1)2424183228(0.2)3636274842(0.2)54 (2)数据安全性:记录仪应防止数据被更改或删除,应从记录仪硬件和数据分析软件系统两个方面来实现: 硬件上,应在记录仪主机上或其它适当的地方采取可靠安全措施(如铅封)防止数据储存器等重要器件被更换; 记录仅主机内车辆行驶速度、里程、驾驶时间等原始数据不能通过外部设备进行任何改写或删除操作; 分析软件对车辆识别号、车牌号码、车牌分类、车辆特征系数、驾驶员代码、驾驶证号码等重要参数,一般情况下只能读,不能更改或删除。在记录仪初始化调试、校准、维修或其他特殊情况下需对上述重要参数进行设置操作时,需经操作授权13。(3)气候环境适应性:记录仪在承受各项气候环境试验后,应无任何电气故障,机壳、插接器等不应有严重变形:其记录功能、显示功能、打印功能等应保持正常;试验前存储的数据不应丢失或改变。(4)机械环境适应性:记录仪在承受各项机械环境试验后,应无永久性结构变形;零部件应无损坏:应无电气故障,紧固部件应无松脱现象,插头、通信接口等接插件不应有脱落或接触不良现象;其记录功能、显示功能、打印功能等应保持正常;试验前存储的数据不应丢失。2.2.2主板的功能与设计13主板:包括有中央处理器、数据采集、数据存储器、实时时钟芯片、数据通信接口、插接件及电源单元等;主板主要处理汽车行驶数据的采集、记录和长期存储,同时主板为整个记录仪提供实时时钟、电源检测和对外通信(串口)等功能,是整个系统的核心。主板以AT89C51作为中央处理器。整个记录仪采用并行总线的工作方式进行连接。汽车的状态信号经过调整后,通过74LS373挂在数据总线上;利用单片机的INT0中断对调整后的速度脉冲进行计数,从而获得汽车行驶的速度和里程等信息。记录仪使用FM1808芯片作为扩展数据存储器,使用Atmel公司的4M基于SPI总线访问的Data Flash AT45DB041作为海量存储器。单片机采集到的汽车行驶数据首先存放在FM1808中,当满足一定条件的时候,将FM1808中的数据保存到Flash存储器中,进行长期的存储。“看门狗”作为复位电路可以防止单片机发生死机;系统掉电部分提醒单片机对重要的行驶数据作保存和处理;实时时钟采用;整个主机部分设计体现了高性价比和安全、可靠的设计思想。2.2.3面板的功能与设计面板主要提供人际交互功能。包括指示灯(一个电源指示灯、两个状态指示灯),蜂鸣器,LCD(分辨率为128*64)和键盘(拥有16个按键)。3 系统硬件设计本章将以汽车行驶状态记录仪为例,根据系统的功能和设计要求介绍系统的总体构成框图各部分硬件电路的设计方案,并对主要芯片原理与应用加以介绍。系统控制核心芯片选用AT89C51单片机;实时液晶显示部分采用DM12864芯片;按键显示部分采用ZLG7289芯片;实时时钟部分采用DS1302日历芯片;片外扩展的数据缓存采用FM1808铁质存储器; IC卡芯片AT45DB041用来存储完整数据;用“看门狗”芯片MAX706监视单片机的运行情况;串口采用MAX232芯片。汽车行驶状态记录仪的总体结构图如图1所示。以下将介绍单片机及各个部分的接口电路。图3-1 汽车行驶状态记录仪总体结构图3.1单片机的选择单片机是微控制器的典型代表,从20世纪70年代末出现到今天,虽然已经过去了30年历史,但是这种8位的电子器件目前在嵌入式设备中仍然有着极其广泛的应用。单片机芯片内部集成ROM/EPROM、RAM、总线、总线逻辑、定时/计数器、看门狗、I/O、串行口、脉冲调制输出、A/D、D/A等各种必要功能和外设。因此,单片机只需要和适当的软件及相关的外设相结合,便可形成一个可实现相应功能的单片机控制系统。在汽车行驶状态记录仪中我们采用AT89C51单片机作为中央处理器。该CPU有4K字节Flash闪存,128字节内部RAM,32个I/O口线,2个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时,AT89C51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU工作,但允许RAM、定时/计数器、串行通信口及中断系统继续工作,掉电方式保存RAM的数据,但振荡器停止工作并禁止其它所有部件工作指导下一个硬件复位14。3.2单片机及外围接口电路设计3.2.1MAX706、AT45DB041和AT89C51接口电路在本记录仪中,采用MAXIM公司的MAX706芯片作为电源监控和复位器件。MAX706能够提供上电、掉电复位功能,独立的“看门狗”保护功能,电压检测和手动复位功能15。采用4M字节的数据闪存AT45DB041作为数据存储器,用来实现车辆行驶数据的长期存储。AT45DB041是ATMEL公司推出的一款基于Flash计数的大容量数据存储器,采用2.7V3.6V供电;通过SPI总线进行数据的访问,其主要接口允许直接5VCMOS或TTL电平信号,并且与之兼容;4M存储空间被划分成2048页,每一页含有264个字节数据,支持页擦写和段擦写,还有两个264字节的SRAM数据缓存16。接口电路图如图3-2所示:图3-2 MAX706、AT45DB041和AT89C51接口电路3.2.2车辆数据采集接口电路数据采集包括信号的调理设计和车辆状态信号的采集。对于+12V车辆系统,其开关量的信号电平是+12V,开关量信号的频率很低,不高于4Hz。开关在闭合和断开的过程中,往往存在一定的尖峰脉冲干扰;同时由于汽车的工作环境比较恶劣,开关信号的频率信号中也会含有较多的高频干扰成分。采用光电耦合隔离措施和增加必要的滤波电路能很好的解决这些问题13。速度信号是一个方波,通过外部中断INT0与单片机相连,进行计数。再根据车辆特征系数、车辆特征转数和时间就可计算车辆行驶里程和车辆行驶速度。接口电路如图3-3所示:图3-3 车辆数据采集接口电路3.2.3串口接口电路RS-232接口是目前最常用的一种串行通讯接口。本记录仪中使用DB9连接器,使用的引线为接受数据(RXD)、发出数据(TXD)和信号地线(SG),对应的引脚为2、3和5。在RS-232中任何一条信号线的电压均为负逻辑关系。即:逻辑“1”的电平在-5V-15V;逻辑“0”的电平在+5V+15V。噪声容限为2V,即要求接收器能识别低至+3V的信号作为逻辑“0”,高到-3V的信号作为逻辑“1”。高于+15V或低于-15V的电压认为无意义,介于+3V和-3V间的电压也无意义。单片机的串口是TTL电平,需要将TTL电平转换成RS232电平,本系统中使用MAX232实现电平的转换。串口接口电路如图3-4所示:图3-4 串口接口电路3.2.4液晶显示接口电路 DM12864是一种采用低功耗CMOS技术实现的点阵图形LCD模块,每页能显示32个汉字(4行8列)。既可实现串行数据传送,也可实现并行数据传送。本次设计中采用该芯片的并行数据传送功能。液晶显示接口电路如图3-5所示:图3-5 液晶显示接口电路3.2.5DS1302日历芯片接口电路DS1302是DALLAS公司推出的涓流充电时钟芯片,内含有一个实时时钟/日历和31字节静态RAM,并能提供秒、分、时、日、月、年的信息。DS1302与单片机之间能简单地采用同步串行的方式进行通信,仅需用到三个口线:RET复位、I/O数据线和SCLK串行时钟。日历芯片接口电路如图3-6所示:图3-6 DS1302日历芯片接口电路3.2.6键盘接口电路图3-7 键盘接口电路ZLG7289能够管理多达64只按键,并能自动消除抖动,本次设计中只使用了其中16只按键。ZLG7289与单片机的接口采用3线制SPI串行总线,由CS、CLK和DIO这3条信号线组成。CS和CLK是输入信号,由单片机提供。DIO信号是双向的,必须接到单片机上具有双向功能的I/O上。本次设计中,CLK接P1.6口,DIO接P1.7口,同时芯片上的中断INT接单片机的INT1。键盘接口电路如图3-7所示。3.2.7声光报警电路在单片机控制系统中,一般的工作状态可以通过指示灯或数码显示来指示,以供操作员参考。但对于某些紧急状态或反常状态,为了使操作人员不致忽视,以便及时采取措施,往往还需要有某种更能引人注意、提起警觉的报警信号。本系统的报警电路采用的是鸣音报警方式。电路图中的3个发光二极管的功能分别是:超速报警灯(J1),车辆正常工作指示灯(J2)和电源指示灯(J3)。车辆车速正常时,J1灯熄灭,J2灯点亮;当J2灯点亮时表示车辆此时超速,同时扬声器发出报警声。当车辆电源正常工作时,J3灯一直亮着。声光报警电路如图3-8所示:图3-8 声光报警电路3.2.8数据存储器扩展电路 FM1808是一种32*8的高集成度的RAM,采用单一+5V供电,双列直插式28引脚封装。本次设计中FM1808作片外数据存储器,起缓冲器作用。车辆行驶数据先存放在FM1808中,最终存放到IC卡芯片中。数据存储器扩展电路如图3-9所示:图3-9 FM1808数据存储器扩展电路4 系统软件设计4.1软件设计语言的选择在单片机应用系统开发过程中,程序设计有两种方法:一种是基于汇编语言的程序设计方法,另一种是基于C语言的程序设计方法。汇编语言的机器代码生成效率高但可读性不强,而C语言在大多数情况下,其机器代码生成效率和汇编语言相当,而可读性和可移植性却远远超过汇编语言。此外,由于C语言有很好的层次结构,使其编写的程序更容易阅读和维护。且C编写的程序比汇编更符合人们的思考习惯,开发者能更专心的考虑程序设计而不是考虑些细节问题,这样就减少了开发和调试的时间17。所以,C语言已成为在单片机应用系统开发中程序设计的主流语言。C语言程序设计具有如下特点18: C语言简洁,使用方便灵活。C语言是现有程序设计语言中规模最小的语言之一,ANSIC标准C语言只有32个关键字,9种流程控制语句。 可移植性好。采用C语言编写的程序,不依赖机器硬件,可以不加修改地移植到别的机器上。 表达能力强。C语言具有丰富的数据结构类型,用户可根据需要,采用多种数据类型来实现各种复杂的数据结构运算;C语言还有多种运算符,用户可灵活使用各种运算符实现复杂运算。 表达方式灵活。利用C语言提供的多种运算符,可以组成各种表达式,还可以采用多种方法来获得表达式的值,从而使用户在程序设计中具有更大的灵活性。 可进行结构化程序设计。C语言以函数作为程序设计的基本单位,C语言程序中的函数相当于一般语言中的子程序。 可以直接操作计算机硬件。C语言具有直接访问机器物理地址的能力,Keil的C51编译器和Franklin的C51编译器都可以直接对单片机的内部特殊功能寄存器和I/O端口进行操作,可以直接访问片内或片尾存储器,还可以进行各种位操作。 生成的目标代码质量高。4.2编程软件的选择目前针对不同厂家的不同单片机,所采用的开发环境也不同,如PIC单片机采用的MPLAB IDE开发环境,HOLTEK单片机采用的HT-IDE3000开发环境等。Keil uVision2集成开发环境是Keil Software,Inc/ Keil Elektronik GmbH开发的基于80C51内核的微处理器软件开发平台,内嵌多种符合当前工业标准的开发工具,可以完成从工程建立和管理、编译、链接、目标代码的生成、软件仿真及硬件仿真等完整的开发流程。尤其是C编译工具在产生代码的准确性和效率方面达到了较高的水平,而且可以附加灵活地控制选项,在开发大型项目时非常理想,是目前应用最广泛的单片机开发环境之一19。4.3软件设计4.3.1软件设计应遵循的原则 单片机应用软件系统设计包括功能模块划分、程序流程确立、模块接口设计以及程序代码编写。我们依据系统的功能要求,将整体软件系统分割成若干个独立的程序模块。这些程序模块可以是几条语句的集合、功能函数或程序文件。随后,根据各个程序模块的实现功能写出流程,一般需要写出具体的实现功能描述。软件的设计原则应遵循以下几个方面: 设计对于分析模型应是可跟踪的:软件的模块可能被映射到多个需求上; 设计结构应该尽可能的模拟实际问题; 设计应该表现出一致性; 不要把设计当成编写代码; 在创建设计时就应该能够评估质量; 评审设计以减少语言性的错误。4.3.2软件结构设计合理的软件结构是设计出一个性能优良的单片机应用系统软件的基础,必须充分重视。根据系统的定义,可把整个工作分解为若干相对独立的操作,再考虑各操作之间的相互联系及时间关系而设计出一个合理的软件结构。对于简单的单片机应用系统,可采用顺序结构设计方法,其系统软件由主程序和若干个中断服务程序构成。明确主程序和中断服务程序完成的操作及指定各中断的优先级。对于复杂的实时控制系统,可采用实时多任务操作系统。此操作系统应具备任务调度、实时控制、实时时钟、输入输出和中断控制、系统调用、多个任务并行运行等功能,以提高系统的实时性和并行性。在程序设计方法上,模块程序设计是单片机应用中最常用的程序设计方法。这种模块化程序便于设计和调试,有容易完成并可提供多个程序共享等优点,但各模块之间的连接有一定的难度。根据需要也可采用自上而下的程序设计方法,此方法是先从主程序开始设计,然后再编制各从属的程序和子程序。这种方法比较符合人们的日常思维,缺点是上一级的程序错误会对整个程序产生影响。软件结构设计和程序设计方法确定后,根据系统功能定义,可先画出程序粗框图,再对粗框图进行扩充和具体化,即对存储器、寄存器、标志位等工作单元作具体的分配和说明,再绘制出详细的程序流程图。程序流程图设计出以后,便可着手编写程序,再经编译、调试,正常运行后,固化到EPROM中去,完成了整个应用系统的设计20。4.4系统软件设计4.4.1主程序功能及其设计的实现 系统的功能决定了系统程序设计,由于系统的功能需求直接明了,所以软件流程也相应清晰,易于设计。设计的主程序流程图如图4-4所示。汽车启动后,系统先进行初始化,包括对程序执行过程中用到的相关变量初始化和各模块初始化。初始化完成后,液晶主屏显示提示信息:车号、工号及起始站,用户可以通过键盘输入相关信息。程序中设置车辆状态变量car_state,通过测试变量car_state的值来判断车辆的运行状态。若car_state等于0,表示车辆启动并处于停止状态;若car_state等于0X55,表示车辆处于行驶状态;若car_state等于0XFF,表示车辆行驶一段时间后停车。当车辆第一次处于行驶状态时,主程序通过调用日历芯片子程序和液晶显示子程序,在液晶主屏上显示实时时间和汽车所行驶的里程信息,每分钟记录1次数据并存入IC卡中。在行驶过程中通过调用超速报警子程序,判断汽车有无超速,超速要给出报警等指示,并将超速的实时时间和超速度存入IC卡中。速度信号可看作是脉冲信号,单片机利用定时器0中断定时,利用外部中断0记录脉冲个数,从而得到速度等信息。程序中不断将速度值和预先设定的门限值作比较,如果超过则启动超速报警。通过测试car_state是否等于OXFF,判断是否停车:若未停车,则继续实时显示时间、里程等信息。在确认停车后,通过调用按键中断子程序,确认是否按下到站键,若到站键未按下,表明车辆只是普通的途中停车,记录停车时间后,停车次数加1,并将这些信息存入IC卡后,继续判断车辆是否行驶,形成循环。反之,表示车辆到站,记录到站时间,停车次数加1后存入IC卡中。到站键按下的同时,判断车辆是否到终点站,若车辆到终点站,则驾驶员按下终点站键(0X0B),液晶通过清屏后,显示“终点站”,信息存储后,主程序结束。液晶显示界面如下图所示:车号XX工号XX起始站图4-1 汽车启动后主屏显示提示信息及相关输入界面20XX年XX月XX日XX时XX分里程XXKm图4-2 汽车行驶、停车及到站实时显示界面终点站图4-3 汽车到达终点站显示界面汽车启动初 始 化主屏显示提示信息输入相关信息并存入IC卡车辆行驶? N 实时显示日历 里程等信息 Y 每分钟记录1次数据并存入IC卡Y启动声光报警超速? N 停车? N Y N记录停车时间停车次数加1到站键按下? Y记录到站时间,停车次数加1,并存入IC卡终点站? NY 按键并存储信息主屏显示终点站 图4-4 主程序流程图4.4.2 DM12864液晶显示软件设计DM12864有两种数据传送方式:串行数据传送和并行数据传送。本次设计采用并行数据传送方式。8位并行数据传送时序下图如所示:图4-5 单片机写数据到DM12864时序图图4-6 单片机从DM12864读出数据时序图RS为并行的指令/数据选择信号,RS=0表示并行指令选择信号,RS=1表示并行数据选择信号;E为DM12864的使能信号,由时序图可知,使能信号为高电平有效;R/W为并行的读写选择信号,逻辑“1”表示读,逻辑“0”表示写。DM12864初始化指令包括功能设定指令、显示状态开/关指令、清除显示指令和进入点设定指令。1功能设定指令:D7 D6 D5 D4 D3 D2 D1 D00011XREXX其中RE=1为扩充指令集动作,RE=0为基本指令集动作,初始化中RE=0。2显示状态开/关指令:D7 D6 D5 D4 D3 D2 D1 D000001DCB其中D=1:整体显示ON,C=1:游标ON,B=1:游标位置ON。3清除显示指令:D7 D6 D5 D4 D3 D2 D1 D0000000014进入点设定指令:D7 D6 D5 D4 D3 D2 D1 D0000001I/DS其中I/D=1表示游标右移,S=1表示画面不移动。液晶显示时,需设定DDRAM位址。指令代码如下:D7 D6 D5 D4 D3 D2 D1 D01AC6AC5AC4AC3AC2AC1AC0DM12864每页能显示32(4行8列)个汉字,显示位址的范围从80H9FH,具体显示位置如表所示;表4-1 汉字显示位置关系80H81H82H83H84H85H86H87H90H91H92H93H94H95H96H97H88H89H8AH8BH8CH8DH8EH8FH98H99H9AH9BH9CH9DH9EH9FH液晶显示执行指令为void display2(uchar dat,uchar add),其中,形参dat表示要显示的8位数据,形参add表示地址,通过与80H相“或”,以确保DDRAM位址的最高位为1,得到的结果赋值给c,c即是数据在液晶上显示的具体位置。DDRAM提供32个汉字的空间,当写入文本显示RAM时,可以显示中文字型:将两字节编码写入DDRAMK,范围为A1A0HF7FFH(国标码)。具体的中文字型编码可参见ST7920 GB中文字型码表。4.4.3按键扫描软件设计按键扫描采用ZLG7289芯片。该芯片与单片机之间采用SPI串行总线接口,操作方便,占用I/O资源少。同时还能够扫描管理多达64只按键,自动消除抖动21。本次设计只需用到其中的16只按键。ZLG7289与微控制器的接口采用3线制SPI串行总线,由CS、CLK和DIO这3根信号线组成。CS和CLK是输入信号,由微控制器提供。DIO信号是双向的,必须接到微控制器上具有双向功能的I/O上。SPI信号线的具体意义参见表4-2,图4-7是读按键值的时序图,只有当INT引脚出现下跳沿时才允许去读取按键值,否则将得不到有意义的数据。表4-2 ZLG7289的SPI串行接口信号信号名称引脚序号描述CS6SPI总线片选输入信号,低电平有效CLK7SPI总线时钟输入信号,上升沿有效DIO8SPI总线数据信号,双向图4-7读键盘指令时序图(命令字在前,键值在后)ZLG7289在扫描键盘时,已经采取了消抖动措施,因此在程序中不必另外编写消抖动的代码。某个按键按下时,ZLG7289的INT引脚会出现低电平,向主控制器发出中断请求。主控制器既可以采用中断方式处理,也可以采用查询INT引脚电平状态的方法处理。但是要避免通过SPI总线用软件命令的方式去查询是否有键按下,这将导致SPI总线频繁处于活动状态,不利于抗干扰。应当在INT引脚出现低电平时及时地读取键值。读取键值后,INT引脚并不会自动恢复为高电平,一定要等到按键抬起为止。如果没有及时读取按键值,则按键抬起后INT引脚也将恢复到高电平,而在INT引脚处于高电平期间,试图去读取键值将可能得不到有意义的数据。按键扫描软件流程图如图4-8所示:开 始ZLG7289初始化读取按键向ZLG7289发出数据 Y接收ZLG7289返回键值KEY=FFH? N单片机读到该键按下结 束图4-8 按键扫描软件设计流程图利用中断方式处理按键时,通常将微控制器外部中断的触发方式设置成负边沿触发,而不要设置成低电平触发。按下某个键时,ZLG7289B会在INT引脚产生低电平信号,这低电平信号直到松开按键时才会撤除。如果程序中采用低电平触发中断,则进入中断完成读取键值操作后,还必须要等待INT信号恢复为高电平,即等待操作者放键,在等待期间,CPU几乎不能再干其它事情,造成浪费。如果不等待,读完键值后就直接从中断返回主程序,那么由于INT信号还是低电平,这将再次触发中断,从而导致程序错误。如果设置成负边沿触发方式,则进入中断读完键值后不必等待即可退出,返回主程序后也不会再次触发中断。读键盘数据指令当有键按下时,ZLG7289B的INT引脚会变成低电平。这时利用该指令可以读出当前的键值。第1字节为命令字,第2字节是ZLG7289B向单片机返回的键值。正常情况下,键值的范围是063(0X00OX3F),无按键的状态用255(0XFF)表示。本次论文设计了16个按键,故在软件设计时,可将第2字节的高4位均置0,低4位表示键值的范围015(0X000X0F)。具体键值0X000X09为数字键,分别表示从09的10个数字,键值0X0A为到站键,键值0X0B为终点站到站键。4.4.4 IC卡存储软件设计IC卡采用AT45DB041,该芯片包含主内存和