摘要:本文设计了一种基于单片机的出租车计价器,以单片机作为核心的控制元件,采用灵敏的霍尔开关型传感器,具有功能强,性能可靠,电路简单,成本低等特点,加之经过优化的程序,使其具有很高的智能化水平。
关键词:出租车计价器;霍尔开关;智能化
1 硬件结构分析与设计
1.1 硬件结构。此系统主要由 89S51 单片机、控制键盘、里程计算设计单元和动态扫描数码管显示等部件组成。利用单片机的控制灵活性,可实现基本的里程计价功能和价格选择、时间显示控制等功能,而且能实现功能扩展和系统升级。其控制方案如图 1.
图 1 单片机控制方案图
根据出租车计价器在实际运用中各种功能的需要,在本次出租车计价器设计中的系统控制要求如下所示:
1)能够测量行驶路程和计价。2)能显示路程,单位为 km,最后一位为小数位。3)能显示金额,单位为元,最后一位为小数位。4)在电源断开的时候,能够存储当前设定的单价信息。5)可以实现白天/晚上的计价切换。6)可以显示时间。 1.2 硬件电路方案设计
1.2.1 设计方案。采用单片机控制。利用单片机丰富的 I/O 端口,及其控制的灵活性,实现基本的里程计价功能和价格调节、时钟显示功能。本方案有较大的活动空间,相对来说功能强大,用较少的硬件和适当的软件相互配合可以很容易的实现设计要求,且灵活性强,可以通过软件编程来完成更多附加的功能。不但能实现所要求的功能而且能在很大的程度上扩展功能,而且还可以方便的对系统进行升级。
1.2.2 里程计算和检测。将小磁铁装在车轮上,然后再到车轮旁边的车身上安装霍尔传感器 A44E,通过车轮转动,小磁铁靠近霍尔传感器 A44E 的时候,A44E 会监测到信号,然后将检测到的信号传送到单片机,经单片机的处理计算,再送给显示单元,这样便完成了里程计算。
检测原理:为了程序计算的方便,我们采用外部中断 0,所以将 P3.2 口作为信号的输入端口,假设车轮的周长为 1m,因为小磁铁安装在车轮上,所以车轮每转一圈,这样霍尔传感器 A44E就会检测出信号并输出信号,从而引起单片机的中断,然后就对脉冲计数,中断一次就是走 1m,当中断次数达到 1000 次时,出租车就走了 1km,然后通过单片机程序控制将金额自动增加。 每当霍尔传感器靠近小磁铁产生的磁场时,就会输出一个低电平信号使单片机中断一次,当里程计数器对里程脉冲计满 1000次时,就有程序将当前总额累加,使微机进入里程计数中断服务程序中。在该程序中,需要完成当前行驶里程数和总额的累加操作,并将结果存入里程和总额寄存器中。
1.2.3 显示电路设计。采用 8 位 LED 数码管的分频显示数码管的分屏显示。数码管的 A、B、C、D、E、F、G、DP 为数码管的数据位接口,将它们与单片机的 P0 口相连接,数码管的 1、2、3、4、5、6 为数码管的位选接口,我们将它们与单片机的 P1.0、P1.1、P1.2、P1.3、P1.4、P1.5 相连接,设计上要有单价(2 位)、路程(2 位)、总金额(3 位)显示输出,加上另外扩展的时钟显示(包含时分秒的显示),
1.2.4 掉电存储电路设计。采用 AT24C02 芯片设计存储电路,存储电路的作用是在电源断开的时候,存储当前设定的单价信息,这样就不用断电的时候每次都要重新进行基本信息的设置。
将 AT24C02 的 SCL 和 SDA 两个通信接口接到单片机的 P3.5 和P3.6 口,注意 SDA 和 SCL 都需要和正电源间各接一个 5.1k 的电阻上拉。
1.2.5 按键电路的设计
S1:分屏显示按键。出租车在行驶的时候,显示屏只显示总金额和单价信息,当出租车到达终点时,可以按下 S1 键,进行分屏显示,显示出路程信息。S2:功能设定按键。可以按此键对出则车计价器进行功能设定。S3:白天/晚上切换按键。因为白天和晚上的单价信息有所不同,等到夜班时,可以按下此键对单价信息进行切换。S4:中途等待开关键。当遇上红灯、堵车等情况时,按下此键,开始中途等待计费。
设计中,为了防止按键不灵敏的情况发生,设置上拉电阻,这样就可以增大电路的驱动电流,是增加按键的灵敏度。 2.系统软件设计
2.1 主程序设计
主程序模块中需要完成对出租车起步的价格和单价进行初始化、对各个接口芯片进行初始化设置、设计循环等待以及对中断向量的设计、开中断设计等工作。此外,还需要对里程寄存器和价格寄存器、设置启动/清除标志寄存器进行设置和初始化。
接着,主程序将会根据各个寄存器的内容,来分别完成计算价格、计算路程、清除、启动等不同的操作。
当按下按键 S1 的时时候,单片机就会启动,然后开始计价,通过计算里程寄存器里面的内容来判断目前行驶的路程是不是已经超过了设置的起步价格的里程。没有超过,则保持目前的单价不变,假如超过,就要根据目前行驶的路程、起步价格和起步的路程、每千米需要的金额来计算出当前的乘车费用,然后再将这个结果存储在价格寄存器当中,接着就会把当前的乘车费用和所行驶的路程通过 LED 数码管显示电路来显示给出租车司机和乘客看。等到到达目的地的时候,出租车停车,车轮不再转动,这样霍尔传感器 A44E 就不会产生低电平,单片机的 P3.2 口就接受不到脉冲信号,于是计价停止,LED 显示屏显示当前的乘车费用和行驶的路程,等到再次有乘客时,按下复位开关按键,系统复位,显示清零,并重新初始化进行计价。
2.2 里程计数中断程序。在里程计数中断服务程序中,车轮每转一圈(我们设车轮的周长是 1 米),霍尔开关就检测并输出信号,引起单片机的中断,对脉冲计数,当计数达到 1000 次时,也就是 1 公里,单片机就控制将金额自动的加增加,送数据到相应的显示缓冲单元,并调用显示子程序显示。
2.3 定时中断服务程序。在定时中断服务程序中,每 100ms产生一次中断,当产生 10 次中断的时候,也就到了一秒,送数据到相应的显示缓冲单元,并调用显示子程序实时显示 2.4 中途等待服务程序。当遇到红灯或者堵车等情况下导致出租车停止,霍尔传感器 A44E 监测不到信号,单片机没有脉冲计数,这时按下 S4 键,启动单片机的片内定时器,当定时器的计时有 5 分钟的时候,就会在当前的乘车费用的基础上加上中途等待的费用,在等待时间内 5 分钟之后的每 1 分钟会加上每分钟的中途等待费用。当结束中途等待的时候,再次按下 S4 键,就会切换到正常计价的状态。
2.5 显示服务子程序。因为是要分屏显示金额、路程、时间等数据,所以要用到 DP_DIS(路程单价显示子程序)、CP_DIS(金额单价显示子程序)、HMS_DIS(时分秒显示子程序)3 个显示子程序
2.6 键盘服务程序。键盘服务程序放在主程序中,采用查询的方式,当按键没有按下的时候,系统就只在主程序中循环,当有按键按下的时候,就会转到该按键对应下的子程序中去,处理完子程序后再返回到主程序中继续循环
结论:相比普通模拟电路控制,采用单片机设计出租车计价器的功能更强大,而且用较少的硬件和适当的软件的配合就可容易实现。还可以通过软件编程来完成更多的附加功能。
参考文献:
[1]张友德,赵志英,涂时亮.单片微型机原理、应用与实验[M].
上海:复旦大学出版社,2005.
[2]何希才.传感器及其应用电路[M].北京:电子工业出版社,2001.