基于C语言的出租车计价器程序设计

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

目录

1 前言 (3)

2 系统设计方案 (4)

2.1 系统的设计需求 (4)

2.2 系统的工作原理 (4)

3 系统硬件设计 (5)

3.1 单片机介绍 (5)

3.2 硬件组成 (8)

4 系统软件设计 (12)

5 仿真调试 (14)

6 结论 (16)

7 参考文献 (178)

8 心得体会及致谢 (20)

附录A 设计总图 (224)

附录B 源程序 (235)

1 前言

随着生活水平的提高,人们已不再满足于衣食住的享受,出行的舒适已受到越来越多人的关注[1]。相对于公共汽车拥挤与缓慢以及私家车高昂的费用,出租车无疑是一种低价高质的出行交通工具。近年来越来越多的人为了出行方便舒适愿意选择使用出租车,出租车行业得以快速发展[2]。

出租车计价器是出租车营运收费的专用智能化仪表,随着电子技术的发展,出租车计价器的技术在不断进步和提高[3]。最初的计价器计费模式较为单一,不便于在不同的运营环境下选取不同的计费模式。考虑到出租车行驶可能会出现从市区行驶到郊区或者行驶到偏僻地区,郊区或偏僻区打车的人少的现象,司机空车行驶返回成本较高,这时需要乘客为空车返回的路程承担一定的费用,这就需要区分单程/往返不同计价模式。“单程”模式是指目的地在郊区或者比较偏僻的地方,到达目的地后打车的人比较少,需要乘客乘客承担一定的空车返回的费用;“往返”模式是指目的地在市区,到达目的地后还会有乘客乘车返回,这种情况下司机不需要空车返回,乘客不需要承担回程费用。考虑到夜晚时出租车的灯光需要消耗能源以及司机夜间服务比白天较为辛苦,所以一般夜晚出租车的价格需要比白天高一点。

早期的出租车计价器均采用模拟电路和数字电路设计。计价器整体电路的规模较大,需要器件多,容易出故障,难调试。和模拟电路和数字电路设计相比而言,基于单片机进行设计的计价器,用较少的硬件和适当的软件相互配合就可以很容易的实现设计需求,硬件电路简单,稳定性好,灵活性强[4],通过软件编程就可以实现计费模式的切换。

2 系统设计方案

2.1 系统的设计需求

1、用数码管实时显示里程数及金额数。

2、出租车计价器计价器具有多种计费模式,白天/夜晚模式及单程/往返模式。

3、设计出租车计价器白天模式下起步公里数为3Km,价格为8元;若实际里程大于3Km,大于3Km的部分单程价格为2.4元/Km,返价格为1.6元/Km。

4、设计出租车计价器夜晚模式下起步公里数为3Km,价格为10元;若实际里程大于3Km,大于3Km的部分单程价格为3元/Km,返价格为2元/Km。

5、具有工作模式指示灯,指示当前工作模式状态。

出租车价目表如表1所示:

2.2 系统的工作原理

出租车计价是根据出租车所行驶的路程以及乘客乘车的方式综合计算的。出租车行驶路程在起步里程内按照起步价收费,超过起步里程时超出起步里程的路程按照相应模式下的单价收取附加费用,最后收取起步价及附加费用的总和。出租车的行驶路程可以通过车轮的周长乘以车轮旋转圈数得到。然后经过系统对相关数据的计算处理得出总的路程及计价金额,最后再通过显示电路将相关信息显示出来。

本设计采用AT89C51单片机作为系统核心处理器,以A44E霍尔传感器作为里程测量仪,设计控制按键以便选择相关的计费模式,并采用74HC138译码器进行地址译码为8位8段数码管提供片选码,采用8段数码显示出租车行驶的里程及应付总金额,通过LED指示灯指示出租车当前工作状态,便于乘客监督司机。利用单片机灵活的编程设计和丰富的I/O 端口,及其控制的准确性[4],不仅能实现基本的计价功能,而且能在很大程度上扩展功能,方便以后对系统进行升级。系统设计框图如图1所示:

图1 系统设计框图

里程测量是通过安装在车轮上的霍尔传感器A44E检测到的信号[5],送到单片机,经过处理输送到显示电路。车轮每转一圈,霍尔开关就检测并输出信号,引起单片机的中断,对脉冲计数[6]。

P3.4引脚作为信号的输入端,内部采用定时/计数器0计数[7],通过计算接收到的脉冲个数,计算出当前所行驶的路程。根据不同的收费模式,选择相应的起步价、单价等收费标准进行计算得出乘客应付总金额。假设出租车的车轮的周长是1m,那么出租车车轮旋转1000转,也就是行驶1Km(实际应用时以车轮实际周长计算,这里为了仿真方便假设车轮周长为1m)。通过对定时/计数器0的TL0和TH0的初值设置使得定时/计数器计数一定数量的脉冲时计数器溢出产生中断,在中断服务程序中完成里程计算。本设计为了仿真方便做如下设置TMOD=0x06,TL0=255 ,TH0=255;即单片机定时/计数器0工作于工作方式2,8位自动重装模式,作计数器使用,单片机收到一次脉冲触发一次中断,里程增加0.1Km。

通过按键能够实现启动、停止/结算以及选择不同的计费模式。显示电路使用8位LED 数码管来显示,左边4位显示行车里程,小数点后面一位为百米位,右边4为显示应付金额,小数点后面一位为角位。由于现实生活中一角使用的比较少,而五角钱使用的相对较多,为了司机与乘客之间交易方便,小数点后面的角位数字小于5的一律按5计算,大于5的一律向元位上进1。由于8位数码管静态显示需要许多I/O端口,和静态显示相比动态显示仅需要少量I/O端口就可以实现,所以这里采用动态显示方式。使用74HC138译码器对单片机输出的3位片选码进行译码并输送到8段LED片选端实现对8位LED的片选。

3 系统硬件设计

设计电路时,考虑到用霍尔传感器价格昂贵,且不便于试验检测仿真,在设计中采用一个模拟开关来代替。模拟开关一端接在P3.4引脚,另一端接地,通过来回高低电平的变化,每按一次,对应的里程数加0.1Km。通过程序计算出里程和金额的信息,再加上驱动电路的设计,就可以在数码管上分别显示总金额和总里程。

在显示方面,可以用液晶显示,也可以用数码管进行显示。由于液晶显示在距离一米多远以外就不怎么能看清楚[8],而数码管能清晰的显示、经济适用并且在这次设计中只需要显示里程和金额信息,所以本设计采用数码管进行显示。这样既节约了成本,又可以达到显示的目的。为了减少硬件的复杂度,设计中采用了动态显示方式。另外设计LED指示灯来实时指示各项状态,如出租车有客/待运状态,白天/夜晚状态,单程/往返状态,便于

相关文档
最新文档