出租车计价器.docx
- 文档编号:12313122
- 上传时间:2023-04-18
- 格式:DOCX
- 页数:26
- 大小:282.45KB
出租车计价器.docx
《出租车计价器.docx》由会员分享,可在线阅读,更多相关《出租车计价器.docx(26页珍藏版)》请在冰豆网上搜索。
出租车计价器
摘要
出租车计价器是司机与乘客的交易准则,它是出租车行业发展的重要标志,是出租车中的一项重要工具。
它关系交易双方的利益。
具有良好性能的计价器无论是对广大出租车司机朋友还是乘客来说都是很重要的。
因此出租车计价器的研究也是十分有用的应用价值。
本系统初步采用51单片机作为控制中心,为家霍尔传感器对里程进行测量,实现对出租车的计价统计。
采用e2prom存储芯片再掉电时保存信息。
输出采用8段数码管显示。
设计完成后不仅能实现基本的计价功能,还能根据不同情况收取不同的费用,还能在不计价的时候提供时间信息。
关键词:
单片机AT89S52;LED数码管;
1概述3
1.1课题简介3
2系统总体方案及硬件设计4
2.1系统工作原理及总体方案4
2.2单片机最小系统单元6
2.3霍尔传感器检测单元6
2.4键盘调整单元7
2.5显示单元8
3软件设计9
3.1系统主程序10
3.2按键扫描程序11
3.3中断程序12
3.4计算程序13
3.5显示程序14
4实验仿真14
4.1Proteus介绍14
4.2调试与测试15
4.3里程计价测试15
5课程设计体会16
参考文献17
附1:
系统仿真图19
附2:
源程序代码19
1概述
1.1课题简介
出租车已经是城市交通的重要组成部分,从加强行业管理以及减少司机与乘客的纠纷出发,具有良好性能的计价器对出租车司机和乘客来说都是很必要的。
为此,我们采用单片机系统设计了一款符合大众化的计费系统。
本方案以AT89S52单片机为中心、配合LED数码管,实现对出租车计价统计。
本方案可以实现:
1.系统接收里程传感器的脉冲输入,并对脉冲进行计数,继而转换为里程。
2.采用现行出租车的计价系统的计算方法,并对行驶里程进行计费,提供友好的用户界面,并具有发光二极管指示操作状态功能。
1.2功能要求
利用AT89S52单片机配合LED数码管,实现基本的出租车计价功能,具体设计规格如下:
1.用前4位数码管实时显示里程数,单位为公里,最后一位为小数位;用后4位数码管时时显示金额数,单位为元,最后一位为小数位。
2.规定出租车单程价格为2元/公里,往返则价格为1.5元/公里;单程/往返分别由“单程”按键和“往返”按键设定。
3.车速<5公里/小时的时间累积为总等待时间T(分钟),每5分钟等待时间相当于里程数增加1公里。
4.起步公里数为3公里,价格为5元;若实际运行大于3公里,按“设计任务2”计算价格。
5.到达目的地后,按“暂停”键,计价器可暂停计价。
6.按“清除”键,计价器能将记录数据(里程、等待时间与价格等)自动清0。
7.按“查询”键,能自动显示总等待时间T,再按下该键回到显示里程数、金额状态。
2系统总体方案及硬件设计
2.1系统工作原理及总体方案
出租车计价器用于记录里程、等待时间、是否往返、起步公里数与价格的关系,它能有效地避免司机与乘客间的矛盾,保障双方的利益。
出租车行驶总路程可以通过车轮的周长乘车轮旋转圈数得到。
即可计算得到车轮旋转几周出租车能行驶一公里的路程。
因此,使用霍尔传感器的目的就是方便地计量车轮旋转的圈数。
可在车轮转盘上粘一个小磁钢,当转轮转动时,霍尔传感器检测到磁场及其变化,产生脉冲信号。
输出的脉冲信号被接入到AT89S52单片机系统中,通过计算接收到的脉冲个数,计算出当前所行驶的路程。
同时,根据不同的收费标准,选择相应的起步价、单价等收费标准进行计算。
再配置上键盘和数码显示,通过键盘能够实现启动、暂停计价器、切换显示当前的行驶里程和需支付的车费。
通过分析,需要实现四个主要的功能模块,分别为脉冲计数模块、定时器计时模块、按键的处理以及数码管动态扫描等功能。
定时器计时模块主要完成途中等待(即没有脉冲来时)30秒的计时。
在启动键按下后,定时器就不停的计时,只要有脉冲来就将计时的值清除为零。
如果没有脉冲来,当计时超过30秒时,相应的总金额要按照收费标准计价。
中断的管理:
尽管中断有嵌套以及优先级的功能,但是由于定时器已经使用一个了中断资源,脉冲检测不宜再采用中断方式,而是采用查询方式。
由于需要不停的要清除30秒的计时,因此,脉冲的计数不采用定时器的计数方式。
启动键触发定时器开始工作,而定时器的运行可以作为脉冲计数的标志,只要定时器计时在运行,每来一个中断都应该计数。
主程序完成键盘的扫描和按键的处理,查询脉冲产生的中断,并完成脉冲的计数。
若每个脉冲代表1米,则当计数到1000时表示1千米的距离,相应的总金额要按照收费标准计价。
采用MCS51系列单片机AT89S51作为主控制器,外围电路器件包括数码管、独立式键盘、复位电路等。
模拟出租车计价器能根据总里程数、总等待时间长短、是否往返、起步公里数的情况做出相应报价等。
当然实际的出租车计价器还具有打印票据,显示是否空车等功能。
总体模块如图2.1所示。
图2.1电路的组成部分
2.2单片机最小系统单元
主控机系统采用了Atmel公司生产的AT89S52单片机,它含有256字节数据存储器,内置8K的电可擦除FLASHROM,可重复编程,大小满足主控机软件系统设计,所以不必再扩展程序存储器。
复位电路和晶振电路是AT89S52工作所需的最简外围电路。
单片机最小系统电路图如图2.2所示。
图2.2单片机最小系统图
在复位电路中,按一下复位开关就使在RST端出现一段时间的高电平,外接12.00M晶振和两个30pF电容组成系统的内部时钟电路。
2.3霍尔传感器检测单元
Us1881属于开关型的霍尔器件,其工作电压范围比较宽(3.5~24V),其输出的信号符合TTL电平标准,可以直接接到单片机的IO端口上,而且其最高检测频率可达到1MHZ。
Us1881集成霍耳开关由稳压器A、霍耳电势发生器(即硅霍耳片)B、差分放大器C、施密特触发器D和OC门输出E五个基本部分组成。
在输入端输入电压Vcc,经稳压器稳压后加在霍尔电势发生器的两端,根据霍尔效应原理,当霍尔片处在磁场中时,在垂直于磁场的方向通以电流,则与这二者相垂直的方向上将会产生霍尔电势差VH输出,该VH信号经放大器放大后送至施密特触发器整形,使其成为方波输送到OC门输出。
当施加的磁场达到工作点(即Bop)时,触发器输出高电压(相对于地电位),使三极管导通,此时OC门输出端输出低电压,三极管截止,使OC门输出高电压,这种状态为关。
这样两次电压变换,使霍尔开关完成了一次开关动作。
图2.3霍尔开关集成传感器原理图及其输出特性
里程计算是通过安装在车轮上的霍尔元件检测到的信号,送到单片机,经过处理计算,送给显示显示单元的。
霍尔传感器是一种磁传感器。
用它可以检测磁场及其变化,可在各种与磁场有关的场合中使用。
霍尔传感器以霍尔效应为其工作基础,是由霍尔元件和它的附属电路组成的集成传感器。
霍尔传感器分为线性型霍尔传感器和开关型霍尔传感器两种。
我们所用的是开关型霍尔传感器。
其原理图如图2.4
所示:
图2.4传感器测距示意图
我们选择P3.2口作为信号输入端,车轮每转一圈(假设车轮周长为1米),霍尔开关就检测并输出信号,引起单片机中断,对脉冲计数,当计数达到一千次时,也就是1公里,单片机就控制金额自动增加。
2.4键盘调整单元
独立式键盘:
独立式键盘中,每个按键占用一根I/O口线,每个按键电路相对独立。
I/O口通过按键与地相连,I/O口有上拉电阻,无键按下时,引脚端为高电平,有键按下时,引脚电平被拉低。
I/O口内部有上拉电阻时,外部可不接上拉电阻。
键盘接口电路如图2.5所示:
图2.5键盘接口电路
p1:
接P1.0口,对上一次的计费进行清零,为下次载客准备。
p2:
接P1.1口,能自动显示总等待时间T,再按下该键回到显示里程数、金额状态。
p3:
接P1.2口,选择是按单程计费还是双程计费。
p4:
接P1.3口,可以暂停计费,方便乘客结账。
2.5显示单元
对于现实电路我们可以采用数码管,也可以采用液晶显示。
LED数码管特点有:
寿命长、成本低、亮度高、故障少、视角大、可视距离远等,但其显示内容有限。
液晶显示的特点有:
显示内容丰富等,但其驱动复杂,成本高;外部光线强时,可视距离近。
综合考虑,本次设计采用LED数码管。
显示电路如图2.6所示:
图2.6显示电路
3软件设计
软件是单片机系统的灵魂,根据设计的要求,在本系统中本系统软件中包括下面程序模块:
主程序:
初始化系统涉及到的硬件模块,扫描键盘,根据按键启动/停止里程测量,实时更新单价、里程、等待时间、费用等信息显示。
按键扫描程序:
扫描按键,返回扫描结果。
计算程序:
将传感器发出脉冲数转换为公里数,并根据规则计算对应的费用。
显示子程序:
将计算程序得到的数据反映到数码显示管上。
中断程序:
监测行驶速度,统计等待时间。
现在应用更广泛的是单片机C语言,因其简单明了,故此次课程设计采用单片机C语言编程。
3.1系统主程序
在主程序模块中,需要完成对各参量和接口的初始化、出租车起价和单价的初始化以及中断、计算、循环等工作。
当汽车运行起来时,就启动计价,根据里程寄存器中的内容计算和判断行驶里程是否已超过起步价公里数。
若已超过,则根据里程值、每公里的单价数和起步价来计算出当前的总金额,并将结果存于总金额寄存器中;中途等待时,无脉冲输入,不产生中断,当时间超过等待设定值时,开始进行计时,并把等待价格加到总金额里,然后将总金额、里程和单价、往返价格送数码管显示出来。
程序流程如图3.1所示:
图3.1主程序流程
3.2按键扫描程序
键盘实质上是一组按键开关的集合,均利用机械触点的合、断作用。
按键在闭合及断开的瞬间均伴随有一连串的抖动,抖动反应在电压上就是呈现出高电平或低电平,为了确保CPU对一次按键动作只确认一次,必须消除抖动的影响。
去抖通常有硬件去抖动和软件去抖动两种方法,本程序使用软件延时去抖。
图3.2按键抖动信号波形
对于独立式键盘判键,首先看有键按下不,如果有键按下则延时一会儿,在判断是否真的有键按下,如果确实有键按下,再判键释放,最后执行键功能程序。
判键子程序的流程框图如图3.3所示:
图3.3判键子程序流程图
3.3中断程序
每当霍尔传感器输出一个低电平信号就使单片机中断一次,当里程计数器对里程脉冲计满1500次时,进入里程计数中断服务程序中,里程变量加一。
主函数中总金额也相应地变化。
在中途等待中断程序中,每1ms产生一次中断,将由当前里程计算出速度值送入某个缓存变量。
把当前速度值与预先设定的速度值相
比较,当小于设定的车速时,进入等待计时。
等待时间5分钟相当于里程增加一公里。
流程如图3.4所示:
图3.4中断流程
3.4计算程序
计算程序根据里程数分别进入不同的计算公式。
如果里程大于3公里,则执行公式:
总金额=起步价+(里程-3)*单价;否则,执行公式:
总金额=起步价。
程序流程如3.5所示:
图3.5计算程序流程
3.5显示程序
程序利用定时器每1ms产生一次中断,相应变量置位,点亮一个数码管,显示一位数据,利用主函数内的循环,实现动态扫描显示,同时根据数码管余辉和人眼暂留现象,即可实现显示。
{0x3f,0x06,0x05b,0x04f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//段码表示0-9
图3.6显示子程序流程
4实验仿真
4.1Proteus介绍
Proteus软件是来自英国Labcenterelectronics公司的EDA工具软件,它组合了高级原理布图、混合模式SPICE仿真,PCB设计以及自动布线来实现一个完整的电子设计系统。
此系统受益于15年来的持续开发,被《电子世界》在其对PCB设计系统的比较文章中评为最好产品—“TheRoutetoPCBCAD”。
Proteus产品系列也包含了我们革命性的VSM技术,用户可以对基于微控制器的设计连同所有的周围电子器件一起仿真。
用户甚至可以实时采用诸如LED/LCD、键盘、RS232终端等动态外设模型来对设计进行交互仿真。
其功能模块:
—个易用而又功能强大的ISIS原理布图工具;PROSPICE混合模型SPICE仿真;ARESPCB设计。
PROSPICE仿真器的一个扩展PROTEUSVSM:
便于包括所有相关的器件的基于微处理器设计的协同仿真。
此外,还可以结合微控制器软件使用动态的键盘,开关,按钮,LEDs甚至LCD显示CPU模型。
支持许多通用的微控制器,如PIC,AVR,HC11以及8051。
最新支持ARM。
交互的装置模型包括:
LED和LCD显示,RS232终端,通用键盘,I2C,SPI器件。
强大的调试工具,包括寄存器和存储器,断点和单步模式。
IARC-SPY和KeiluVision2等开发工具的源层调试。
应用特殊模型的DLL界面-提供有关元件库的全部文件。
4.2调试与测试
采用KeilC51编译器进行源程序编译及仿真调试,同时进行硬件电路板的设计制作。
硬件电路制作完毕,用万用表检测有无短路开路等现象,确定硬件电路没有问题后,用仿真头与硬件电路相连,运行程序进行调试。
若调试不成功,则可再单独调试程序和硬件电路。
程序用软件仿真运行,硬件电路再次检查有无焊错,或者元件与插座接触不良等方面问题;确认均无问题后,再次把软件和硬件联机调试,直至功能正常。
把程序烧录进单片机STC89C52结束调试。
4.3里程计价测试
由于实验条件的限制,我们采用霍尔传感器产生外部中断,设定中断间隔为10ms,假定1500个脉冲为1公里,则此时车速为1km/h=5圈/S。
整个系统以此为基础,通过计费程序完成中金额的计算。
表4.1的测试条件是:
假设单程的单价是2元,起步价为5元(包含3公里),分别不公里程测试得数据如表:
4km
6km
7km
9km
总
金
额
理论
7元
11元
13元
17元
实际
7元
11元
13元
17元
行驶
里程
理论
4km
6km
7km
9km
实际
4km
6km
7km
9km
表4.1实际金额和里程数
表4.2的测试条件是:
假设在单程运行中的单价2元的情况下行驶了6km,进行中途等待,分别等待不同的时间(每5分钟相当于增加1公里),起步价为5元(包含3km)。
5min
10min
15min
20min
总
金
额
理论
13元
15元
17元
19元
实际
13元
15元
17元
19元
表4.2总金额对比
5课程设计体会
出租车计费器系统的设计已经全部完成,能按预期的效果进行模拟汽车启动,停止,暂停等功能并能够通过数码管显示车费数目。
本款出租车计价器包括单价输出、单价调整、显示当前的行驶里程等功能。
另外,多功能出租车计价器还具有性能可靠、电路简单、成本低、实用性强等特点,加上经过优化的程序,使其有很高的智能化水平。
经过一个月的设计、仿真、焊接、测试,我们基本上完成了设计要求的内容,在系统可行性分析、原理图设计等方面都作了许多实际工作,取得了一些成绩,同时也遇到了一些问题,存在一些不足。
经过这次的学习,我觉得自己不论是在理论知识方面还是在动手能力方面都有了很大的进步,自己从中获益良多。
这次设计将以前学到的理论知识应用于实践项目,使我认识到理论知识与实践之间有一定的差距,但是通过不断的努力学习和实践就能很好的把理论知识应用到实践当中,也只有通过不断的实践才能对理论知识的理解。
通过这次设计我们查找许多相关的资料,并且通过查找资料和翻阅书籍学到了不少知识,扩大了知识面,提高了知识水平。
经过单元设计和系统设计巩固了以前所学的专业知识,自己真正认识到理论联系实际的重要性,为以后的学习和工作提供了很多有价值的经验。
通过这次设计不仅增强了自己的动脑能力和动手能力,也提高了我思考问题、分析问题、解决问题的能力,更重要的是学会用工程化的思想来解决问题。
这在以前的学习过程中是不曾学到的。
并且这次设计还使我认识到完整、严谨、科学分析问题、解决问题的思想是多么的重要,只有拥有了科学的态度才能设计出有用的产品。
。
为了使我们设计的系统更具人性化,电机的启动,使用了手动开关按键,电机的供电采用干电池供给,使用起来比较方便。
通常在不同的方式,不同的情况下都会有不同的收费标准;单程、白天和中途等待,考虑后首选用开关来实现这些切换功能,简单方便,同时显示器会显示相应的指示。
最大的方便了司机的计费控制。
并且能根据市场经济的变化而发生相应的跳动计价。
在设计和调试的过程中,也发现了一些问题,譬如计价的金额数有限,实际的里程可能会很远,会超出实际的显示范围;计价过程出现突然断电时如何处理这些问题,因此对此方案还可以进行进一步改进,如:
实现白天、晚上计费自动切换和具有记忆功能,也可以加上语音提示功能,防作弊功能等,这样可能会更让乘客放心乘坐出租车,并得到广泛的应用。
参考文献
[1]谭浩强著.C程序设计[M].北京:
清华大学出版社,2005
[2]余发山、王福忠编著.单片机原理及应用技术[M].中国矿业大学出版社,2008.6
[3]贾宗璞、许合利.C语言程序设计[M].中国矿业大学出版社,2007.2
[4]孙余凯.传感器应用电路300例[M].北京:
电子工业出版社,2008.
[5]田立.51单片机C语言程序设计快速入门[M].北京:
人民邮电出版社,2007
[6]霍尔传感器原理及其应用
[7]Proteus与Keil的使用及联调
附1:
系统仿真图
附2:
源程序代码
#include
#defineucharunsignedchar
#defineuintunsignedint
ucharqianwei,baiwei,shiwei,gewei;//显示数据各个位置数字的临时变量
charled_seg_code[10]={0x3f,0x06,0x05b,0x04f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//段码表示0-9
uinttt,aa,pulse,distance,cost,danjia,wait,way;//定义路程、价钱、等待时间及一些全局的变量等;
uchardengdai,second,minute;
//按键的定义,所有按键按下去为低电平
sbitkey0=P1^0;//清零
sbitkey1=P1^1;//切换路程与等待时间
sbitkey2=P1^2;//单程还是往返设置
sbitkey3=P1^3;//暂停按钮
sbitled1=P1^4;//指示
sbitled2=P1^5;
sbitled3=P1^6;
sbitled4=P1^7;
bitkey1_flag;//由于按键会自动复位,这个为标志位
bitkey2_flag;
bitkey3_flag;
bitflag;
//初始化函数
voidinitial_data(void)
{
distance=0;
cost=0;
second=0;
minute=0;
way=0;
key1_flag=1;//
key2_flag=0;//单程or往返,接指示灯;
key3_flag=1;//暂停,接指示灯;
flag=0;
pulse=0;
dengdai=0;
led1=1;//双程指示
led2=1;//暂停指示
led3=1;//堵车指示
led4=1;//等待时间切换标志
}
//暂停程序
voidzanting(void)
{
if(key3_flag)
{
EX0=0;//关闭中断定时器
TR0=0;
}
else
{
EX0=1;
TR0=1;
}
key3_flag=!
key3_flag;
}
//计算数据处理
voidjisuan()
{
if(pulse<=180)
{
distance=pulse/6+way/3000;
cost=50;//60角
}
danjia=20;//单程价格
if(key2_flag)danjia=15;//往返价格
if(pulse>180)
{
distance=pulse/6+way/3000;
cost=danjia*(distance-30)/10+50;
}
wait=minute*100+second;
}
//显示的辅助程序,分离一个数的各个数字
voidfenli(uinttemp)//数据的分离处理
{
if(temp>9999)temp=9999;
qianwei=temp/1000;
baiwei=temp/100%10;
shiwei=temp%100/10;
gewei=temp%10;
}
//延时约1ms,数码管显示时使用
voiddiplay_delay(void)
{
uchari;
for(i=0;i<240;i++);
}
//显示程序;
voidled_show()
{
//-----显示路程或者等待时间----
if(key1_flag)fenli(distance);
else
fenli(wait);
P2=0xfe;
P0=led_seg_code[gewei];
diplay_delay();
P2=0XFF;//消隐
P2=0xfd;
if(key1_flag)P0=led_seg_code[shiwei]|0x80;//如果是路程,点亮小数点儿
elseP0=led_seg_code[shiwei];//如果是时间,不需要点亮小数点儿
diplay_delay();
P2=0XFF;//消隐
P2=0xfb;
if(key1_flag)P0=led_seg_code[baiwei];
elseP0=led_seg_code[baiwei]|0x80;
diplay_delay();
P2=0XFF;//消隐
P2=0xf7;
P0=led_seg_code[qianwei];
diplay_delay();
P2=0XFF;//消隐
//-----显示价格----
fenli(cost);
P2=0xef;
P0=led_seg_code[gewei];
diplay_delay();
P2=0XFF;//消隐
P2=0xdf;
P0=led_seg_code[shiwei]|0x80;
diplay_delay();
P2=0XFF;//消隐
P2=0xbf;
P0=led_seg_c
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 出租车 计价器