1出租车计价器摘要:本设计是利用单片机技术来实现一台多功能出租车计价器,由单片机、键盘控制部分、串口驱动显示电路、里程计价单元部分组成,能够实现白天晚上转换计价、中途等待计价、总金额路程转换显示、时钟显示、始终调整等功能,具有性能可靠、电路简单、成本低等特点。关键词:单片机控制出租车计价器数码显示1引言随着电子技术的发展,出租车计价器技术也在不断进步和提高,国内出租车计价器已经经历了四个阶段的发展,从传统的全部由机械元器件组成的机械式,到半电子式即用电子线路代替部分机械元器件的出租车计价器,再从集成电路式到目前的单片机系统设计的出租车计价器。单片机控制的出租车计价器性能可靠、电路简单、成本低,在出租车行业已经得到了广泛的应用。2总体设计方案出租车计价器通过传感器与行驶车辆连接。出租汽车的实际里程通过传感器的脉冲信号在计价器里折算成一定的计价营运里程。目前市场上出租车计价器功能主要有具有数据的复位功能、白天/晚上转换功能、数据输出功能、计时计价功能等。本设计利用89S51单片机丰富的I/O口进行移位显示和键盘控制,用六片74164驱动六片数码管显示,并带有复位电路,可以在不正常状况下按复位键复位。2.1设计思路出租车计价器根据乘客乘坐汽车行驶距离和等候时间的多少进行计价,并在行程中同步显示车费值。从起步价开始,当汽车程行驶未满2公里时,均按起步价计算。过2公里后,实现每1公里单价收费,中间遇暂停时,计程数不再增加,开始计时收费,测距收费和测时收费的和便构成了一位乘客的车费。里程计算是通过安装在车轮上的霍尔传感器A44E检测到信号传到单片机通过处理计算,送给显示单元的。完整的出租车计价器还应包括查看、统计、时钟显示等功能。2.2总体设计框图总体设计框图如图1所示。图1出租车计价器原理框图键盘控制89S51单片机里程计算单元串口显示驱动电路总金额显示单价显示23设计原理分析本系统的硬件设计主要包括单片机AT89S51、数据显示部件、A44E霍尔传感器电路、里程计算及计价单元的设计。在硬件设计过程中,充分利用各部件的功能,实现多功能的出租车计价器设计。软件设计主要可分为主程序模块、定时计数中断程序、里程计数中断服务程序、中途等待中断服务程序、时间调整子程序、显示子程序服务程序、字型码表及延时子程序。3.1硬件设计计价器的单片机控制方案图如图1所示。它由以下几个部件组成:单片机AT89S51、总金额及单价显示部件、键盘控制部件、里程计算单元、串口显示驱动电路等。利用单片机丰富的I/O端口,及其控制的灵活性,实现基本的里程计价功能和价格调节、时钟显示功能。不但能实现所要求的功能而且能在很大的程度上扩展功能,而且还可以方便的对系统进行升级。具体电路参见附录。3.11里程计算、计价单元的设计出租车中需要一个能准确获得车轮转动即路程计量信号的装置,以得到标准的脉冲信号送入单片机外部中断0即P3.2引脚,由单片机完成计程数及车费的换算及显示。我们在汽车联轴器按圆周间隔嵌入磁钢,用霍尔传感器A44E检测并输出脉冲。原理图如图2所示。图2传感器测距示意图3.12数据显示单元设计由于设计要求有单价(2位)、路程(2位)、总金额(3位)显示输出,加上我们另外扩展了时钟显示(包含时分秒的显示),我们采用6位LED数码管的分屏显示。时钟显示时,左端两位显示的是时,中间两位显示分,右边两位显示秒;总金额单价显示时,左边三位显示总金额,右边两位显示目前单价,中间显示短横线表示本位没有使用;总路程单价显示时,同样是左边两位显示总路程,右边两位显示目前单价中间两位显示短横线;当切换置中途等待计价时,左边三位显示总金额,右边两位显示中途等待单价。几个显示部分通过按键可以自由切换。显示如图3所示。3时钟显示(图中显示为12点0分0秒)总金额和单价显示(图中显示为总金额20.0元,每公里3.0元)里程和单价显示(图中显示为10公里,每公里3.0元)图3采用6位LED数码管的分屏显示本设计显示部分采用串行移位显示,从单片机串口输出的信号先送到左边的移位寄存器(74HC164),由于移位脉冲的作用,使数据向右移,达到显示的目的。移位寄存器74HC164还兼作数码管的驱动。显示器原理图如图4所示。A1B2Q03Q14Q25Q36Q410Q511Q612Q713CLK8MR9VCC14GND7U174LS164A1B2Q03Q14Q25Q36Q410Q511Q612Q713CLK8MR9VCC14GND7U274LS164A1B2Q03Q14Q25Q36Q410Q511Q612Q713CLK8MR9VCC14GND7U374LS164A1B2Q03Q14Q25Q36Q410Q511Q612Q713CLK8MR9VCC14GND7U474LS164A1B2Q03Q14Q25Q36Q410Q511Q612Q713CLK8MR9VCC14GND7U574LS164A1B2Q03Q14Q25Q36Q410Q511Q612Q713CLK8MR9VCC14GND7U674LS164abfcgdeDPY1234567abcdefg8dpdp99L1abfcgdeDPY1234567abcdefg8dpdp99L2abfcgdeDPY1234567abcdefg8dpdp99L3abfcgdeDPY1234567abcdefg8dpdp99L4abfcgdeDPY1234567abcdefg8dpdp99L5abfcgdeDPY1234567abcdefg8dpdp99L6D1D2D3接P3.0VCC接P3.1图4显示器原理图12000020....0—3.010———3.043.13键盘设计本设计采用4个按键用来控制系统时间,总金额、单价显示,里程、单价显示,中途等待计价显示的切换,并且置有一个复位键S5。(1)S1按键的功能S1为计价启动/结束按键,在显示时间的情况下,按下S1为启动计价,再次按下S1为结束计价(2)S2按键的功能在按下S1按键启动计价之后,若接着按下S2键则进入中途等待计价模式。在调整时间时,按下S2键则数值减1。(3)S3按键的功能计价结束,在显示金额及单价时,若按下S3键则显示路程和单价,再次按下S3,可返回显示金额及单价。在调整时间时,按下S3键则数值加1。(4)S4按键的功能计价结束时,若按下S4,则返回系统时间的显示。在显示时间时,按下S4进入时间调整,默认调整时,再次按下S4,调整分,再次按下S4,返回系统时间显示。按键电路如图5所示S1S2S3S4R1R2R4R31k1k1k1kP1.01VCC40P1.12P0.039P1.23P0.138P1.34P0.237P1.45P0.336P1.56P0.435P1.67P0.534P1.78P0.633RES9P0.732P3.0/RXD10EA/VPP31P3.1/TXD11ALE/PROG30P3.2/INT012PSEN29P3.3/INT113P2.728P3.4/T014P2.627P3.5/T115P2.526P3.6/WR16P2.425P3.7/RD17P2.324XTAL218P2.223XTAL119P2.122GND20P2.02189C5189C51S5R71KΩR6200ΩC122uFVCC图5按键电路图3.2软件设计本系统的软件设计主要可分为主程序模块、定时计数中断程序、里程计数中断服务程序、中途等待中断服务程序、显示子程序服务程序、键盘服务程序六大模块。下面对各部分模块作介绍。3.21系统主程序设计在主程序模块中,需要完成对各接口芯片的初始化、出租车起价和单价的初始化、中断向量的设计以及开中断、循环等待等工作。另外,在主程序模块中还需要设置启动/清除标志寄存器、里程寄存器和价格寄存器,并对它们进行初始化。然后,主程序将根据各标志寄存器的内容,分别完成启动、清除、5计程和计价等不同的操作。主程序流程图如图6所示。当按下S1时,就启动计价,将根据里程寄存器中的内容计算和判断出行驶里程是否已超过起价公里数。若已超过,则根据里程值、每公里的单价数和起价数来计算出当前的累计价格,并将结果存于价格寄存器中,然后将时间和当前累计价格送显示电路显示出来。当到达目的地的时候,由于霍尔开关没有送来脉冲信号,就停止计价,显示当前所应该付的金额和对应的单价,到下次启动计价时,系统自动对显示清零,并重新进行初始化过程。主程序流程图如图6所示。图6主程序流程图主程序如下:DAY_PRICEEQU6FHNIGHT_PRICEEQU6EHMID_PRICEEQU6DHS3按下?显示金额及单价是显示路程和单价否S3按下?否是S1按下?否否是判时间设单价调用时间调整是是开始中途等待计价霍尔中断?否否是是初始化数据是S4按下?返回正常计价S1按下?否显示时间启动计价器停止计价否S2按下?S1按下?6START_PRICEEQU6CHCOUNTLEQU6BHCOUNTHEQU6AHM100EQU69H;外部中断次数DISTANCEEQU68H;行车距离MS100EQU67HSECEQU66HMINEQU65HHOUREQU64HLEDSLEQU63H;时分钞显示缓冲区LEDSHEQU62HLEDMLEQU61HLEDMHEQU60HLEDHLEQU5FHLEDHHEQU5EHLEDDANJIALEQU5DH;总额单价显示缓冲区LEDDANJIAHEQU5CHLINE_EQU5BHLEDCOUNT1EQU5AHLEDCOUNT2EQU59HLEDCOUNT3EQU58HLEDDANJIA2LEQU57H;路程,单价显示缓冲区LEDDANJIA2HEQU56HLINE__EQU55HLINE___EQU54HLEDDISTANCELEQU53HLEDDISTANCEHEQU52HLEDDAY_PLEQU51H;中途,晚上,白天显示缓冲区LEDDAY_PHEQU50HLEDNIG_PLEQU4FHLEDNIG_PHEQU4EHLEDW_PLEQU4DHLEDW_PHEQU4CHS1BITP2.0S2BITP2.1S3BITP2.2S4BITP2.3MID1EQU4BHPRICEEQU4AHDAYMIDEQU49HNIGHTMIDEQU48HORG0000HAJMPMAINORG0003H7AJMPTOORG000BHAJMPTOTIMEORG001BHAJMPTOSTARTORG0030HMAIN:MOVSP,#70HMOVTMOD,#11HMOVTH0,#3CHMOVTL0,#0B0HMOVTH1,#3CHMOVTL1,#0B0HMOV22H,#0AHSETBEASETBTR0SETBEX0SETBIT0SETBET0SETBET1MOVR7,#34MOVR0,#69HLOOPL:MOV@R0,#0DECR0DJNZR7,LOOPLMOVCOUNTL,#00H;起步价MOVCOUNTH,#05HMOVDAY_PRICE,#25H;白天价格初始化MOVDAYMID,#13HMOVNIGHT_PRICE,#30H;晚上价格初始化MOVNIGHTMID,#15HMOVSTART_PRICE,#50H;起步价初始化MOVMID1,#0MOVDISTANCE,#02HMOVHOUR,#12HKEY_MAIN:SETBTR0ACALLHMS_DISACALLT100MSDACALLT100MSDACALLT100MSDJNBS4,W3K11:JBS1,KEY_MAINACALLT10MSDJBS1,KEY_MAINJNBS1,$8MOVA,HOUR;判时间设单价CLRCYCJNEA,#08H,K12AJMPK16K12:JCK13CLRCYCJNEA,#20H,K15AJMPK13K15:JNCK13K16:MOVPRICE,DAY_PRICEMOVMID_PRICE,DAYMIDAJMPK14W3:AJMPK41K13:MOVPRICE,NIGHT_PRICEMOVMID_PRICE,NIGHTMIDK14:MOV29