出租车计价器课程设计论文文档格式.docx
《出租车计价器课程设计论文文档格式.docx》由会员分享,可在线阅读,更多相关《出租车计价器课程设计论文文档格式.docx(23页珍藏版)》请在冰豆网上搜索。
4.1、52单片机最小系统………………………………………………6
4.2、存储电路…………………………………………………………6
4.3、LED显示电路……………………………………………………7
4.4、按键控制电路……………………………………………………7
4.5、总原理图…………………………………………………………7
5、功能说明………………………………………………………9
5.1、中途等待服务程序………………………………………………9
6、结论与心得…………………………………………………………10
绪论
出租车计价器是出租车营运收费的专用智能化仪表,随着电子技术的发展,出租车计价器技术也在不断进步和提高。
国内出租车计价器已经经历了4个发展阶段。
从传统的全部由机械元器件组成的机械式,到半电子式即用电子线路代替部分机械元器件的出租车计价器;
再从集成电路式到目前的单片机系统设计的出租车计价器。
出租车计价器计费是否准确才是乘客最关心的问题,而计价器营运数据的管理是否方便才是出租车司机最关注的。
因此怎样设计出一种既能准确计价又能方便司机的计价器尤为重要。
因此,本文以单片机AT89S52为核心设计一款多功能出租车计价器,该计价器能实现按时间和里程综合计算车价,能显示时间、里程、单价、总车价等相关信息显示。
它比市场上的一些计价器使用更方便,功能更全,还具有系统稳定性好的优点。
1、本课题的研究目的及意义
随着我国经济的迅速发展,人民生活水平的显著提高,城市的交通日趋完善,出租车计价器的应用也越来越广泛。
虽然私家车的拥有量在大幅度地提高,但是出租车还是在我国的交通运输中承担着重要的角色,出租车计价器是出租车上必不可少的重要仪器,它是负责出租车营运收费的专用智能化仪表。
用户不仅要求计价器性能稳定、计价准确而且对它的要求也越来越高。
近年来,我国出租车行业迅猛发展,出租车已经成为我国城市公共交通的重要组成部分和现代化城市必备的基础设施,成为人们工作、生活中不可缺少的交通工具。
出租车服务行业和出租车计价器紧密相关,因为出租车必须安装出租车计价器才能投入营运。
出租车计价器是一种能根据乘客乘坐出租车行驶距离和等候时间的多少进行计价,并直接显示车费值的计量器具。
计价器是出租车的经营者和乘坐出租车的消费者之间用于公平贸易结算的工具,因而计价器计价准确与否,直接关系到经营者和消费者的经济利益。
依据国家有关法律、法规,出租车计价器是列入国家首批强制检定的工作计量器具之一,也是近年来国家质量技术监督部门强化管理的六类重点计量器具之一。
出租车计价器是乘客与司机双方的交易准则,它是出租车行业发展的重要标志,是出租车中最重要的工具。
它关系着交易双方的利益。
具有良好性能的计价器无论是对广大出租车司机朋友还是乘客来说都是很必要的。
因此,出租车计价器的研究也是十分有应用价值的。
2、出租车计价器的主要设计参数
本课题对出租车计价器的设计要求如下:
设计一个出租车自动计价器,计价包括起步价、行车里程计费、等待时间计费三部分,用数码管显示总金额,行驶公里数,起步价为6.0元,3km之内起步价计费,超过3km,每增加1km增加4.2元,等待时间单价为超过等待时间10秒钟1元。
并且可以重新设置白天、晚上和等待时间的单价。
2.1、计费功能
费用的计算是按行驶里程收费。
本设计可以手动调起步价格、行车里程计费单价(白天和晚上)、等待时间单价。
(1)当里程<
3km时,按起步价计算费用
(2)当里程>
3km时,白天按4.2元/km计费加起步价。
晚上按2.4元/km计费加起步价。
(3)等待累计时间>
10s时,按1元/min计费
2.2、显示功能
当电路电源接通后,LED数码管全部点亮。
前面4位数码管显示总价(起步价),中间2位显示里程,最后两位显示当前单价。
2.3、按键提供脉冲代替出租车行驶路程
本课题是出租车计价器系统的设计。
重点是设计出租车计价器的实用性,并尽量使最后的成品接近于商品。
整个系统是以89S52单片机为中心,采用按键脉冲对轮胎转数进行计数,实现对出租车里程的测量,并最终计算出结果。
3、设计方案
坐过出租车的人都知道,只要汽车一启动,随着行驶里程的增加,就会看到出租车前面的计价器里程数字显示的读数从零逐渐增大,而当行驶到某一值(如4km)计费数字显示开始从起步价(如8元)增加。
当出租车到达某地需要在那里等候时,司机只要按一下“计时”键,每等候一定的时间(如10分钟),计费显示就增加一个该收的等候费用(如每10分钟收取1.50元)。
出租车继续行驶时,停止计算等候费用,继续增加里程计费。
到达目的地,便可按显示的数字收费。
然后关闭计费器,对计数器清零,等待下次计费开始。
通过考虑,计费系统最终是安装在计程车上的,电源一般不是220V交流电压,而是有电瓶输出的直流电压,因此采用输入一个6~10V的直流电压,再稳压得到5V电压。
采用单片机技术,通过单片机作为主控器,利用数码管作为显示电路,采用外部晶振作为时钟脉冲,通过按键可以方便调节。
以下是系统流程图,如图2.3所示:
4、电路组成
本设计由52单片机最小系统、存储电路、按键控制电路、LED显示电路及脉冲计数等几部分组成。
4.1、52单片机最小系统
单片机最小系统包括单片机、晶振电路、复位电路等组成。
4.2、存储电路
无论是智能仪器仪表还是单片机工业控制系统都要求其数据能够安全可靠而不受干扰,特别是一些重要的设定参数(如温度控制设定值)受到干扰后变成一个很大的数字,那么就有可能发生烧箱毁物的破坏性后果,给生产和经济带来损失,因此必须选用可靠的24C02器件作为数据储存单元。
4.3、LED显示电路
由于发光二极管基本上属于电流敏感器件,其正向压降的分散性很大,并且还与温度有关,为了保证数码管具有良好的亮度均匀度,就需要使其具有恒定的工作电流,且不能受温度及其它因素的影响。
另外,当温度变化时驱动芯片还要能够自动调节输出电流的大小以实现色差平衡温度补偿。
而本设计出租车计费器,基本上只需要显示价钱与路程,利用数码管足够实现功能。
4.4、按键控制电路
SB1------返回键,SB2------上调键,SB3------下调键,SB4------设置键,SB5------脉冲触发键
4.5、总原理图
5、功能说明
图中使用“计数”按键代替了霍尔传感器,按键每按下一次,就会产生一个“模拟”脉冲,每5个脉冲为1公里。
电源刚接通时前4位数码管显示当前的起步价,前3公里价格不变,从第4公里开始,每公里增加一次单价。
若在10秒钟内,系统没有接收到脉冲信号,等待系统就会自行启动,每10秒增加一次等待单价。
所有价格都可以自行设定。
按键SB1为计价器清零键,即每按下一次,计价器前4位恢复为起步价,中间2位恢复为00,单价不变。
SB4键为设置键,按下后第3位数码管显示1,进入白天单价调整;
再次按下第3位数码管显示2,为夜间单价;
第3次按下为等待单价;
第4次为起步价,4种价格全部在最后2位数码管上显示出来。
设置完成后,再次按下SB4键,恢复到计价状态。
SB2键为上调键,另一个功能是在计价状态时按下后,可切换白天、夜晚单价。
SB3键为下调键。
5.1、中途等待服务程序
当在计数状态下开关没有输出信号,片内的定时器便被启动,每当计时到达一定时间,就对当前金额加上中途等待的单价,以后每10秒都自动加上中途等待的单价。
当中途等待结束的时候,就自动切换到正常的计价。
服务程序流程图如图4.1所示:
6、结论与心得
经过这一个星期来不懈的努力与奋斗,我终于在老师的指导下完成了我的课程设计,虽然它还有诸多需要完善的地方,但是拿着这件设计,我仍然有止不住的兴奋。
高兴之余,我仍需深思:
这件作品虽能初步解决出租车计算价钱的问题,但它仍有它的局限性,首先它不能自动调整黑天和白夜的单价转换,这个功能我需要以后的设计中努力完善,另外,如果配上语音效果那就更方便了司机和乘客,更加显示人性化和快捷化。
通过这次设计,我最大的收获就是自己的动手能力和独立解决问题的能力得到了很大的提高。
虽然遇到了不少困难,但当我通过查资料和翻阅书籍的同时也学到了不少的知识,扩大了知识面,提高了知识水平经过单元设计和系统设计巩固了以前所学的专业知识,从方案形成到准备电路图,到软件设计,到联机调试„„每一个小小的步骤,我都得到了很好的锻炼。
我学会了怎样有效的收集整合资料;
我学会了怎样细心地检查电路;
我学会了怎样虚心地寻求帮助;
我学会了我也明白了,很多书本上的东西光靠趴在书本上学是学不到其中的精髓的,我们必须亲自去试着实践了,亲自去经历失败了才能对它们真正的掌握。
理论必须联系实际,而实践试检验真理的唯一标准,我真正的懂得了这句话的真谛。
在我以后的工作和生活中,我从此可以汲取很多经验,凡事都要自己去动下手,去实践一下,遇到困难,要有耐心,有信心,有细心,有恒心,有虚心,只有这样,我才会在逆境中不断前进。
以后在学习与生活中我会更加的去努力,好好的去实现自己,理论与实际相互联系的分重要的,经过这次的课程设计,我学到了很多,对以后工作有很多帮助,这只是一个开始,以后会更加努力去做的更好。
附录:
#include<
reg51.h>
#include<
intrins.h>
#defineucharunsignedchar
#defineuintunsignedint
#definedelayNOP();
{_nop_();
_nop_();
};
ucharcodetable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
///0123456789
sbitexter=P3^3;
//外部中断
sbitkey0=P2^0;
//清零
sbitkey1=P2^1;
//切换/+
sbitkey2=P2^2;
//-
sbitkey3=P2^3;
//功能键
sbitp30=P3^0;
//数码管各位控制
sbitp31=P3^1;
sbitp32=P3^2;
sbitp300=P2^7;
//////改进程序四位数码管显示
sbitp34=P3^4;
sbitp35=P3^5;
sbitp36=P3^6;
sbitp37=P3^7;
sbitSDA=P1^3;
//IIC引脚,将P1.4口模拟数据口
sbitSCL=P1^4;
//IIC引脚,将P1.3口模拟时钟口
uintinter,aa,bb,temp,temp1;
uintzongjia,licheng,dengdai;
uintkey3num,qiehuantemp,delaytemp;
uchardanjia1,danjia2,danjia3,danjia,qibu;
//////////////////
voiddelay(uintx)//延时时基为1ms
{inti,j;
for(i=x;
i>
0;
i--)
for(j=340;
j>
j--);
}///延时函数
///////////////////////////////////////
//2402操作函数
//////////////////////////////////////
voidstart()//IIC开始位
{SDA=1;
SCL=1;
delayNOP();
SDA=0;
SCL=0;
}
voidstop()//IIC停止位
{SDA=0;
SDA=1;
}
voidrespons()//IIC应答位
{uchari;
SCL=1;
while((SDA==1)&
&
(i<
250))
i++;
SCL=0;
ucharread_byte()//从EEPROM读到MCU
{uchari,j;
for(i=0;
i<
8;
i++)
{SCL=1;
j<
<
=1;
//j左移一位
j|=SDA;
return(j);
voidwrite_byte(uchardate)//从MCU写到EEPROM
{
uchari,temp;
temp=date;
temp=temp<
1;
//temp等于将temp左移一位的值
SDA=CY;
SDA=1;
voidwrite_data(ucharaddr,uchardate)//在指定地址addr处写入数据date
start();
write_byte(0xa0);
respons();
write_byte(addr);
write_byte(date);
stop();
ucharread_data(ucharaddr)//在指定地址addr读取数据
uchardate;
write_byte(0xa1);
date=read_byte();
returndate;
///////////////////////////////////////////////////////////////////////24C02操作函数
///////价格显示
voiddisplay(uintzongjia0,uintlicheng0,uintdanjia0)
uintjqian,jbai,jshi,jge,lshi,lge,dshi,dge;
///加入千位
uintnumwei,numshu;
//数码管位置分配
jqian=(zongjia0/100)/10%10;
jbai=(zongjia0/100)%10;
//数码管显示总价百位
jshi=zongjia0%100/10;
//数码管显示总价十位
jge=zongjia0%100%10;
//数码管显示总价个位
lshi=licheng0/10;
//数码管显示里程十位
lge=licheng0%10;
//数码管显示里程个位
dshi=danjia0/10;
//数码管显示单价十位
dge=danjia0%10;
//数码管显示单价个位
if(aa)
aa=0;
numshu++;
if(numshu==8)//7个数码管扫描完毕
numshu=0;
P3=0xff;
//数码管全灭
p300=1;
switch(numwei)
case1:
p30=0;
P0=table[jbai];
break;
case2:
p31=0;
P0=table[jshi]|0x80;
///.
case3:
p32=0;
P0=table[jge];
case4:
p34=0;
P0=table[lshi];
case5:
p35=0;
P0=table[lge];
case6:
p36=0;
P0=table[dshi]|0x80;
///.
case7:
p37=0;
P0=table[dge];
case0:
p300=0;
P0=table[jqian];
numwei++;
if(numwei==8)
numwei=0;
//////////////////////////
voidkeyscan()
if(key3==0)//判断功能调节键是否按下
{
delay(5);
//延时5秒消抖
if(key3==0)//如果功能调节键按下
{
key3num=1;
//功能键按下1次
while(!
key3);
//键弹起
//延时5秒
while(key3num)
{
if(key3num==1)//key3按1次调白天单价
{
if(key1==0)//判断key1是否按下
{
if(key1==0)//如果key1按下
{
danjia1++;
//单价加1
if(danjia1==100)//加到100
danjia1=0;
//给单价赋0
key1);
}
}
if(key2==0)//判断key2是否按下
if(key2==0)//如果key2按下
{
danjia1--;
//单价减1
if(danjia1==-1)//单价减到-1
danjia1=99;
//令单价等于99
key2);
}
display(1,0,danjia1);
//数码管显示单价
if(key3num==2)//key3按2次调夜晚单价
write_data(1,danjia1);
//存单价1
if(key1==0)
delay(5);
danjia2++;
if(danjia2==100)
danjia2=0;
while(!
if(key2==0)
danjia2--;
if(danjia2==-1)
danjia2=99;
display(2,0,danjia2);
if(key3num==3)//key3按3次调等待单价
write_data(2,danjia2);
//存单价2
danjia3++;
if(danjia3==100)
danjia3=0;
danjia3--;
if(danjia3==-1)
danjia3=99;
display(3,0,danjia3);
if(key3num==4)//key3按4次调起步价
write_data(3,danjia3);
//存单价3
qibu++;
if(qibu==100)
qibu=0;
qibu--;
if(qibu==-1)
qibu=99;
display(4,0,qibu);
if(key3num==5)//key3按5次退出功能键
write_data(4,qibu);
//存单价4
key3num=0;
if(key3==0)
key3num++;
key3)