摘 要
本文以STC89C52为核心,设计了一种计费系统,包括了复位、时钟、键盘等部分。复位电路是由微处理器初始
化的,为了摆脱困境,除常规的初始化,可以利用重置回路重启。该时钟电路使用12 MHz的晶体振荡器作为时钟信
号源,精度高。
利用霍尔感应法对距离进行检测。按下按钮即可调节起始价格、计费里程、等候计费。按下按钮,模拟计程车
的起步、等候、结算。将里程、等待时间显示在1602液晶屏幕上,并显示出日间和夜间的总花费。为了改善客运企
业的经营管理,减少司机和旅客的冲突,一个良好的收费系统是司机和旅客共同关心的问题。而采用模拟技术和数
字技术的收费系统,基本上都会有体积偏大,用到的原件多,容易出故障,检修起来困难。而采用单片机实现的一
般系统,不仅是因为功能性很强大,更主要原因是仅需少量的硬件和软件就可以完成设计要求,而且它还具有很大
的灵活性,软件编程可帮助它实现更多的功能。汽车计价器是驾驶员和乘客之间的一项交易行为,是出租车产业发
展的一个重要指标,也是出租车行业的主要手段。这是一个涉及买卖双方利益的问题。性能优良的计程车无论对驾
驶员还是对旅客都非常重要。所以,对车辆计价器的研究也具有实际意义。
关 键 词: 出租车计价器;单片机;霍尔感应;灵活性
1 绪论
1.1 引言
出租汽车在城市公交系统中占有举足轻重的地位。因此出租车在投入运营前都要配计价器。计价器是一种智能
化的计价器,它是一种可以帮助出租车公司和乘客进行交易的工具,它的作用就是让乘客和出租车公司都得到好
处,这样才能降低双方的经济矛盾,因此,计价的正确与否,直接影响着用户和运营商的经济效益。根据国家有关
法律法规,计价器是国家首批国家强制列入的检测的工作用计量仪器。
为强化交通管理,降低驾驶员与旅客的矛盾,设计一套完善的计费系统,对驾驶员和乘客都有重要意义。一款
性能优良的计价器,是衡量计费系统发展和推广的基础,它的性能指标必须具备操作简单、准确、自动化程度高的
特点。
1.2 研究背景及意义
我国最早从事计价设备制造的厂家是重庆起重机厂。早期的计价器是由内部齿轮机械传动构成,仅能实现最基
本的计算里程功能。简而言之,就相当于汽车的里程表。
到了第二代则是将机械结构和手摇电脑结合起来,使仪器达到了半机械、半电子的水平。在此基础上,可以实
现在行进的过程中进行价格计算。
现阶段大规模使用的三代计价器诞生并发展于大规模集成电路的普及,也就是现代电子版的计价器。计价器在
初期的主要作用是以计费里程为基础,其准确性和可靠性都有很高的要求。随着单片机的重要性越来越来高,与之
在计程车上得到的广泛的应用,现代计价器的雏形基本上已经搭建起来了。如今它的作用也在逐步完善,能够完成
基本的计量,定价,显示等工作。随着微处理器和周边芯片的不断发展,计价设备的发展受到了极大的促进。
一个性能良好耐用的计价器是研究设计的初衷,不论是对个人或是对出租汽车公司,它不仅关系到钱的来往问
题也可以说是关系民生的问题,因此研究计价器的应用具有很强的现实意义。
2 方案设计
2.1设计主要功能
本设计的目的是制作出一款实用的出租车计价器,通过采用单片机为主要控制器,配合其他各个独立模块,做
到尽可能的贴近实际场景,在没有乘客时,显示屏显示日期时间,并可以按下按键设定,这时电机处于停止待机状态;在有乘客的情况下,按下按键切换到计费状态,同时电机开始工作,同样的计费也可以通过按键更改,还可以
在白天和黑夜之间转换收费,也可以在分钟或公里之间进行转换。具体如下:
(1)无乘客时可以显示时间年、月、日、时、分、秒,这样方便实用。
(2)显示路程、金额均保留一位小数。
(4)显示随着时间推移在白天夜晚变换的不同时间单价、停车等待时间、里程、总金额等数据。
(5)起步公里数为3公里,价格可以自行设置
(6)存储芯片可以保存好已经设置好的参数,掉电后无需重新设置
(7)计价方式 =3 公里起步价 + 3 公里外路程 × 单价 + 停车等待时间 × 单价
2.1.1 方案确定
传统的计费系统是以数电模电基础来实现采用全硬件组合,例如由555定时器组成多谐振荡器,或者是采用可提
供时钟脉冲的振荡电路来实现,再对产生的脉冲信号计数分频解码,把解码结果传送到数码管上显示。
但自从我们学会了微处理器之后,我们就发现,原来的数字电路设计是不太可靠的,不能满足复杂的设计要
求,因此,我选择了单片机技术,以 STC89C52为主控制器,1602字符的 LCD为显示电路,内置晶振作为时钟脉冲,
具有很高的人性化和经济价值。该系统分为两个部分:软件和硬件。在此基础上,利用 KEIL语言编写了程序,利
用 PROTEUS软件对实际运行进行了模拟仿真,并用AD对电路板设计。硬件设计包括电路设计、硬件仿真和电路板的
制作。
2.1.2 单片机的选择
单片机采用的是STC89C52。这是一款8K线程流延 Flash内存的低功耗高性能八位 CMOS单片机。其已经经历过很
久的发展,技术应用起来简单方便,具有很强的成熟性。STC89C51的核心是MCS-51,它的指令与MCS-51完全兼容,
但随着MCS-51的不断升级,它拥有了许多传统51微处理器所没有的性能,比如它的内存比传统的51处理器升级到了
4K,对于内存要求不是特别大的设计已经满足日常的使用需求,节省了外部内存的花费。
2.1.3 显示器件的选择
显示器件选择的是LCD1602液晶显示屏。刚开始选择时也考虑过直接用数码管显示,因为本次设计所显示的并不
复杂,而且其具备价格便宜的优势,但最终放弃的原因就是数量,在同时显示时间价格等情况下,就可能要用到过
多的数码管占用太多单片机的I/O口,并给后续实物制作焊接带来麻烦,此时就能体现出LCD1602液晶显示功能强
大,可同时显示包括数字、字母、符号共32个字符,并且其用单片机控制也很简单。
2.1.4 测距模块的选择
测距模块采用霍尔传感器。经过查阅资料了解到霍尔传感器目前三大应用领域之一就是在出租车计价器上,可
以说是计价器上必不可缺的关键元器件,其内部的霍尔开关随着每次转动开关,相应的产生一次脉冲,通过单位时
间内的脉冲数目来决定转子的转速,送到单片机,经处理计算,送给显示单元,这样便完成了里程计算
2.1.5 存储芯片的选择
存储可以有两种方法,第一是利用EEPROM在微处理器中进行数据的存储。STC89C52具有内置的EEPROM采用 ISP
/IAP技术读取和写入内部FLASH从而实现存储。其先进的CMOS技术大大降低了设备的功耗,并且它是由IIC总线控制
的,具有特殊的写入保护功能。但是从单片机EEPROM的角度来看,在进行数据写入之前,必须将整个扇区的内容都
擦掉,这是一个比较复杂的问题。取而代之用AT24C02存储芯片更为方便。
2.1.6 计时模块的选择
计时模块选用DS1302这款时钟,此芯片内部采用串行电路,与 MCU进行较简单的通讯,但需要额外的电池以及
32.768 kHz的晶体振荡,由于焊接技术及晶振品质的影响,会造成测量精度的下降。但是性价比比较高,而且常用
且稳定。
2.2 系统总体方案
通过上述对各个模块介绍,最后总结起来本次设计以STC89C52为核心,利用霍尔传感器检测车轮行驶过得路
程,液晶显示当前的数据,独立按键用来切换模式,设置计价器的计费价格等参数,并将其储存在AT24C02的记忆芯
片中,以保证在停电后的数据能够保持良好的状态。
3 硬件电路设计
3.1 单片机系统设计
3.1.1 STC89C52的概述
STC89C52是一种带8K字节闪烁可编程可擦除只读存储器的低电压CMOS8的微处理器。具有灵活、高效等特点,其
具体可实现功能如表3-1所示:
表3-1 STC89C52主要功能
主要功能特性
兼容MCS-51指令系统 32个双向I/O口
8K可反复擦写Flash ROM 3个16位可编程定时器中断
256*8bit内部RAM 2个串行中断
时钟频率1.2-12MHz 4个外部中断源
可编程UART串通道 2个读写中断线口
低功耗空闲和掉电模式 3级加密位
其中掉电模式下,RAM中的内容会保存,MCU的所有工作都会在下一次中断或重新设置之前停止。重新上电后能
继续显示正确的时间就是用了这一特性。最高工作频率为35MHz,6T/12T可供选择。其引脚图如图3-1所示:
图3-1 STC89C52单片机引脚图
主电源引脚(2根):
VCC(Pin40):电源输入,接+5V电源;GND(Pin20):接地线
外接晶振引脚(2根):
XTAL1(Pin19)、XTAL2(Pin20):片内振荡电路的输入端与输出端
控制引脚(4根):
RST/VPP(Pin9):复位端,引脚上出现2个机器周期的高电平复位。
ALE/PROG(Pin30):地址锁存允许信号
PSEN(Pin29):外部存储器读选通信号
EA/VPP(Pin31):程序存储器的内外部选通,接低电平从外部程序存储器读指令,如果接高电平则从内部程序存
储器读指令。
可编程输入/输出引脚(32根):PO、P1、P2、P3
3.1.2 最小系统设计
最小的单片机系统,简单来说就是一个由最基础的外围电路组成的使单片机工作的系统,首先,电源是一种无
可或缺的电子设备,需要为整个系统提供电能,在这个设计中,因为MCU的工作电压在4.5-5.5V之间,因此我们将
USB接口与手机的充电器或是5V的电脑接口相连来提供电源。电源、时钟、复位这三个电路是保证单片机能正常工作
的关键,以确保单片机可随时工作,而最小化则是整个应用系统的核心。通过扩展内存、 A/D等手段,可以使其发
挥更大的作用。由STC89C52单片机构成的最小应用系统,它的结构与图3-2相似,但由于其集成度的限制,只能用作
一个小型的控制器。
图3-2 单片机最小系统原理框图
3.1.3 时钟电路设计
图3-3显示了内部时钟模式。STC89C52微控制器内部具有构成振荡回路的放大器,只要将晶振与XTAL1、XTAL2外
接,即可构成自激振荡器,并在单片机中生成时钟脉冲信号。在XTAL1、XTAL2的管脚上加上一块石英和两块电容
器,使其内部的振荡发生。通常情况下,晶体振荡器的功率范围为1.2-12 MHz,本次采用12M石英晶体振荡器用于该
试验装置。和晶振并联时,两个电容的尺寸对振荡频率有很小的影响,具有微调的功能。在图3-3中,C1、C2具有稳
3.1.4 复位电路设计
在STC89C52微处理器的复位端被加上2个机械周期的高电平后,MCU内进行重置(连续保持高电平,则 MCU循环
重置)。该复位电路包括:上电自动重置和开关重置。图3-4所示的重置电路包含这两个重置模式。上电按下复位按
键的一刹那,电容C2需要充电,其两端电压不能发生突变,所有的电压都加到电阻上,RESET脚电平就被抬高,晶片
就会重置。接着,电容器逐渐充电完成,电阻上的电压随之减小,最终达到0V左右,RESET脚电平降低,芯片开始正
常工作。此时为自动重置模式。又或者人工重置模式时,直接在电容两端并联一个开关,直接按下按键使RST引脚产
生高电平复位,
3.2 LCD1602液晶显示电路设计
3.2.1 LCD1602的概述
LCD1602又称字符型LCD,是一种用于显示字母、数字、符号等的点阵液晶显示模块。它是由数个点阵组成的,
点阵中每个位置可以同时显示一个字符,每个字符之间有一个点的距离,以一条线隔开,这就是为什么图形不能在
此液晶很好地表现出来的原因。LCD1602液晶实物图如图3-5所示:
图3-5 LCD1602液晶实物图
LCD1602液晶显示屏引脚如表3-2所示:
表3-2 LCD1602引脚
编号 符号 引脚说明 编号 符号 引脚说明
1 VSS 电源地 9 D2 数据
2 VDD 电源正极 10 D3 数据
3 VL 液晶显示偏压 11 D4 数据
4 RS 数据/命令选择 12 D5 数据
5 R/W 读/写选择 13 D6 数据
6 E 使能信号 14 D7 数据
7 D0 数据 15 BLA 背光源正极
8 D1 数据 16 BLK 背光源负极
3.2.2 LCD1602的工作原理
LCD1602总共有11个指令,通 MCU将其传输到LCD1602中,可以实现诸如屏幕清屏、切换、显示等功能。LCD1602
本身就有一个字符库,它可以在显示的时候直接调用字库来进行显示,因此,只要掌握了每个指令的管脚状态,就
可以对其进行读、写数据,从而实现 LCD显示。各个指令对应的引脚电平如表3-3所示。
表3-3 LCD1602操作指令对应的引脚电平
读状态 写指令 读数据 写数据
输
入
RS=L,R/W=H,
E=H
RS=L,R/W=L,D0-D7=指令码,E=高
脉冲
RS=H,R/W=H,
E=H
RS=H,R/W=L,D0-D7=数据,E=高脉
冲
输
出
D0-D7=状态 无 D0-D7=数据 无
在使用时,D0-D7与单片机的P0相连接,VL端口与滑动变阻器连接来改变对比度,具体电路如图3-6所示。
图3-6 LCD1602电路图
3.3 霍尔测距电路的设计
3.3.1 霍尔传感器的概述
霍尔线型元件具有高精度、好线性的优点;霍尔元件采用多种补偿与保护措施,工作在-55~150℃之间。根据霍
尔装置的作用,可将其划分为:霍尔线式装置与霍尔式开关装置,前者用于输出模拟量,后者用于输出数字信号。
如将位移,转速,力等转换为电信号,用于监测和控制。
3.3.2 霍尔传感器电路设计
首先来解释一下霍尔效应,电流流过放置在磁场中的导体中,如果电流方向是垂直于磁场的,那么在垂直于磁
场和电流的方向上,就会产生一个电势差Uh,霍尔传感器便是以此为基础制成的磁性传感器。在本设计中通过轮子
上安装的磁钢随轮子转动来产生不断变化的电势差,把这个电势差也就是霍尔电压通过高效益放大器放大后驱动触
发电路,输出电压形成正弦波脉冲。通过采用A3144霍尔传感器采集这个正弦信号,正弦信号的峰峰值即可成为单片
机I/O口的高电平输入,但一般为了帮助单片机能更好的识别信号,通常会搭配一个393整型电路将正弦信号转变成
更易于识别的方波脉冲信号,
在实际使用中,为了保证霍尔传感器的精准,需要将轮子紧贴它,距离稍远则会无法采集到有效信号。
3.4 AT24C02存储模块
3.4.1 AT24C02概述
AT24C02是一款串行CMOS型E2PROM,采用I2C总线式读写数据,节省单片机的I/O口的资源,256个8位字节的存储
空间。AT24C02的引脚如表3-4所示:
表3-4 AT24C02引脚介绍
引
脚
名称 功能
1-
3
A0、
A1、A2
当这些脚悬空时默认值为0。当使用AT24C02 时最大可级联8个器件。如果只有一个AT24C02被总线寻
址,这三个地址输入脚(A0、A1、A2 )可悬空或连接到GND。
4 GND 接地端。
5 SDA 双向串行数据/地址管脚,用于器件所有数据的发送或接收
6 SCL 串行时钟输入管脚用于产生器件所有数据发送或接收的时钟。
11
7 WP 与VCC相连,内容处于写保护只读状态。与GND相连或悬空,可进行正常的读/写操作。
8 VCC 接+1.8V~6.0V电源
3.4.2 AT24C02电路设计
在本设计中只是用到一个AT24C02芯片内的寄存器,读和写只需要一个字节便可实现,所以直接将A0、A1、A2、
WP四个端口直接与地相连,方便读/写操作。具体设计电路图如图3-9所示:
3.5 DS1302接口电路设计
3.5.1时钟芯片DS1302的接口电路及工作原理
图3-10 DS1302与MCU接口电路
图3-10所示为时钟芯片与单片机的接口电路,与VCC1相连是一个3V纽扣电池起到提供低功耗备用电源作用,与
VCC2相连VCC则是双供电系统的主要供电,在此使用模式中,VCC1与备用电源相连,从而实现任何情况下可以存储时
间信息等的数据,而不需要主要的供电。系统的主要供电会根据两者电压大小切换,一般情况下不需要用到备用电
源作为主电源。VCC2在VCC2比VCC1大的情况下向DS1302提供电力。反之则VCC1为DS1302提供电力。RST,I/O,SCLK
三个端口是与单片机通信的。其工作过程为:RST引脚给一个高电平,然后在SCLK端时钟脉冲上升沿,I/O口向
DS1302写入地址/命令字节,随后再在SCLK时钟脉冲下降沿,从I/O口写入或读出相应的数据字节。就这样循环,因
此其与单片
3.5.2 DS1302工作原理
DS1302在读取数据时要先发送对应的寄存器地址在进行读取,控制字节是按最低位到最高位的顺序输出。
DS1302中有7个寄存器与日历、时钟有关,都是以BCD码的格式存储,寄存器和控制字如表3-5所示。
表3-5 DS1302的日历、时间寄存器
写寄存器 读寄存器 Bit7 Bit6 Bit5 Bit7 Bit3 Bit2 Bit1 Bit0
80H 81H CH 10秒 秒
82H 83H 10分 分
84H 85H 12/ 0
10 时 时
/PM
86H 87H 0 0 10 日 日
88H 89H 0 0 0 10月 月
8AH 8BH 0 0 0 0 0 星期
8CH 8DH 10年 年
8EH 8FH WP 0 0 0 0 0 0 0
3.6 独立按键电路的设计
本次设计采用了按键电路,实现了多个单独的按键进行人机对话。按键的一端与单片机的输入/输出端口相连。
这种设计是由于在悬置时,单片机的I/O口默认输出是高电平,按如图3-12所示连接电路,当按键开关按下之后,I
/O端口便形成低电平,单片机就能跟据此来做出判断,由于按键是金属的必不可少会产生抖动,所以在程序中要加
一个延迟消除。
四个按键的功能分别为:
第一个按键:上电后模拟没有载客的情况默认显示日期时间万年历,按键按下可在计费模式与万年历进行显示
切换。
第二个按键:+按键,只有在处于设置状态时才能使用,按下后对应设置项加0.1。
第三个按键:-按键,与第二个按键工作条件相同,按下后设置项减0.1。
第四个按键:按下进入设置状态,可在日期,时间,单价等进行切换进行设置。
图3-15电路原理图
4 系统软件设计
4.1 软件使用介绍
本设计使用Keil4进行编程实现,打开软件后新建“jijiaqi”工程,选择好对应的STC8952单片机,再在工程文
件下建立.c文件即可编写程序,完成后在设置目标输出选项中勾选生产HEX文件,将HEX文件导入到protues中仿真,
通过USB转TTL数据线下载到单片机实物上即可实现功能,软件编程界面如图4-1所示:
图4-1软件主界面
4.2 软件设计
4.2.1 主程序设计
主函数程序流程图4-2所示,当开始按键按下后,先对各个模块进行初始化Ds1302_Init();Init_LCD();
Initeeprom();进入时钟模式,读取显示DS1302中的时间数据Ds1302_Read_Time();,判断是否进入计价器模式,是
的话再判断是否夜间模式,显示不同时段计价display_S(Day,Night,DanJia,ZJ,GL/10,Time,GT,DN);
图4-2 主程序流程图
4.2.2 按键程序的设计
按键实现相对简单,只需判断按键按下来调用对应的程序,这里会涉及到关键一步去抖动,抖动就是按键在未
按到按下的临界区产生的电平不稳定现象,一般在10~200毫秒之间,时间虽说很短,但对于微秒的单片机时钟来说
是很久的。所以当检测到按键有低电平出现时立即延时10~200毫秒,以避开抖动,之后再读取一次电平值来重复确
定。
5 系统测试与调试
图5-2 焊接实物图
图5-1 仿真调试界面
系统的调试和测试分为硬件和软件两部分,对硬件部分进行原理图仿真(如图5-1所示)和实物焊接,烧录软件
程序至单片机进行调试,测试的主要方面就是看价格和时钟的设置功能、切换显示、计算金额、计算里程等一些数
据是否正常工作以及准确,测量的仪器使用到的有万用表、秒表等。最终系统整体硬件部分焊接实物图如图5-2所
示。
5.1 LCD1602显示调试
图5-3 日期/时间显示界面 LCD显示屏是整个系统的重要组成部分,我们的人机交互就是通过它来完成的,这个
液晶显示器的调试相对来说要简单的多,只要检查在LCD1602液晶显示器上显示的是日期、时间、价格和里程等数据
是否显示正常,是否出现对应的字符未显示或显示错误这类问题,如果出现此类问题,则必须去检查LCD1602的指令
控制程序中是否将对应的地址填错位置。在刚开始对液晶内部地址不熟悉时就将价格与单位的位置搞错,图5-3就是
正常上电后日期时间的显示。
5.2计价器里程/时间调试
图5-4 计费界面(里程)
计价器的计费里程是由电机转动霍尔传感器提供外部脉冲数据获得,即显示目前的里程和金额,如图5-4显示的
当前是白天起步价8元,起步价外每公里单价0.2元,当前总金额8.7元,总里程是4.2公里,图5-5显示当前等待时长
2分9秒,按照设计,3公里起步价是8元,以后每增加1Km,增加0.2元,在实际调试中可以达到要求,电机是模拟实际
汽车行驶,所以显示的里程只是一个模拟量并不代表实际电机带动轮子转动的距离为实际距离。
5.3 计费调试
图5-5 计费界面(等待时间)
计费调试首先就是要计算价格的正确性,按照计价方式 =3公里起步价+3 公里外路程单价+停车等待时间单价
这个公式,手动计算金额与显示的是否相符,其次就是对价格设置的调试,切换按键对价格加减设置,检查按键是
否正常工作有无出现断触虚焊,显示数字加减是否准确,最后在实物调试时,利用秒表进行计时,模拟针对堵车等
红灯的收费情况,等待时间收费显示如图5-5所示。
6 结论与展望
6.1 结论
本次设计以STC89C52为主要元件,研制了一款具有显示时间、等待、金额、里程、按键等功能的简易出租车计
费装置。开关开启后此时无乘客,能够显示时间,有乘客时切换模式开始按照按键设定保存好的信息计价,同时也
会根据时间判断当前收费模式,程序中设置的是23点-7点为夜间,经过这一段时间的生产和设计工作,最终达到了本设计的需求。由于时间、水平、经验等原因,这些设计作品仍有一定的缺陷。这是一个机会,也是一个挑战。在这次设计中,我收获颇丰,并在实际操作中加强了自己的动手技能。在实际的工程设计中,我也认识到了书本知识
与实践的不同。实践中存在着许多问题,这就要求我对问题进行具体的分析,逐步地加以解决。
在选择了这个课题之后,我就开始了对单片机的研究,查阅了大量的资料,进行了详细的设计与设计,并学习
了 Proteus和KeiluVision4程序。在设计之初,要形成一张流程图,这样才能使设计具有一定的逻辑和严谨,从而
使设计的思想更加清晰。采用模块化的设计思路非常重要,它可以方便地编写、修改和调试,并在此基础上增加了
一些注解,方便了大家的沟通和理解。
6.2 展望
在不久的将来,随着全方面智能的推进,未来第四代的计价器肯定会更加智能化,更多的模块可以集成到上
面,比如说GPS定位可实现监控实时位置,重力传感器甚至能反映出车辆爬坡的状态,视频摄像头识别乘客,记录车
内安全状态,更甚者可以与智能手机软件搭配使用支持乘客自选路线,设置起点终点,结合大数据给乘客推送不同
价格选择,再搭配上未来的智能汽车不再需要司机驾驶,实现全自动的水平,使得计程的误差更小,计价的方式更
公平透明,相信在这种模式下的运营,未来计价器的发展一定会大大超出我们们的预期,一定能更好的服务于我们
的生活。