1、本 科 生 毕 业 设 计 报 告系(院) 物理与电子工程学院 专 业 电子信息工程 论文题目出租车计费器的设计 学生姓名指导教师(姓名及职称)班级 2012 级电信 4 班 学号完成日期:2016 年 4 月乐山师范学院毕业论文(设计)0出租车计费器的设计xxx物理与电子工程学院 电子信息工程 xxxxx摘要本设计主要是针对城市出租车运营而设计的一款智能收费系统。是以单片机STC89C52RC 为核心,通过光电传感器来累加车轮旋转的圈数和算法来计算出行驶的路程,并根据相应的收费标准计算出应当收取的费用;以 LCD12864 液晶显示屏来显示路程、单价、行驶的时间和消费金额等信息;利用 SYN
2、6288 语音模块在一些特定的时候进行语音播报提示。本设计还可以根据用户的自身情况对收费的标准进行调整。关键词出租车计费器 SYN6288 LCD12864 光电传感器 乐山师范学院毕业论文(设计)11 前言1.1 设计背景在国民经济的快速发展下,城市的交通治安逐渐变得整齐有序,出租车计价器在城市的交通中也得到广泛的使用。虽然私家车拥有的数量在逐渐的增长,但是出租车依然是城市交通运输乘客的重要角色。出租车计价器是出租车上统计路程及时间和通过收费标准计算消费金额的仪表仪器,是出租车上必不可少的部分,它是负责计算出租车营运收费的专用智能仪表。不管是消费的乘客还是出租车的司机都要求计价器在性能方面能
3、够稳定、计价准确而且在它的功能方面也要求越来越高。有史以来,在城市出租车已经成为人们工作、生活中不可缺少的交通工具。出租车计价器是一种能根据乘客乘坐出租车行驶的路程和收费的方式计算出乘客消费的金额并直接显示车费值的计量工具。出租车计价器是出租车上结算消费金额的计算工具,所以计价器计价准确与否,直接关系到双方的经济利益。1.2 设计目的和意义大力提高城市安全文明的建设是当前城市建设的主要内容之一,随着人们生活水平的不断提高,人们对各种工具的功能要求也越来越高。就出租车收费器而言,人们对它的功能要求也是逐渐的增加,虽然它的功能在趋于完善,但任然有很多可以改进的地方。本次的设计选用的主要元件是单片机
4、,不仅是为了完成设计的要求和各功能的实现,更是为了检验我们对所学知识的应用能力以及我们解决问题的能力。2 任务的提出与方案论证2.1 设计要求1、能对出租车行驶的路程进行统计并显示;2、能根据行驶的路程和相应的收费标准计算出消费的金额;3、具有计时的功能;4、在一些特定的时候,有语音提醒播报的功能;5、有按键控制的功能。乐山师范学院毕业论文(设计)22.2 方案选择控制芯片的选择:方案一:采用单片机控制,利用单片机控制的灵活性以及丰富的 IO 端口,不仅能实现基本的计程和价格实现,还能实现计时、和语音提醒播报的功能。方案二:采用数字电路控制,通过传感器输出脉冲信号,进过放大整形作为位移寄存器的
5、脉冲信号,实现计价,但这种电路能实现的功能比较单一、简单,已经不能满足现在出租车的使用。在上述两种方案中,很明显方案一的适用能力要比方案二强,方案一能实现的功能也多余方案二,故选用第一种方案。传感器的选择:方案一:霍尔传感器,霍尔传感器的测速灵敏度比较高,有使用方便、价格便宜等优点,很适合汽车测速等应用场合。方案二:光电传感器,光电传感器工作比较稳定,使用方便、价格便宜,很适合用在统计数量、自动开关等方面。以上两种传感器都是汽车测速原件的很好选择,由于我对光电传感器工作原理的了解比较了解,而对霍尔传感器原件的工作原理不是很了解,所以本次我选择了光电传感器。显示电路的选择:方案一:采用数码管显示
6、,采用数码管显示它需要几段才能显示一个信息,此次设计的显示信息量有点偏大,若采用数码管显示电路,则加大了硬件电路的连接。方案二:采用液晶 LCD1602 显示,LCD1602 只能显示两行的信息,适用于信息量显示不大的场合,而且只能显示字符不能显示汉字,所以在此次设计中不易使用。方案三:采用液晶 LCD12864 显示,LCD12864 可以显示四行信息,它不仅能显示字符,还能显示汉字。综合以上三种显示电路的特点和结合此次设计的需求,觉得 LCD12864 更能适用于本次设计,故选择方案三。乐山师范学院毕业论文(设计)32.3 总体方案设计此次设计的总体方案规划如下:在整个控制系统中以单片机
7、STC89C52RC 为核心。光电传感器在电机的作用下产生信号脉冲,并将脉冲信号传送给主控芯片单片机,单片机通过一系列的计算和处理后将要显示的信息送给液晶LCD12864 显示出来,将要播报的语音信号发送给 SYN6288 语音模块进行播报;此外,单片机还受按键的控制,其目的是方便人们对整个系统进行选择和操作控制。整个系统的电路框图如图 2.1 所示。图 2.1 整个系统电路框图3 系统电路设计3.1 主控模块电路本次的设计中单片机 STC89C52RC 为主控芯片,是整个设计中的核心元件。它在电子行业的市场上已成为大众化器件,它与 51 单片机完全兼容。我们在使用的时候可以多次下载修改的程序
8、,大大的提高了芯片的使用率,所以在很多简单的设计中,人们都选择采用单片机。其目的就是价格便宜,使用灵活。STC89C52RC 单片机同一般的单片机芯片一样,在工作和烧写程序的时候必需要外接最小系统。最小系统包括晶振电路、复位电路和电源电路,它们是单片机能否正常工作的最基本条件。单片机最小系统电路图如图 3.1 所示。乐山师范学院毕业论文(设计)4图 3.1 单片机最小系统电路图3.2 光电传感器模块本次设计在测量路程的过程中选用的是光电测速传感器模块(宽槽板),它的外形如图 3.2 所示。图 3.2 光电传感器模块外形用途:主要广泛的应用于电机转速检测、脉冲计数、位置闲位、开关控制等方面。工作
9、原理:此次选用的光电传感器内部主要由指示灯电路、光耦传感器、宽电压 LM393 比较器输出电路组成。当光耦传感器槽中无遮挡时,接收管导通,乐山师范学院毕业论文(设计)5模块 OUT 输出低电平(输出 0 状态),此时指示灯会处于点亮状态;当光耦传感器槽中有遮挡时,接收管截止,模块 OUT 输出高电平(输出 1 状态),此时指示灯会处于熄灭状态。引脚连接:此模块有三个引脚,他们分别是 VCC、GND、OUT,其连接方式是:VCC 接电源正极 3.35V;GND 接电源的负极;OUT 为 TTL 开关输出端,本次我采用的是外部中断 1 的连接方式,因此我将 OUT 脚接到单片机的 13 脚(即P3
10、3/ 脚)。电路的连接方式如图 3.3 所示。INT图 3.3 光电传感器工作原理图3.3 SYN6288 语音模块SYN6288 语音模块属于中文语音合成模块电路,是北京宇音天下科技公司于2010 年初推出的一款性价比高、音质清晰、自然的语音合成芯片。它的外形如图 3.4 所示。图 3.4 SYN6288 语音模块外形SYN6288 语音模块的应用领域很广,其中在公交报站器、银行叫号机、自动乐山师范学院毕业论文(设计)6售货机、语音电子书等方面得到广泛的应用。此模块采用的是串口通信接收数据的方式,支持三种通信波特率:9600bps、19200bps、38400bps。在使用 SYN6288
11、语音模块的时候,外部电路的连接方式很简单,它有两组端口,一组是外接喇叭负载的端口,接入的喇叭规格为 8 欧 0.5 瓦,在接线的时候没有正负之分,还有一组有 5 个引脚构成,分别是VDD、RXD、TXD、GND、BY,其中 VDD 和 GND 分别接电源的正极和负极;而RXD、TXD 与单片机上的串口脚 RXD(P3.0)和 TXD(P3.1)交叉相连;最后的一个引脚 BY 为检测是否为忙碌状态,当 BY 为低电平时,说明模块处于空闲状态、为高电平时模块处于忙碌状态,此引脚可以选择性的接单片机的 IO 口,也可以不接。此模块电路的电路连接图如图 3.5 所示。图 3.5 语音模块电路连接图3.
12、4 显示模块电路设计中采用的 LCD12864 有 20 个引脚,其中 DB0DB7 是接受数据的并口,我采用的是与单片机的 P0 口相接,但 P0 口的驱动能力不够强,所以必须外接上拉电阻;除此以外还有几个控制脚,它们的功能和作用分别是:RS:当液晶采用并行连接方式时为指令/数据选择信号,当液晶采用串行连接方式时为片选信号控制端。R/W:当液晶采用并行连接方式时为读写控制脚,即当 R/W = 0 时,液晶处于写状态,当 R/W = 1 时,液晶处于读状态;当液晶采用串口连接方式时为数据传送口。E:当液晶采用并行连接方式时为使能控制端,当液晶采用串行连接方式时为同步时钟控制端。PSB:串并口方
13、式控制,PSB = 0 为串口方式,PSB = 1 为并口方式。乐山师范学院毕业论文(设计)7RST:复位端,低电平有效。BLA:背光源正极,可直接接+5V 电源。BLK:背光源负极,可直接接地。VCC:电源正极,接+5V 电源。GND:电源负极,接地。除此以外的其它三个引脚对本次的电路没有特别的影响,所以可以选择不接,根据以上对各引脚的了解和为了方便电路板布线,所以本次的显示电路的连接方式为如图 3.6 所示。图 3.6 LCD12864 显示电路连接图3.5 按键控制电路任何一个系统电路都需要有按键控制电路,其主要目的是方便人们控制操作、修改设置等,此次在我的设计中,也需要有按键控制电路,
14、方便出租车司机在使用的时候进行操作控制和一些简单的设置。在这次的电路中初步用六个按键(不包括电源按键),它们分别是开始按键、暂停按键、结束按键、设置按键、调节按键两个。电路的连接方式采用将每一个按钮开关与单片机的 P1 口的每一个引脚相连接,然后另一端公共接地。电路的连接如图 3.7 所示。乐山师范学院毕业论文(设计)8图 3.7 按键控制电路图3.6 系统的总体电路此次设计的电路总共分为 5 部分,它们分别是以上介绍的单片机最小系统、光电传感器测速电路、12864 液晶信息显示电路、按键控制系统电路、SYN6288语音播报电路。在整个系统电路中,这五部分电路是主要以单片机来协调、控制工作的,
15、单片机也是整个电路的核心原件,整个硬件的系统电路如图 3.8 所示。图 3.8 系统电路原理图4 系统程序设计硬件电路的连接是为了支持软件程序的运行,所以在编写软件程序的时候软件一般都要参照硬件电路编写,不能盲目的去写,如若不然我们编写的程序乐山师范学院毕业论文(设计)9将无法在我们的电路板上运行;所以编写的程序必须与硬件电路相互兼容,才能实现出我们预期的效果。4.1 计时中断程序设计设计中的计时功能是采用的单片机内部的定时/计数器 T0 进行计数,当计数达到溢出时产生中断,通过执行中断函数而实现计时。要开启定时/计数器T0,首先要对与之相关的几个寄存器进行设置。对寄存器的设置程序需要放在主程
16、序的一开始,以便于程序在运行的时候一开始就可以开启中断,进行计时。开启定时/计数器 T0 主要涉及到以下几个寄存器的设置:方式寄存器 TMOD 的设置,它的格式如表 4.1 所示。定时/计数器 T0 只与TMOD 寄存器的第四位有关,如果我们的设计与定时/计数器 T1 无关的话,我们可以忽略高四位。此次我选用的是方式 1 工作模式,所以我们要将 M1、M0 两位赋值为 01; 是定时或计数方式的选择位,这里选用的是定时方式,所以给TC位赋值 0;对于 GATE 是启动方式位,直接赋值 0,表示由软件启动定时器。表 4.1 方式寄存器 TMODD7 D6 D5 D4 D3 D2 D1 D0- G
17、ATE TCM1 M0定时/计数器 T0 的初值设置,定时/计数器 T0 由特殊寄存器 TH0 和 TL0 组成,此次我们需要以 1s 为单位来计算时间,但是 1s 的时间太长,单片机的定时器采用方式 1 最长也只能定时 65536us,所以采用定时 50ms,中断 20 次来获得 1s 的时间;由此可以计算出初值为 65536-50000=15536;所以给 T0 的初值应该为 15536;TH0 赋值高 8 位:15536 右移 8 位,TL0 赋值为低 8 位:15536 与上 255。由于 T0 工作在方式 1,不具有自动重装初值的功能,所以在每次中断发生以后都需要在中断程序里利用程序
18、给 TH0 和 TL0 重新赋初值。另外与 T0 中断有关的、需要设置的寄存器还有定时器控制寄存器 TCON 的TR0 位和中断允许寄存器 IE 的 EA 位和 ET0 位,在这里,我们只需要将这些位设置为 1 就可以完成定时器 0 的初始化设置。T0 中断源在 C 程序的中断号是 interrupt 1,在编写中断程序的时候需要加上中断号。在中断程序中我们主要计算时间的时、分、秒,用于系统电路的乐山师范学院毕业论文(设计)10计时功能,此中断程序只会在中断触发以后执行,程序的流程图如图 4.1 所示。图 4.1 定时器 T0 中断程序流程图4.2 外部中断计程程序设计STC89C52RC 单
19、片机有两个外部中断源,本次的设计在计算路程的程序中就用到了一个外部中断源,选择的是外部中断 1,它对应的是我们单片机的 P3.3脚,它在 C 程序中的中断号是 interrupt 2。外部中断 1 的设置主要是它的触发方式,它的触发方式有两种:一是低电平触发方式、二是边沿触发方式;P3.3 脚外接的光电传感器模块在没有遮挡时会长时间输入低电平,如果采用低电平触发方式有可能会出现一次中断请求而发生多次中断请求的情况,所以在这里选择边沿触发方式。选择边沿触发方式的设置只需要把定时控制寄存器TCON 的 IT1 设置为 1。中断允许寄存器 IE 的 EA 和 EX1 也与外部中断 1 有关,所以也要
20、将其设置为 1。在外部中断 1 的程序中我们只作统计发生外部中断 1 的次数的工作,其余乐山师范学院毕业论文(设计)11计算路程和金额的程序放在主程序中进行计算,以便于缩短 CPU 执行中断程序的时间。4.3 串口语音发送程序的设计串口中断的初始化程序设计主要是对相关寄存器的设置和串口波特率的设置,需要设置的寄存器主要有控制状态寄存器 SCON、电源控制寄存器 PCON 的SMOD 位、定时控制寄存器 TCON 的 TR1 位和 T1 定时/计数器。SCON 寄存器的设置,主要用于定义串口通信口的工作方式和反映串行口状态,这次我们选用的是方式 1 的工作方式,表示 8 位 UATR(串行异步通
21、信接口);打开寄存器的 REN 位,所以给 SCON 寄存器赋值 0X50。PCON 寄存器与串口相关的只有 SMOD 位,它是波特率倍增位,当将该位设置位 1 的时候,表示串口波特率加倍。波特率的发生需要定时器产生时钟信号,由于在前面已经用了 T0 定时/计数器,所以这里只能用 T1 定时/计数器,这里 T1 定时/计数器选用方式 2 的工作模式,便于每次溢出后能够自动的重装初值;串口语音信号发送的波特率选用的是 9600;外部的石英晶振频率为 11.0592MHz,根据公式 1 通过计算得出T1 的初始值 X 为 0xFA,即表示我们要给 TH1 和 TH1 都赋值为 0xFA。(公式 1
22、)波 特 率)(模 式 二 的 初 始 值 3841SMODf-256T1ocs当这些寄存器设置完毕以后将 TCON 寄存器的 TR1 置 1 即可运行 T1 定时/计算器。串口数据在发送前要根据通信协议设置 TB8,然后将要发送的数据在主程序中直接写入发送缓冲器 SBUF,便可自动启动发送过程。串行口能自动的把 TB8取出,并装入到第九位的数据位的位置,再逐一发送出去 1。4.4 主程序的设计在整个程序的设计中最重要的是主程序,它的主要任务是完成中断的初始化、液晶初始化及液晶信息显示、开关状态检测、模式的调节等。它的主要流程图如下图 4.2 所示。在主程序中很多地方都采用了调用子函数的方法来
23、缩短主函数代码,由于子函数封装得比较多,这里就不对他们做过多的说明。乐山师范学院毕业论文(设计)12开始初始化液晶显示信息、设置中断开启中断、液晶清屏、发送语音提示信息清出所有计费数据计算路程、计算消费金额、液晶显示信息发送语音提示信息、关闭中断关闭中断、发送语音提示信息发送语音提示信息发送语音提示信息开启中断、发送语音提示信息开始计费按钮是否按下暂停计费按钮是否按下结账按钮是否按下是否已刚好行驶 2km消费金额是否为 10 的倍数开始按钮是否按下是否是否是是否是否否返回主界面按钮是否按下否是是否乐山师范学院毕业论文(设计)13图 4.2 主程序流程图5 硬件电路的制作与调试5.1 硬件电路的
24、制作整个硬件电路是在万能板上面焊接原件和连接焊点而组成的,在制作的时候首先是布局的问题,只有一开始布好局在走线的时候才不会显得那么乱,制作好以后才会显得美观,电路的性能才会可靠,不会出现接触不良等问题。这次在电路板上,为了担心元器件损坏,或者为了有些元器件能够再次利用,我都采用了焊接芯片座的方式将一些引脚比较多的原件直接插在座子上面实验。硬件电路的实物图如图 5.1 所示。此电路板上加了一个电机,其目的是方便演示和调试。图 5.1 电路实物图5.2 硬件调试的结果在经过多次的程序修改和硬件电路的改进后,整个硬件电路的调试结果已经能够达到预期设想的效果了,图 5.2 和 5.3 是最终调试成功后
25、在某个时候的显示结果图。电路能够正常的通过光电传感器计算行驶的路程;在开关的控制下能够正常的运行;液晶能正常的把信息显示出来;也能在特殊的时候进行语音提示播报。乐山师范学院毕业论文(设计)14图 5.2 硬件的初始显示界面图图 5.3 硬件的行程信息显示图5.3 PCB 板的绘制硬件电路的调试成功,说明电路的可行性。为了便于生产与使用,我将电路绘制成 PCB 板。本次绘制 PCB 板选用的是 protel 99 se 软件。在前面我们已将电路的原理图绘制成功了,所以在现在只需要将原有的电路添加到 PCB 板界面进行绘制就可以完成制作了。完成的结果如图 5.4 所示;进过 3D 视图看到的效果如
26、图 5.5 所示。图 5.4 PCB 板图图 5.5 PCB 板 3D 视图乐山师范学院毕业论文(设计)156 总结思考本次的毕业设计虽然顺利的完成了,但是并不能完全的投入到实际中去使用,其原因是存在计算精度和功能方面的缺陷问题。在计算精度方面存在的主要问题就是计算路程并没有以实际的车轮周长去计算,而是为了方便演示随便给了一个比实际值要大的值,这就造成了计算的路程和费用出现严重的误差,但这个问题可以通过修改调试程序解决;在功能方面的主要缺陷问题就是时间和计费方式方面,因为电路不能自动的去获取当前的时间,就没有办法去区分晚上和白天,而且也没有掉电保护功能,在异常掉电的情况下,所有的计算数据就清零
27、了,这是电路存在的两大缺陷问题,这两个问题就需要在单片机外围加上一些辅助电路和配合单片机的程序去解决,这是此次电路设计的主要缺陷问题。在经过了长达一个月的努力后,毕业设计已经完成得差不多了,虽然还有许多需要改进和不足的地方,但是大部分的功能已经完整的实现了。在这期间经历了选题、查资料、选材料、电路板焊接、程序的编写、论文的撰写等过程。其实最让我痛苦的是选题的阶段;在后期的制作与调试阶段虽然也遇到过很多困难,但在指导老师和一些同学们的帮助或建议下顺利地度过了难关。本次的毕业设计不但强化了我所学过的专业基础知识,而且还学到了很多新的知识,更让我们懂得了如何将所学到的知识应用于实际的生活中;让我收获
28、最大的就是懂得了如何客服困难,这在以后的生活和工作中都是最宝贵的财富。乐山师范学院毕业论文(设计)16参考文献1周国运. 单片机原理及应用 C 语言版. 北京:中国水利水电出版社, 2009.02. 2王柏盛.C 程序设计M. 高等教育出版社. 2004.3杨志忠主编. 数字电子技术基础. 北京:高等教育出版社 , 2004.01.4杨居义编著. 单片机案例教程. 北京:清华大学出版社 , 2015.01.5杨庚辰.自动控制原理M. 西安: 电子科技大学出版社,2011.4.6代万辉,陈松方编著. 全国电子设计大赛培训宝典. 北京:北京航空航天大学出版社, 2012.05. 7张义和等编著.
29、例说 51 单片机 C 语言版. 北京:人民邮电出版社, 2008.04.8侯殿有主编. 单片机 C 语言程序设计. 北京:人民邮电出版社, 2010.11. 9孙少文,陆中宏主编. 传感器. 北京:中央广播电视大学出版社 , 2014.01. 10丁继斌编著. 传感器. 北京:化学工业出版社, 2010.03. 11张玉莲.传感器与自动检测技术J. 北京: 机械工业出版社,2007.9:4-8.12王英主编. 电子技术实验教程 电工学 2 模电实验 数电实验 综合设计与仿真实验. 成都:西南交通大学出版社, 2015.03. 13胡新宇.传感器与自动检测技术M. 北京: 高等教育出版社,20
30、06.14邓兴成.单片机原理与实践指导M. 北京: 机械工业出版社,2010.2.15刘向宇.单片机 C 语言程序设计实例精粹J.北京:电子工业出版社,2010,2:12-21.16夏路易,石宗义编著. 电路原理图与电路板设计教程 Protel 99SE. 北京:北京希望电子出版社, 2002.06. 17姚年春编著. Protel 99SE 基础教程. 北京:人民邮电出版社, 2009.04. 18童诗白,华成英主编.模拟电子技术基础(第四版)M.北京:高等教育出版社,2007.9.19SYN6288 中文语音合成芯片数据手册J.The Design Of Taxi MeterXxx乐山师范
31、学院毕业论文(设计)17Institute of physics and electronic engineeriElectronic information engineering1230xxxxxAbstract The design is a shart changing system which mainly for the arban taxi operation.and it core for the single chip processor STC89C52RC. Through the photoelectric sensor to accumulate the number
32、 of turns of the rotation of the wheels and algorithms to calculate the driving distance. And according to the corresponding fee standards to get the charge should be. Through the LCD12864 to show the distance, unit price, the information of the time and the amount of consumption and so on. In certa
33、in time there is speech hint by using voice module of SYN6288. This design can also adjust the charge standard according to the users own situation.Key words Taxi meter, SYN6288, LCD12864, Photoelectric sensor.附录系统源代码main.h 文件源代码:#ifndef _main_h_#define _main_h_#include “12864.h“#include sbit begin_
34、key = P10;/开始计费按钮sbit pause_key = P11;/暂停计费按钮sbit end_key = P12;/结算费用按钮sbit mface_key = P13;/返回主界面按钮sbit nigday_key = P16;/晚上白天切换按钮unsigned short degree = 0; /统计 T0 发生中断的次数,满 20 次清零,时间加 1sunsigned short flag1 = 0; /协助语音发送,以免重复unsigned short flag2 = 0; /协助语音发送,以免重复unsigned short flag3 = 0; /判断当前是白天状态
35、还是晚上状态float runs = 2.5; /路程的比较值,当路程大于 runs 则加上单价unsigned short hour = 0; /时unsigned short minutes = 0; /分unsigned short seconds = 0; /秒unsigned short value = 0; /统计外部中断的次数,满 100 次,路程加 0.1KMunsigned int run_int = 0; / 路程的整数部分unsigned int run_fac = 0; /路程的小数部分unsigned int money_int = 5; /金额的整数部分unsign
36、ed int money_fac = 0; /金额的小数部分unsigned char time10; /要显示的时间字符串unsigned char money_str10; /要显示的金钱字符串乐山师范学院毕业论文(设计)18unsigned char voice40; /要发送的语音字符串unsigned char run_str10; /要显示的路程字符串unsigned char* time_string(); /将时、分、秒转换成一个字符串unsigned char* run_string(); /将路程转换成一个字符串unsigned char* money_string();
37、/将金额转换成一个字符串void send(char *text,char length);/发送一个要播放的语音信号void interrupt_set(); /中断相关寄存器设置void count_run(); /路程算法函数 void count_money(); /金额算法函数void Init_show(); /液晶初始显示信息void mess_show(); /计费时动态显示信息void init_data(); /还原所有的数据#endifmain.c 文件源代码:#include “main.h“int main()while(1)Init_show();interrupt
38、_set(); /设置中断strcpy(voice,“计费开始起步价五元“);send(voice,strlen(voice);LcdInit(); /初始化液晶while(1)count_run();count_money();mess_show();if(nigday_key = 0)if(flag3 = 0)flag3 = 1;else flag3 = 0;if(pause_key = 0) /暂停开关按下执行EA = 0;strcpy(voice,“计费暂停“);乐山师范学院毕业论文(设计)19send(voice,strlen(voice);while(1)if(begin_key
39、= 0)/开始开关按下执行并跳出循环EA = 1;strcpy(voice,“计费开始“);send(voice,strlen(voice);break;if(end_key = 0)strcpy(voice, “您本次消费“);strcat(voice, money_str);strcat(voice,“元“);send(voice,strlen(voice);while(1)if(mface_key = 0)break;init_data();break;if(run_int = 2) elsestrcpy(voice,“您已行驶两公里现在以 1.8 元一公里计费“);send(voice
40、,strlen(voice);flag1 = 1;if(money_int-9)%10 = 0)flag2 = 0;if(money_int % 10 = 0) money_str3 = 0;money_str4 = 0;乐山师范学院毕业论文(设计)20strcat(voice, money_str);strcat(voice,“元“);send(voice,strlen(voice);flag2 = 1;/*恢复变量函数,以便对下次收费进行计费*/void init_data()hour = 0; minutes = 0; seconds = 0;run_int = 0;run_fac =
41、0;runs = 2.5;value = 0;flag1 = 0;flag2 = 0;money_int = 5;money_fac = 0;EA = 0;/*LCD 初始化显示*/void Init_show()begin_key = 1;pause_key = 1;end_key = 1;mface_key = 1;nigday_key = 1;LcdInit();Location(1,0);Print(“欢迎乘坐出租车“);Location(2,0);Print(“起步价¥5“);Location(3,0);Print(“单价:白天¥1.6“);Location(4,3);Print(“
42、晚上¥1.8“);while(1)乐山师范学院毕业论文(设计)21if(begin_key = 0)break;return;/*显示信息*/void mess_show()Location(1,0);if(flag3 = 0)Print(“单价:¥1.6 “);else Print(“单价:¥1.8 “);Location(2,0);Print(“计时:“);Print(time_string();Location(3,0);Print(“计程:“);Print(run_string();Location(4,0);Print(“消费金额:“);Print(money_string();De
43、layMs(10);/*中断设置函数*/void interrupt_set() EA = 1; /开中断允许请求总开关ET0 = 1; /开 T0 中断请求EX1 = 1; /允许外部中断 1 请求IT1 = 1; /采用下降沿触发TMOD = 0x21; /选择方式 0 计数方式TH0 = (65536 - 50000) 8; TL0 = (65536 - 50000) TR0 = 1; /开启中断TL1 = 0xFA;TH1 = 0xFA;SCON = 0x50;PCON = 0x80;REN = 1;乐山师范学院毕业论文(设计)22RI = 0;TI = 0;TR1 = 1;/*发送语
44、音信号函数*/void send(char *text,char length)unsigned int i = 0;unsigned char det = 0;char set5 = 0xfd,0x00,0,0x01,0x01;set2 = length + 3;for(i=0; i 8; TL0 = (65536 - 50000) degree+;if(degree = 20)乐山师范学院毕业论文(设计)23 degree = 0; seconds+;if(seconds = 60)seconds = 0;minutes+;if(minutes = 60)minutes = 0;hour+
45、;/*计算总价的函数*/void count_money()float run = run_int + 0.1 * run_fac;if(run = runs)runs += 0.5;if(flag3 = 0)money_fac += 8;else money_fac += 9;if(money_fac = 10)money_int+;money_fac = money_fac % 10 ;/*将消费金额转换成一个字符串*/unsigned char* money_string()int i = 0;if(money_int = 10 value = 0;if(run_fac = 10)run
46、_fac = 0;run_int+;/*将路程的整数和小数部分转换成字符串*/unsigned char* run_string()int i = 0;if(run_int = 10 /寄存器选择sbit RW= P24;/读写控制 RW=0 写 RW=1 读乐山师范学院毕业论文(设计)26sbit EN = P25;/液晶使能控制sbit PSB= P26;/串并方式控制 sbit RST= P27;/复位 低电平有效sbit busy = P07;void DelayMs(unsigned int ms) ;void BusyTest();void WriteLcd(unsigned ch
47、ar DatComm, unsigned char content);void LcdInit();void Location(unsigned char y,unsigned char x);void Print(unsigned char *Str);#endif12864.h 文件源代码:#include “12864.h“void DelayMs(unsigned int ms) /延时程序,延时 ms * 1msunsigned int i;for( ; ms 0; ms-)for(i = 100; i 0; i-);void BusyTest() /清屏LcdData = 0xff
48、;RS = 0;RW = 1;EN = 1;while(busy = 1);EN = 0;void WriteLcd(unsigned char DatComm, unsigned char content)/显示一个字符BusyTest();if(DatComm = 1)RS = 1;elseRS = 0;RW = 0;LcdData = content;乐山师范学院毕业论文(设计)27EN = 1;_nop_();EN = 0;void LcdInit()/LCD 初始化程序PSB = 1;RST = 1;WriteLcd(comm, 0x30);/基本指令动作WriteLcd(comm, 0x01);/清屏,地址指针指向 00HWriteLcd(comm, 0x