DIY编程器网
标题: 基于AT89S51单片机的出租车计价器系统设计 [打印本页]
作者: admin 时间: 2015-5-2 11:15
标题: 基于AT89S51单片机的出租车计价器系统设计
随着生活水平的提高,人们已不再满足于衣食住的享受,出行的舒适已受到越来越多人的关注。于是,出租车行业以低价高质的服务给人们带来了出行的享受。但是总存在买卖纠纷困扰着行业的发展。然而解决这一矛盾的最好方法就是改良出租车的计价器,用更加精良的计价器来为乘客提供更加方便快捷的服务。我国的出租车始于20世纪70年代,随着电子技术的发展,出租车计价器的设计技术也在不断进步和提高。国内出租车计价器的发展已经经历了4个阶段,从传统的全部由机械元器件组成的机械式到半电子式出租车计价器,再从集成电路式到目前的基于单片机系统设计的出租车计价器。基于单片机系统设计的出租车计价器是以单片机作为核心的控制元件,采用灵敏的霍尔开关型
器件,具有功能强,性能可靠,电路简单,成本低的特点,加上经过优化的程序,使其具有很高的智能化水平。
1 系统硬件设计
出租车计价器系统以AT89S51单片机为核心,由按键电路、AT24C02掉电存储电路、里程计算电路、数码管显示电路组成。利用单片机灵活的编程设计和丰富的I/O端口,及其控制的准确性,不仅能实现基本的里程计价价格调节、时钟显示,而且能很大程度上实现扩展功能,同时可方便日后对系统进行升级。图1给出计价器系统框图。
1.1 里程计算、计价电路的设计
里程计算是通过安装在车轮上的霍尔传感器A44E检测到的信号,送到单片机,经处理计算,送给显示单元的。A44E的检测原理如图2所示,P3.2口作为信号的输入端,内部采用外部中断0,车轮每转一圈(设车轮的周长是1 m),霍尔开关就检测并输出信号,引起单片机的中断,对脉冲计数,当计数达到1 000次时,也就是1 km,单片机就控制将金额自动增加,其计算公式为:
当前单价×公里数=金额
1.2 数据显示电路的设计
设计使用一个定时/计数器每0.1 s向主机发1次中断请求信号,并利用并行接口电路完成对时钟的实时显示功能。同时,利用动态扫描电路完成对出租车的起价和当前累计价的显示。
由于设计要求有单价(2位)、路程(2位)、总金额(3位)显示输出,加上另外扩展的时钟显示(包含时分秒的显示),采用LCD液晶段码显示,在距离屏幕1 m之外就无法看清数据,不能满足要求,而且在白天其对比度也不能够满足要求,因此采用6位LED数码管的分屏显示。
在出租车不走的时候,按下S1,可以实现数据的分屏显示;车在行走的时候只有总金额和单价显示屏在显示,当到达目的地的时候,客户要求查看总里程时,就可以按下S1切换到里程和单价显示屏,供客户查询。
1.3 AT24C02掉电存储电路的设计
存储电路的作用是在电源断开的时候,存储当前设定的单价信息。存储电路如图3所示,采用Atmel公司推出的容量为2 KB的串行电可擦除、可编程存储芯片AT24C02设计,传输方式为I2C总线。该设计优点在其简单性和处理的高效性上。一般地址输入端A0,A1,A2,写保护WP接Vcc或GND;SCL,SDA接上拉电阻(上拉电阻的阻值可参考有关数据手册选择,通常可选用5~10kΩ的电阻,设计中选用的电阻阻值为5.1kΩ)后再接单片机的普通I/O口,这便可实现单片机对AT24C02的操作。上拉电阻的作用是减少AT24C02的静态功耗。
1.4 启动及清除电路
在系统电路中,设计一个启动/清除按钮,用来作为启动里程计数或清除里程数计数的开关。将该按钮开关接到微机系统的某个中断请求线上,当开关被按下1次时就作为计程启动中断请求;再按下1次时,就作为系统的计程清零中断处理。
1.5 按键电路的设计
电路共采用4个按键,即S1,S2,S3,S4,其功能是:S1为分屏显示切换按键;S2为功能设定按键;S3为‘+’/白天晚上切换按键;S4为‘-’/中途等待开关。
2 系统软件设计
2.1 主程序模块
主程序流程图如图4所示,在主程序模块中,需要完成对各接口芯片的初始化、出租车起价和单价的初始化、中断向量的设计以及开中断、循环等待等工作。另外,在主程序模块中还需要设置启动/清除标志寄存器、里程寄存器和价格寄存器,并对它们进行初始化。然后,主程序将根据各标志寄存器的内容,分别完成启动、清除、计程和计价等不同的操作。
当按下S1时,就启动计价,将根据里程寄存器中的内容计算和判断出行驶里程是否已超过起价公里数。若已超过,则根据里程值、每公里的单价数和起价数来计算出当前的累计价格,并将结果存于价格寄存器中,然后将时间和当前累计价格送显示电路显示出来。
当到达目的地的时候,由于霍尔开关没有送来脉冲信号,就停止计价,显示当前所应该付的金额和对应的单价。到下次启动计价器时,系统自动对显示清零,并重新进行初始化过程。
2.2 定时中断服务程序
在定时中断服务程序中,每100 ms产生一次中断,当产生10次中断的时候,也就到了1 s,送数据到相应的显示缓冲单元,并调用显示子程序实时显示。
2.3 里程计数中断服务程序
每当霍尔传感器输出一个低电平信号就使单片机中断一次,当里程计数器对里程脉冲计满1 000次时,就有程序将当前总额累加,使微机进入里程计数中断服务程序中。在该程序中,需要完成当前行驶里程数和总额的累加操作,并将结果存入里程和总额寄存器中。
2.4 中途等待中断服务程序
当在计数状态下霍尔开关没有输出信号,片内的T1定时器便被启动,每当计时到达10 min,就对当前金额加上中途等待的单价,以后每10 min都自动加上中途等待的单价。当中途等待结束时,就自动切换到正常的计价。
2.5 启动/清除计程中断服务程序
当系统有启动/清除中断请求产生时,可以设定第一次中断为启动中断,第二次中断为清除中断,并在中断服务程序中将标志寄存器的内容相应置“1”或清“0”。其中,标志为“1”时表示本次中断是启动中断;为“0”时表示是清除中断。
2.6 显示子程序服务程序
由于是分屏显示数据,所以就要用到4个显示子程序,分别是:时分秒显示子程序(HMS_DIS),金额单价显示子程序(CP_DIS),路程单价显示子程序(DP_DIS)和单价调节子程序(PA_DIS)。
2.7 键盘服务程序
键盘采用查询的方式,放在主程序中,当没有按键按下的时候,单片机循环主程序,一旦右键按下,便转向相应的子程序处理,处理结束再返回。
3 结语
由于本出租车计价器采用单片机作为核心控制元件,采用灵敏的霍尔传感器器件作为检测,因此使其具有功能强,性能可靠,电路简单,成本低的特点,加上经过优化的程序,使其有很高的智能化水平,解决了以往出租车计价器计价不准确,使用寿命短等缺点。
作者: 李小路 时间: 2020-10-1 15:55
谢谢分享!
欢迎光临 DIY编程器网 (http://diybcq.com/) |
Powered by Discuz! X3.2 |