摘 要
随着国内城市现代化的发展,出租车行业发展也突飞猛进。在现代生活中,人们要求出行方便快捷,这就导致出租车行业有大量的市场需求。不管对于出租车司机还是乘客来说,出租车计价器性能是否良好都很重要。
本文设计的计价器以AT89S52为核心部件,使用了一个单片机最小系统,与液晶显示、DS1302时钟电路、AT24C02掉电保护电路相结合,实现了调价、计费和行车路程显示等功能。其中,在路程测量这一板块,使用的是A44E霍尔开关传感器芯片,芯片会把车行进的路程变成一个标准的脉冲输入到单片机里,然后单片机再根据脉冲的数量来计算出行车的总里程以及产生的费用。同时为了方便司机师傅和乘坐人能够清楚简便的知道乘车费用,同时采用了液晶显示和语音播报两种报价方式
关键词:AT89S52;出租车计价器;ISD2560语音芯片
ABSTRACT
With the development of urban modernization in China, the taxi industry has made rapid progress. In modern life, people require convenient and fast travel, which leads to a large market demand for taxi industry. Whether the performance of the taxi meter is good or not is very important for taxi drivers and passengers.
In this paper, the design of the meter to AT89S52 as the core components, the use of a single chip microcomputer minimum system, and liquid crystal digital tube display, DS1302 clock circuit, AT24C02 power failure protection circuit combined to achieve the adjustment, billing and driving distance display and other functions. In the course measurement, A44E Hall switch sensor chip is used. The chip turns the distance traveled into a standard pulse and feeds it into a microcontroller. Then the single chip microcomputer calculates the total mileage and the cost of driving according to the number of pulses. At the same time, in order to facilitate the driver and the passenger can clearly and simply know the cost of the ride, at the same time, the LCD digital tube display and voice broadcast two kinds of quotation.
Keywords:AT89S52 Taxi meter ISD2560 Voice chip
目 录
1.1 课题研究背景和意义
伴随着生活质量的提高,人们已不再满足于衣食住的享受,出行的安闲已被越来越多人的关注。出租车已作为人们在城市里出行的基本需求,出租车的兴起令其充斥在我们国家的城市公共交通里,成为我们必不可少的交通工具。出租车行业以便宜便捷高质的服务给人们带来了出行的享受。
出租车计价器不仅决定着乘坐人与司机师傅之间的交易界限,而且在现代生活中人们的出行要求导致出租车有大量的的需求市场。不管对于出租车司机还是乘坐人来说计价器是否有良好性能很重要,计价器的使用会直接影响两者之间的利益。因此愈来愈多人对出租车行业是否在往健康的方面发展更加重视。所以,对计价器的研究也具有很大的应用价值。
我国早从20世纪70年代就出现了出租车,但由于当时的收费系统主要由外国公司引入的,不仅时间不够精确,而且价钱也十分高昂。但随着中国改革开放的深化,出租车业的发展趋势尤为明显,国内外机械制造公司也相继引进了国产计价器。目前出租车计费的功能,已由刚开始时候显示的距离(要求司机设定自己的价格,然后四舍五入)能够由自己负责,现在还能够按类型发票和语言提示,并调整价格独立按照时间。随着都市旅游的发展,出租车行业也开始作为城市交通的窗口,代表了一座都市的精神文明。而出租车计程器作为了一个城市专用的智能收费工具。而随着现代电子科技的发展,出租车计价器科技水平也在不断的提高和发展。
我国最早制造计程器的企业是成都起重机厂,中国早期的计程器完全使用了机械齿轮构造,能够实现单纯的计量器作用,也应该说早期的计量器只是里程表。伴随科技的进展,第二代电表也诞生了。它通过手持式电脑和传统机械技术相结合的方法,实现了零点五机械零点五电气。此时,人们就可以在计量的时候进行估值操作。随着大规模集成电路的开发出现了第三代电表,但都是电子式电表。其作用还在不断完善。公共汽车计价器是设置在公共汽车上的一个专用计量设备。它能够连续累加并表示乘客在出行旅程中的所有时候需缴纳的总金额。它的主要价值是计数和计时时间的函数。而出租车计价器在初期应用时的主要就是根据里程数的计算,比较精确,而且安全性很好。由于现代电子信息技术的发达以及仪器的不断创新与完善,逐渐形成了不少的附加功用。比如:LED显示屏功用,通过采用数码管使仪器达到了多屏显示功能,可同步显示运营数据,使旅客一目了然;永久性时钟功能,在非工作状况下,通过日历式时钟芯片使仪器也能呈现永久性时刻存储功能,可保存多种服务数据信息,便于检索。新数据存储的使用意味着在停电的情况下,电表的运行数据可以存储长达10年。
出租车计价器设计使用以AT89S52单片机为主要控制接收和处理主要信息,使用霍尔传感器A44E芯片进行距离的测量,以此来实现计价设计,同时为了保存单价信息,我设计以AT24C02来实现在系统掉电的时候对电路进行保护,显示部分的设计不仅以DS1302来提供实时时钟及时间的显示,输出也采用LCD1602来显示。这样就利用单片机丰富的 I/O端口,及其控制的灵活性,实现基本的计价功能。通过霍尔传感器检测信号再将信号送入单片机进行处理,计算出里程数,再根据相应的单价数得出总金额并把结果通过LCD显示出来同时进行语音播报,如果由于某种原因掉电获供电不足照成单片机无法正常工作,也就是计费系统的数据丢失,基于这种情况,本设计设计了掉电存储电路,一日这种情况发生时存储电路会保存所有数据,上电后可立即恢复正常使用,但出租车空车时也就是说计费系统不处于工作状态,可利用实时时钟芯片进行时间的显示同时时钟电路也可在计费系统工作是起作用,即显示本次运行时间。
出租车正常营运时计价器显示实时时间,以60进制计数功能显示小时、分钟、秒这三种时间以及停车状态时的对时间的计算,其格式是:00:00:00min;统计和显示行车总的里程数时,是以轮子每转一圈为1米来计算的,其格式是:000.0km;实际乘车花费金额以000.0元这个格式显示。当有乘客上车时,按下按键1启动计价器计价,出租车的起步价为5元,当行驶里程在2.5km以内,费用均为5元;当里程行驶超过25km后,白天模式时每公里计费为0.9元/km;夜间模式每公里计费为1.0元/km。停车每达3分钟,增加1.0元。出租车司机能根据时间的不同进行单价调整。(自定义晚上22点到第二天6点为夜间模式,计费标准起步价为7元;则白天6点到晚上22点为白天模式起步价为5元,这两种起步价都是可调的)。可由按键手动控制单价、时间调整、背光灯亮度、两种模式下的起步价等设置。同时具有语音播报功能用来提示乘客本次乘坐时间以及消费金额等。具有防止作弊的功能,以保护乘客的利益。
为使基于单片机的出租车车计费系统具有较好的实用性,并同时具备更多的性能价格比较,公司对该控制系统的硬件电路做了精心设计。
方案一:使用数字电路进行控制。把感应器产生的脉冲信号通过放大后整形成为移位寄存器的输出功率,然后进行价格计算。不过由于这种集成电路过于简化,特性并不稳定,而且价格无法调节,也无法通过天气变化来调节收费范围,此集成电路并不适用。
方案二:利用MCU这项技术。以单片机为主控器,让LCD1602显示电路,再凭借外围的单晶振作的时钟脉冲,就可以通过键盘对时间进行一个极易的调整,因此使用单片机丰富的I / O端口,及其控制的灵活性,可以完成基本里程定价功能和价格调整功能、以及时间指示功能。
方案三:使用EDA技术。基于分层设计理论,将系统设计问题自上而下包括分频模组、监控模组、测试模组、编码模组,以及动态扫描的显示模组。
经过对不同方案的对比后,本设计人员选择了方案二,因为单片机方案拥有很大的活动余地,不但能够完成所需要的功能,同时也可在较大范围上拓展空间功能,而且控制简单,成本低,设计电路简单。
按照要完成的任务,操作系统的硬件设置一般包括如下几个方面。其中AT89S52是整个电路的核心,也可以管理其他部分进行各项复杂的运算。而外设集成电路则包含了信号检测电路、按键电路、掉电存储电路、实时时钟电路、显示电路、语音提示电路等。整体框图如图2.1所示。
图2.1 整体框图
由于A44E是霍尔传感器,A44E拥有可以把电压放大信号进行变换、整形再输出的作用,所以在信号检测(传感器输入系统)部分采用A44E霍尔传感器用来计算轮子转动的圈数,这样便可以把输出的数字电压信号直接输入到单片机里进行处理。
语音提示芯片采用的是ISD2560语音芯片,用来保存语言菜单的显示讯息,以及查询系统语音信息。
实时时钟芯片采用DS1302用于显示出租车空车时的实时时钟,因为它的时钟是白天/晚上自动转换价格的基准。
存储芯片采用AT24C02,当出现停电或因某些原因供应不足或用户通过计价器更改数据时,应将更改的数据保存,以便在不停电的情况下重新设置基本信息。
AT89S52不仅功耗低、还有一个8K可编程Flash存储器和CMOS (有效的8位微控制器)。片上Flash不仅能够进行正常程序设计,还能在操作系统上进行编程。 在空闲模式之下,即便CPU暂停工作,也容许计数器/定时器、RAM、介质和串口这些来继续工作。并且有掉电模式的保护,也会把RAM里的内容保留下来,同时也会冻结振荡器,至此,单片机就会暂停全部管理工作,直至下一次管理工作暂停或由硬件恢复状态为止。AT89S52芯片如图3.1所示。
图3.1 AT89S52
晶振电路设计方案:要想得到机器的周期信号,需要利用AT89S52分别连接一个石英晶体振荡器的XTAL1输入引脚和XTAL2输出引脚和与两个电容(大小为33pF)相连接,并且有高增益、反相放大器这些特性去产生一个具有稳定性的自激振荡器。ALE信号是脉冲经过二分频作为系统的时钟信号,再通过三分频率产生的。
复位电路设计方案:要想整个数字单片机控制系统恢复为正常状态,需要进行一个复位操作,这一动作是通过AT89S52复位引脚操作的。所以这一操作很简易。我的论文里采用手动复位。手动复位是单片机系统中至关重要的一部分。在调试或执行某个系统程序时,如果它瘫痪、死循环或跑掉,手动复位就是打破这种尴尬局面的最常见方法。此时,通过手动复位就实现了重新启动操作。单片机最小系统由单片机AT89S52、晶振电路、复位电路三部分构成,如图3.2所示。
图3.2 单片机最小系统
出租车一般较长时间行驶在路上,工作环境差并且复杂,从实际角度出发想到出租车计价器的电源部分会面临的问题,故电源部分应该具有抗震效果,抗潮湿、低温、电磁干扰、高温等这些能力,比如出租车运行时、电瓶充电、发动机打火时都有可能引起出租车计价器电源的不稳定,这将直接损害司机及乘客的利益,可考虑适当的增加滤波电路和稳压电源来解决此问题,因此系统的主体电路中给出了滤波电路,这样一来将会提高计价器的抗电磁干扰能力。由于出租车上带有9V-12V的电平,而本系统所需的供电电压为5V,所以需要将12V转换成5V的电压。本次设计考虑控制、电路简单,性能可靠等方面的原因,故使用三端集成稳压芯片7805,构成简易的稳压电路。
将12V电源接入7805的输入端经过稳压后经电容滤波最后输出为5V为整个系统提供电源。同时负载还带有LED,用做电源灯。以提示电源是否正常工作,便于查找故障原因。电源电路如图3.3所示。
图3.3 电源电路
3.3.1 霍尔效应
这个效应是电磁效应里包含的一种,之后又发现半导体和到点流体也是导电的材料,所以研究表明导电流体和半导体也具有此样的效应,并且他们导电的反应比金属的更大。各种霍尔元件就是由这种现象构成得,并且被广泛应用在检测和信息处理技术这些方面。利用霍尔效应是研究半导体材料性能最基本办法。想要确定半导体材料的载流子浓度、电导率类型以及载流子迁移率可以采用霍尔效应实验测量的霍尔系数来确定。霍尔效应原图如图3.4所示。
图3.4 霍尔效应原图
截止到现在,霍尔器件在汽车上被大范围使用的有:速度和里程表、ABS系统中的速度传感器、各式各样的开关,液体物理量检测器等等。
3.3.2 A44E芯片介绍
A44E不仅可以检测磁场和磁场的变化,其拥有特别多优点:坚固的结构、小巧的体积、长的寿命、轻的重量、低的功耗、简单的安装方法、能达到1MHz的频率、有好的抗振动性。其开关装置是没有磨损、接触、反弹的,并且产生的波形特别清晰、也不会不抖动、位置也是高精度重复,温度工作范围为-55℃-150℃,区域很宽。A44E引脚说明如表3-1所示。
表3-1 A44E引脚说明
Vcc | 外接电源输入端 |
GND | 外接电源地 |
OUT | 数字信号输出端 |
霍尔A44E传感器的工作原理:当霍尔电压发生器B被加上稳压器的输入电压Vcc或在两端加上时,由其原理可知,如果霍尔处于A磁场中的时候,通过的电流会与磁场方向垂直,而且霍尔电位差也因为两者在垂直方向上而被产生输出出来,从而信号C也被差分放大器放大,之后输送到施密特触发器D,以方波送至OC门去输出。当触发器输出高电压,三极管打开,OC门输出低电压,说明施密特加入的磁场已到达工作点。通常这种情况为开,相反为关。A44E工作特性如图3.5所示。
图3.5 A44E工作特性图
3.3.3 传感器测距电路设计
因为出租车要有一个能够精准得到车轮旋转也就是路程信号的配装,以用来得到准确的脉冲信号出送到单片机里,所以此次设计用了A44E霍尔传感器作为信号检测设备,单片机中断完成距离测量,由内部过程来计算金额以及里程(装在轮子上的霍尔传感器去检测脉冲信号来计算)等这些信息量。信号检测电路如图3.6所示。
图3.6 信号检测电路
A44E霍尔传感器负责输出脉冲和检测脉冲。将电压VCC加于霍尔电位发生器两端,由其原理可知,如果霍尔传感器处在磁场里,低电平会被输出,轮子转动一次,证明小磁铁产生一个磁场,传感器便会输出一个低电平用来完成数据的一次采集。我的设计是内部用了外部中断1,轮子每转一圈、霍尔开关就会检测并且输出一次信号,以引起单片机的中断,从而进行脉冲的计数。这一操作是为了计算里程和金额。图3.7是传感器测距的示意图。
|
3.3.4 防作弊电路设计
在传感器输入端增添一个低电平信号是出租车作弊的原理,为了达到效果,会让计数系统迅速添加操作。若没有这一操作,就会轻易的人为给单片机一个低电平,这样计数就会增加,以起到作弊效果。本设计在A44E的1引脚(电源引脚)通过TLP521光耦连接到单片机的P1.7I/O口上,当添加光电耦合器后,由光电耦合器控制传感器的电源,每检测到一个脉冲,在中断服务子程序里立即关闭传感器电源,正常情况因为传感器的输出关闭,输出应该变为高电平,这时马上再检测输入端的信号,如果此时输入变为高电平,说明当前检测到的脉冲确实是车轮滚动产生的,是真实的计数输入,累计加一。但如果检测到输入继续为低电平,只能说明有额外的低电平脉冲加载在传感器的输出端,是作弊,系统不进行累加,防止作弊。
3.4.1 AT24C02芯片介绍
AT24C02包含256个8位字节同时还有一个页写缓冲区为16byte。其通过I2C总线接口运行,它可以指定发送器可以是任何一个向总线发送数据的设备,接收器同理,还有特殊的写保护功能。主设备产生的所有暂停开始指令以及传输串行时钟控制数据,端子A0、A1、A2通过设备地址输入只可以连8个AT24C02设备。AT24C02引脚说明如表3-2所示,AT24C02芯片如图3.8所示。
图3.8 AT24C02 芯片
表3-2 AT24C02引脚说明
A0 | 器件选择地址 |
A1 | 器件选择地址 |
A2 | 器件选择地址 |
SCL | 串行时钟 |
SDA | 串行地址/数据 |
WP | 写保护 |
VCC | +1.8—6V电源 |
VSS | 接地 |
I2C串行总线有SDA(双向数据线负责接到I2C总线上全部设备串行数据)、SCL(时钟线负责每个设备SCL的连接)这两根信号线。时钟信号由主设备在任何时间产生。
I2C总线因为它的简单性和广泛的应用,因此它的功能是越来越不能满足人们的需求,它的速度也从最初的100 kbit / S,增加快速模式。速度可达400Kbit/S,再后来也增加了高速模式,其速度更达3.4Mbit/S。
I2C总线有起始,应答,结束这三种主要控制信号存在于在传送数据的过程,如表3-3所示。
表3-3 三种控制信号介绍
起始信号 | 当SCL为高电平时,SDA由高电平变为低电平时,开始传输数据。 |
结束信号 | 当SCL为高电平时,SDA由低电平变为高电平时,结束数据传输。 |
应答信号 | 接收数据的器件在接收到8bit数据后,接收数据的设备向发送数据的设备发送一个低电平信号,表示数据已经接收。信号可以由主设备或从设备发送,也可以由接收数据的设备发送。 |
掉电保护模块的作用:为了不需要每次断开电源时重复设置基本信息,所以当每次出租车的计价器变更数据时,要把变更的数据保存下来。可以进行存储的芯片有很多种,在这个设计中采用了AT24C02这款芯片。掉电储存电路如图3.9。
图3.9 掉电存储电路
为了减少芯片的静态功耗,所以把R15和R14作为掉电存储电路的上拉电阻。因为此芯片的地址线、数据是多路复用的,并且传输方式是数据的串行,因此只有SCL(移位脉冲)和SDA(数据/地址)这两行以及单片机数据传输。系统进行自动的调用存储程序的前提是每次设定好一个单价之后,会吧这个设定的单价存留在芯片里。因此等到下次系统上电,内存程序便会被自动读取,为了能供主程序使用,所以会把内存里面单价这些信息都读取到缓存单元里。通过设备对单片机系统里面的部分数据进行保护。在每回设置好单价以后,系统自动调用存储程序,将单价信息保存在芯片中。当系统再次上电时,自动调用读内存程序,将内存中的单价等信息读入缓存单元,供主程序使用。
为了方便电路里计时、控制(采用单片机)两个板块区别开来,所以采用了DS1302芯片(实时时钟的芯片),此芯片可以掉电保护且是独立计时的,配备的还是锂电池,这样就能保证即使掉电也可以继续工作,主电路恢复电源后就不用调整时间了,为了简便和利于排故,同时也为日常操作节省了很多麻烦。
DS1302(2.5V ~ 5.5V)除了具有性能高、功耗低、可以临时存储数据(因为其内部有一个31×8的RAM寄存器)等这些优点,还可以与CPU进行三线接口的方式同步通信,这种方式能够一次以突发方式传输RAM数据又或是多个字节的时钟信号。同时,它不仅有可以对闰年进行补偿的功能,还能够对秒、时、分、日、月、年精准计时。DS1302芯片如图3.10所示,时钟芯片电路如图3.11所示,引脚介绍如表3-4所示。
表3-4 DS1302引脚介绍
图3.10 DS1302芯图 图3.11 实时时钟电路
3.6 按键电路的设计
表3-5 按键电路方案
第一方案 | 使用触摸屏作为控制输入 |
第二方案 | 使用矩阵或独立按键作为控制输入 |
按键电路方案对比见表3-5,因为考虑到专用性以及成本问题,所以选择第二方案,因为第二方案的扫描时间相对较长,所以为了方便采用了两个独立的按键当作系统的开始,结束按键。因为4个按键分别使用了一条I/O端口线,并且连接在地,所以端口上有一个上拉电阻,当无按键按下时引脚的电平是高电平,反之则为低电平。按键电路各个按键作用如表3-6所示,按键电路如图3.12所示。
图3.12 按键电路
表3-6 按键开关介绍
S1 | 接P0.0口,系统启动/停止。 |
S2 | 接P0.1口,单价调整键(增大)。 |
S3 | 接P0.2口,单价调整键(减小)。 |
S4 | 接P0.3口,系统复位键。 |
3.7 语音提示电路设计
语音提示部分使用ISD2560语音芯片,以实现通过地址在相应的地址存储在一个数量的声音,想要声音播放出来,第一是根据每个需要被单片机调用的声音,去控制模式需要的单片机通过端口线选择地址,再引发芯片选择。语音报价播报的主要是金额大小,每播报一个金额就会存储一个声音,这就会导致存储所需的语音比较多,ISD2560是按地址方式选段,因此延迟在段与段之间会很小。
3.7.1 ISD2560语音芯片介绍
ISD2560语音芯片引脚图见图3.13,引脚说明见表3-7,操作模式见表3-8。
图3.13 ISD2560芯片
表3-7 ISD2560引脚说明
地线(VSSA,VSSD) | 芯片内部的模拟和数字也可使用不同的地线。 |
节电控制(PD) | 节电控制(PD)本端拉高使芯片停止工作, 进入不耗电的节电状态,芯片发生溢出,即/OVF端输出低电平后,要将本端短暂变高复位芯片,才能使之再次工作。 |
片选(/CE) | 本端变低后(而且PD为低),允许进行录放操作。芯片在本端的下降沿锁存地直线和P/-R端的状态。 |
录放模式(P/-R) | 本端状态在/CE的下降沿锁存。高电平选择放音,低电平选择录音。录音时,由地址端提供起始地址,录音持续到/CE或PD变高,或内存溢出;如果是前一种情况,芯片自动在录音结束处写入EOM标志。放音时由地址端提供起始地址,放音持续到EOM标志。如果/CE一直为低,或芯片工作在某些操作模式,放音会忽略EOM,继续进行下去。 |
信息结尾标志(/EOM) | EOM标志在录音时由芯片自动插入到该信息的结尾。放音遇到EOM时,本端输出低电平脉冲。芯片内部会检测电源电压以维护信息的完整性,当电压低于3.5V时,本端变低,芯片只能放音。 |
溢出标志(/OVF) | 芯片处于存储空间末尾时本端输出低电平脉冲表示溢出,之后本端状态跟随/CE端的状态,直到PD端变高。本端可用于级联。 |
话筒输入(MIC) | 话筒输入(MIC)本端连至片内前置放大器。片内自动增溢控制电路(AGC)将置增益控制在-15至24dB。外接话筒应通过串联电容耦合到本端。耦合电容值和本端的10KΩ输入阻抗决定了芯片频带的低频截止点。 |
话筒参考(MIC REF) | 本端是前置放大器的反向输入。当以差分形式连接话筒时,可减小噪声,提高共模抑制比。 |
自动增益控制(AGC) | AGC动态调整前置增益以补偿话筒输入电平的宽幅变化,使得录制变化很大的音量(从耳语到喧嚣声)时失真都能保持最小。Ω和4.7uF的标称值在绝大多数场合下可获得满意的效果。 |
续表3-7
模拟输入(ANA IN ) | 本端为芯片录音信号输出.对话筒输入来说ANA OUT端应通过外接电容连至本端.该电容和本端的3KΩ输入阻抗给出了芯片频带的附加低端截止频率.其它音源可通过交流耦合直接连至本端(绕过了TER的前置)。 |
地址/模式输入 (AX/MX) | 地址端有个作用,取决于最高两位(MSB,即2532/2548的A7和A8,或2560/2590/25120的A8和A9)的状态。当最高两位中有一个为0时,所有输入均解释为地址位,作为当前录入操作的起始地址。地址端只作输入,不输出操作过程中的内部地址信息。地址在/CE的下降沿锁存。 |
表3-8 操作模式对应表
模式 | 功能 | 典型应用 | 可组合使用的模式 |
M1 | 信息检索 | 快进入信息 | M4、M5、M6 |
M2 | 删除WOM | 最后一条信息结束处放EOM 5 | M3、M4、M5、M6 |
M3 | 循环 | 从0地址连续放音 | M1、M5、M6 |
M4 | 连续寻址 | 录放连续的多段信息 | M0、M1、M5 |
M5 | CE电平有效 | 允许暂停 | M0、M1、M3、M4 |
M6 | 按键模式 | 简化外围电路 | M0、M1、M3 |
3.7.2 语音电路的设计
为实现此项功能,把一块语音芯片录多段语音,使用单片机通过组合方式实现。电路如图3.14所示。
图3.14 语音电路
ISD2560单段是让所有地址线接地来记录电路的,因为P/R记录集所以其为低端,因此对电路记录会很简单。同时CE端始终为低,即开始记录,设定固定时间或芯片完全停止时即可自动停止。播放时,将P/R端设置为高,将CE端设置为选择键,即开始播放,将PD端设置为低或自动停止播放。
LCD液晶显示屏不仅能够显示多样化的数字、图像、汉字,也能够特定显示内容,同时为了操作的人员进行阅读信息时方便,还进行了功能的拓展,比如更人性化的系统不仅让系统资源更节约I/O端口的使用也减少了。由于在这里需要在第一界面显示日期,时间,星期等信息,并且考虑到性能和价位的原因最终选择了LCD1602这款液晶显示芯片。
3.8.1 液晶显示原理及特点
液晶显示器(LCD)是一种极低功耗的显示设备,体积也小还能清晰的显示字符。它广泛应用于袖珍仪表或低功率应用。LCD有两种驱动模式:静态驱动模式和分时驱动模式。各种的显示模块可以用于不同的地方,如:用来显示汉字的笔端型。
1602液晶所能显示的大、小写字母、数字、常用符号等都字符生成存储器(CGROM)生成,它里面有160个各不相同的点阵字符图形。并且160个里的每一个字符都有一个固定的代码。
LCD1602的基本参数及各引脚功能见表3-9。
表3-9 LCD1602主参数
LDE1602显示容量 | 16*2个字符 | |
芯片工作电压 | 4.5-5.5V | |
芯片工作电流C | 2.0MA(5V) | |
最佳工作电压 | 5V | |
字符尺寸 | 2.95*4.35(WXH)mm | |
VSS | 电源地 | |
VDD | 电源 | |
VL | 液晶显示偏压信号 | |
RS | 数据命令选择端 | |
R/W | 读写数据端 | |
E | 使能信号 |
3.8.2 LCD1602显示电路
图3.15 LCD1602显示电路
接口VCC引入5V的电源电压。接通电源LED亮。单片机上的P2.0和 I/O端口分别与8位数据端相连,P0.4-P0.6这3个端口分别控制3个控制端口,同时P2.0口还与8位双向数据线7-14相连接,以此实现了单片机和LCD两者的通信。如果想LCD调节对比度把LCD1602的第三引脚与可调电阻连接即可。LCD1602显示电路如图3.15所示。
图4.1 主程序流程图
本系统以AT89S52单片机为控制芯片,通过它的控制可以把接收到的外部的信息进行一个很好的决策和分析。设计软件的部分主要是里程计数中断、实时时钟、系统初始化、键盘服务、掉电存储、语音提示等这些部分,对于整体设计每一个模块都至关重要。主程序流程图如图4.1所示。
4.2 里程计数中断程序设计
车轮每有一圈的转动表示一次中断计数,因此每中断单片机一次就代表霍尔传感器输出了一个低的电平信号,计数值便会增加1,根据计数值和车轮周长程序以此计算里程,再根据单价和里程来计算总的总价格。将最后的结果传送到LCD里显示。程序流程图如图4.2所示。
4.3 实时时钟显示程序设计
内部不仅存储了160个各不相同的点阵字符,还能够写两行字符并且每行能写入40个字符,这就是字符型液晶1602。首先要写命令,其次设置字符的显示,再写数据,这三步是写显示程序的步骤。要先判断1602液晶显示是否在忙再去写命令或数据。DS1302驱动首先将CE设置为高,在上升沿中以位的方式传输地址字,然后相应的对地址或数据进行读写,再将CE设置为低,将DS1302的实时数据读取到LCD1602进行显示。
4.4 掉电存储程序设计
单片机是控制I2C总线的,I2C总线上可以挂很多设备,并且每个设备都具有一个独立的地址,设备的地址被激活的前提是单片机先发送地址,反馈响应信号再发送给单片机,然后对设备进行的操作,用于存储数据的AT24C02,具体操作包括发送地址、发送指令、接收数据和发送数据等功能。
5.1 硬件调试
将此次所涉及到的设备都先做一遍独立上电的测试,检查其是否都可以正常工作,然后将所用到元器件进行焊接的前提是按照利用PROTEL 99SE绘制的电路图,在完成焊接之后,检测是否有虚焊或者焊接错误的地方用万用表,最后将所有的外围设备有序连接,并且与继电器相连接,这样既便于操作,整体又美观。
5.2 测试过程
本设计具有时间的显示功能,能显示年、月、日具有时、分、秒为60进制计数功能等,当无乘客上车时计价器的会显示实时的时间,本仿真系统带有4个按键,当按下按键一时,说明本车无载客,系统会自动返回到时间的显示。本仿真系统以按键来模拟传感器的输出信号,按键二每按下一次表明车轮旋转一周,当车轮旋转10周即按键按下10次时,也就是出租车走行1公里时,LCD1602显示金额自动增加0.9元,如果是夜间模式金额自动增加1.0元,如果期间出现等待,则没等待3分钟,LCD显示的金额会自动增加1.0元。
本设计基本实现了计价器的基本功能,但仍有需要改进的地方。例如显示停车等待时间,当停车等待的时候可以选择超过30秒没有信号输入的时候进入停车等待,同时在LCD1620中出现等待计时,这样可以比较直观的显示计价的结果。同时可以使用中文液晶显示器,显示容量大,人机界面友好。如OCM4X8C,该液晶具有并行、串行两种接线方式,64×128点阵,液晶自带中文字库和半宽字型库,可以显示16×16点阵的字符和汉字,同时提供图形显示功能,还可以自定义汉字显示,但是考虑到系统设计的成本较高,故未采用。
本系统硬件设计部分以AT89S52单片机作为核心部件,实现了对出租车计费系统的控制。第一要通过检测电路检测车轮信号,第二将转化为脉冲信号传输给单片机进行检测,检测到信号之后单片机再进行计算处理,第三也就是最后单片机通过向I/O口输送高低电平来控制语音提示以及液晶显示。
软、硬件电路设计都全部完成。其中,硬件电路包括:霍尔传感器检测、单片机最小系统、ISD2560语音提示、DS1302实时时钟、AT24C02下电存储电路和电源电路。距离检测传感器产生的信号由单片机进行采集和判断。分为4种情况,第一种情况是当出租车启动的时候,单片机对霍尔传感器的脉冲信号进行检测同时计算里程;第二种情况是没有乘客时候,实时时间芯片DS1302程序和LCD1602显示程序会被单片机调用,进行时钟显示;第三种情况是出租车上有乘客时,通过DS1302来区分白天和晚上的时间信息,在调用AT24C02的程序获取两次的单价和起始价,并开始定价和显示时间、数量、里程等信息;第四种情况是当乘客下车时,单片机会把运行的数据信息存储到AT24C02里,在出租车重新启动后,将会清空单次金额和里程信息,对其进行重新设置,完成一次性定价。软件部分采用C语言编写,包括里程中断设计、实时时钟显示程序、关机存储程序、语音广播程序设计等。通过软硬件的配合,完成了总体的出租车计价器的设计。
我设计的出租车计费系统的总体方案是可行的,能实现预期的结果,所设计的系统可以实现出租车的自动计价、实时显示、语音提示等控制功能。
附录A 主电路原理图
unsigned char outputbyte(void) //读DS1302一个字节子程序
{
unsigned char i;
unsigned ucdat=0;
for(i=8;i>0;i--)
{
DS1302_IO=1;
ucdat>>=1;
if(DS1302_IO)
ucdat|=0x80;
DS1302_CLK=1;
_nop_();
DS1302_CLK=0;
}
return(ucdat);
}
void write_ds1302(unsigned char addr,unsigned char TDat)// 向DS1302某地址写一字节数据子程序
{
DS1302_RST=0;
_nop_();
DS1302_CLK=0;
_nop_();
DS1302_RST=1;
InputByte(addr);
_nop_();
InputByte(TDat);
DS1302_CLK=1;
_nop_();
DS1302_RST=0;
}
unsigned char read_ds1302(unsigned char addr)// 读DS1302地址子程序
{
unsigned char timedata;
DS1302_RST=0;
_nop_();
DS1302_CLK=0;
_nop_();
DS1302_RST=1;
rs=1;
lcden=0;
delay(10);
lcden=1;
delay(10);
lcden=0;
}
void init()
{
dula=0;
wela=0;
write_com(0x38);
delay(20);
write_com(0x0f);
delay(20);
write_com(0x06);
delay(20);
write_com(0x01);
delay(20);
}
}
void time_display() //液晶显示时间程序//
{
void write_com(0x80);
void write_date(year);
void write_com(0x80+5);
void write_date(month);
void write_com(0x80+8);
void write_date(day);
void write_com(0x80+11);
void write_date(week);
}
void main(void)
{
initial_ds1302(); //初始化DS1302
while(1)
{
read_time(); //读取时间
time_display(); //显示时间
}
void delay1(uchar x) //24C02读写驱动程序
{
uint i;
for(i=0;i<x;i++);
;
}
void flash()
{
; ;
}
void x24c02_init() //24c02初始化子程序
{
scl=1;
flash();
sda=1;
flash();
}
void start() //启动I2C总线
{
sda=1;
flash();
scl=1;
flash();
sda=0;
flash();
scl=0;
flash();
}
void stop() //停止I2C总线
{
sda=0;
flash();
scl=1;
flash();
sda=1;
flash();
}
void writex(uchar j) //写一个字节
{
uchar i,temp;
temp=j;
for (i=0;i<8;i++)
{
temp=temp<<1;
scl=0;
{sec=0;}
}
}
void main()
{
uchar i;
TMOD=0x01; //定时器工作在方式1
ET0=1;
EA=1;
x24c02_init(); //初始化24C08
sec=x24c02_read(1); //读出保存的数据赋于sec
TH0=(65536-50000)/256; //对TH0 TL0赋值
TL0=(65536-50000)%256; //使定时器0.05秒中断一次
TR0=1; //开始计时
while(1)
{
i=10;
while(i--)
{
display(sec/10,sec%10);
}
if(write==1) //判断计时器是否计时一秒
{
write=0; //清零
x24c02_write(1,sec); //在24c08的地址2中写入数据sec
}
}