出租车自动计费器设计资料.docx
《出租车自动计费器设计资料.docx》由会员分享,可在线阅读,更多相关《出租车自动计费器设计资料.docx(20页珍藏版)》请在冰豆网上搜索。
出租车自动计费器设计资料
郑州轻工业学院
单片机课程设计
题目出租车自动计费器设计
学生姓名
专业班级电子信息工程级班
学号
院(系)电子信息工程
指导教师
完成时间2015年1月9日
郑州轻工业学院
课程设计任务书
题目出租车自动计费器设计
专业、班级电子信息工程专业学号姓名
主要内容、基本要求、主要参考资料等:
一、主要内容:
(1)熟悉单片机应用系统的设计方法和规范,达到综合的目的。
(2)学习文件检索和查找数据手册的能力。
(3)学习protel软件的使用。
二、基本要求:
(1)以MCS-51系列单片机为核心,设计出租车自动计费器。
(2)设计一个出租车自动计费器,具有行车里程计费、等候时间计费及起价三部分,用四位数码管显示总金额,最大值为99.99元。
(3)行车里程单价1元/公里,等候时间单价0.5元/10分钟,起价3元(3公里起价)均能通过人工输入。
(4)行车里程的计费以一个脉冲模拟汽车前进十米。
(5)用LED显示行驶公里数和收费金额。
三、主要参考资料:
(1)李金平,沈明山.电子系统设计[M].北京:
电子工业出版社,2007
(2)阎石.数字电子技术基础[M].第五版.北京:
高等教育出版社,2004
完成期限:
指导教师签名:
课程负责人签名:
年月日
目录
中文摘要I
英文摘要II
1系统整体的方案1
2出租车计价器的硬件构成1
2.1单片机模块2
2.2显示模块6
2.3测距模块6
3出租车计价器的程序设计7
3.1系统主程序设计7
3.2里程计算的设计8
3.3显示程序的设计9
设计总结10
致谢11
参考文献12
附录13
出租车自动计费器设计
摘要
随着出租车行业的发展,出租车已经是城市交通的重要组成部分,出租车计价器是乘客与司机双方的交易准则,它是出租车行业发展的重要标志,是出租车中最重要的工具。
它关系着交易双方的利益。
具有良好性能的计价器无论是对广大出租车司机朋友还是乘客来说都是很必要的。
因此,汽车计价器的研究也是十分有一个应用价值的。
而随着单片机性能不断提高而价格不断下降,单片机控制在越来越多的领域得以应用。
本设计的是一个基于单片机AT89C52的出租车自动计费设计,附有复位电路,时钟电路,键盘电路等。
复位电路是单片机的初始化操作,除了正常的初始化外,为摆脱困境,通过复位电路可以重新开始。
时钟电路采用12MHz的晶振,作为系统的时钟源,具有较高的准确性。
关键字单片机/数码管/显示/计费
THETAXIAUTOMATICMESSAGEACCOUNTINGDESIGN
ABSTRACT
Alongwiththedevelopmentofthetaxiindustry,taxihasbeenanimportantpartofurbantraffic,themetertaxipassengersandthedriverisonbothsidesofthetraderules,itisanimportantsymbolofthetaxiindustrydevelopment,isthemostimport-anttoolsinthetaxi.Itwasabouttheinterestsofbothparties.Havegoodperformanceofthemetertothetaxidriverfriendorpassengersisverynecessary.Therefore,thestudyoftheautometerisalsoveryhasanapplicationvalue.Andwiththemicrocon-trollerperformancerisingandfallingprices,single-chipmicrocomputercontrolbythemoreandmoreapplications.ThisdesignisataxibillingdesignbasedonsinglechipmicrocomputerAT89C52,resetcircuit,clockcircuit,keyboardcircuit,etc.Isresetcircuitofsinglechipmicrocomputerinitializationoperation,inadditiontothenormalinitialnon-greeks,foroutofthewoods,byresetcircuitcanstartagain.Theclockcircuitadopts12MHZcrystalvibration,asthesystemclocksource,hashigheraccuracy.
KEYWORDSsinglechip,nixietube,show,billing
1系统整体的方案
计价器显示的营运金额是营运里程与价格的函数(等候时间一般折算成一定比例的里程来计算)。
出租车计价器通过传感器与行驶车辆连接。
出租汽车的实际里程通过传感器的脉冲信号在计价器里折算成一定的计价营运里程。
针对这一点利用单片机作为控制核心,设计一款出租车计价器,具有计价显示、等待时间计价,公里数显示,时间显示等相关功能。
本电路设计的计价器不但能实现基本的计价。
单片机计算总价的公式为:
总价=起步价+单价*(总里程-起步里程)。
AT89C52作为一个单片微型计算系统,灵活性高,其强大的控制处理功能和可扩展功能为设计电路提供了很好的选择。
2出租车计价器的硬件构成
本设计由软硬件相结合的方法,其中硬件设计主要包括单片机AT89C52、数据显示部件、模拟行驶路程单元、及计价单元的设计。
计价器的单片机控制方案图如图1单片机控制方案图所示。
89C52
单片机
键盘控制
里程计算单元
图1单片机控制方案图
2.1单片机模块
AT89C52是一种带4K字节闪烁可编程可擦除只读存储器的低电压、高性能CMOS8位微处理器,俗称单片机。
单片机的可擦除只读存储器可以反复擦除100次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的89C52是一种高效微控制器。
AT89C2052是它的一种精简版本,AT89C2052是美国ATMEL公司生产的低电压,高性能CMOS8位单片机,片内含2K字节的可反复擦写的只读程序存储器和128bytes的随机存取数据存储器,器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元。
因为在的程序中有读取、计算、显示等单元,2K字节的ROM可能不够,因此我们采用AT89C52作为单片机模块。
2.1.1AT89C52单片机及其引脚说明
AT89C52是美国ATMEL公司生产的低功耗,高性能CMOS8位单片机,片内含4KB的可系统编程的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准8051指令系统及引脚。
它集Flash程序存储器既可在线编程(ISP)也可用传统方法进行编程及通用8位微处理器于单片芯片中,具有高性价比。
AT89C52是一个有40个引脚的芯片,引脚配置如图2AT89C52引脚配置所示。
图2AT89C52引脚配置
AT89C52芯片的40个引脚功能为:
VCC电源电压。
GND接地。
RST复位输入。
当RST变为高电平并保持2个机器周期时,将使单片机复位。
WDT溢出将使该引脚输出高电平,设置SFRAUXR的DISRTO位(地址8EH)可打开或关闭该功能。
DISKRTO位缺省为RESET输出高电平打开状态。
XTAL1反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2来自反向振荡放大器的输出。
P0口一组8位漏极开路型双向I/O口。
也即地址/数据总线复用口。
作为输出口用时,每位能驱动8个TTL逻辑门电路,对端口写“1”可作为高阻抗输入端用。
在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。
在Flash编程时,P0口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。
P1口一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。
作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。
Flash编程和程序校验期间,P1接收低8位地址。
P1口部分端口引脚及功能如表1所示。
P1口引脚
特殊功能
P1.5
MOSI(用于ISP编程)
P1.6
MOSI(用于ISP编程)
P1.7
SCK(用于ISP编程)
表1P1口特殊功能
P2口一个带内部上拉电阻的8位双向I/O口。
P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。
作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。
在访问外部程序存储器或16位地址的外部数据存储器时,P2口送出高8位地址数据。
在访问8位地址的外部数据存储器时,P2口线上的内容在整个访问期间不改变。
Flash编程和程序校验期间,P2亦接收低8位地址。
P3口一个带内部上拉电阻的8位双向I/O口。
P3的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对P3口写“1”时,它们被内部的上拉电阻把拉到高电并可作输入端口。
作输入端口使用时,被外部拉低的P3口将用上拉电阻输出电流(IIL)。
P3口除了作为一般的I/O口线外,更重要的用途是它的第二功能,如表2所示。
P3口还接收一些用于Flash闪速存储器编程和程序校验期间的控制信号。
P3口引脚
特殊功能
P3.0
RXD(串行输入口)
P3.1
TXD(串行输出口)
P3.2
(外部中断0)
P3.3
(外部中断1)
P3.4
T0(定时器0外部输入)
P3.5
T1(定时器1外部输入)
P3.6
(外部数据存储器写选通)
P3.7
(外部数据存储器读选通)
表2P3口特殊功能
PSEN/程序储存允许输出是外部程序存储器的读先通信号,当AT89S51由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN/有效,即输出两个脉冲。
当访问外部数据存储器,没有两次有效的PSEN/信号。
EA/VPP外部访问允许。
欲使CPU仅访问外部程序存储器,EA端必须保持低电平,需注意的是:
如果加密位LB1被编程,复位时内部会锁存EA端状态。
Flash存储器编程时,该引脚加上+5V的编程电压VPP。
2.2显示模块
本设计是用八个八段数码管动态扫描来实现的计价的显示。
七段LED数码管引脚图如下图:
图3LED管脚配置图
LED显示块是由发光二极管显示字段的显示器件。
在单片机应用系统中通常使用的是七段LED。
这种显示块有共阴极和共阳极两种,如上图所示,共阴极LED显示块的发光二极管阴极共地,如图中所示,当某个发光二极管的阳极为高电平时,发光二极管点亮。
共阳极LED显示块的发光二极管阳极并接,当某个二极管的阴极为低电平时,该二极管点亮。
2.3测距模块
本次设计我们选取了霍尔传感器来进行里程测量。
霍尔器件是一种磁传感器。
用它们可以检测磁场及其变化,可在各种与磁场有关的场合中使用。
霍尔器件以霍尔效应为其工作基础。
霍尔器件具有许多优点,它们的结构牢固,体积小,重量轻,寿命长,安装方便,功耗小,频率高,耐震动,不怕灰尘、油污、水汽及盐雾等的污染或腐蚀。
霍尔器件分为:
霍尔元件和霍尔集成电路两大类,前者是一个简单的霍尔片,使用时常常需要将获得的霍尔电压进行放大。
后者将霍尔片和它的信号处理电路集成在同一个芯片上。
本次设计选取了霍尔集成电路来测量里程。
里程测量是通过将霍尔传感器的集成电路安装在车轮上方的铁板上,将磁铁安装在车轮上,旋转的车轮将磁铁对准集成电路时,霍尔传感器会输出一个脉冲信号,送到单片机,经过单片机的计算处理,将行驶的里程送到显示单元并显示出来。
其原理示意图如下:
图4传感器测距示意图
3出租车计价器的程序设计
3.1系统主程序设计
在主程序模块中,需要完成对各接口芯片的初始化、出租车起价和单价的初始化、中断向量的设计以及开中断、循环等待等工作。
另外,在主程序模块中还需要设置启动/清除标志寄存器、里程寄存器和价格寄存器,并对它们进行初始化。
然后,主程序将根据各标志寄存器的内容,分别完成启动、清除、计程和计价等不同的操作。
主程序流程图如图6所示。
当按下S1时,就启动计价,将根据里程寄存器中的内容计算和判断出行驶里程是否已超过起价公里数。
若已超过,则根据里程值、每公里的单价数和起价数来计算出当前的累计价格,并将结果存于价格寄存器中,然后将时间和当前累计价格送显示电路显示出来。
当到达目的地的时候,由于霍尔开关没有送来脉冲信号,就停止计价,显示当前所应该付的金额和对应的单价,到下次启动计价时,系统自动对显示清零,并重新进行初始化过程。
图5主程序流程图
3.2里程计算的设计
计算程序根据里程数分别进入不同的计算公式。
如果里程大于3公里,则执行公式:
总金额=起步价+(里程-3)*单价;否则,执行公式:
总金额=起步价。
图6里程计算流程图
3.3显示程序的设计
显示程序利用定时器每1ms产生一次中断,相应变量置位,点亮一个数码管,显示一位数据,利用主函数内的循环,实现动态扫描显示,同时根据数码管余辉和人眼暂留现象,即可实现显示。
设计总结
总结在本次设计中,我们采用AT89C52芯片为核心器件,设计出了简单的出租车计价器,能够实现显示时间、等待时间、金额和里程,按键控制,空车指示。
选题后,我们便开始复习单片机方面的知识,也查阅、搜索了很多相关资料,进行总体设计与具体设计。
由于以前都采用汇编语言实现编程,对用C语言来实现单片机的编程不太习惯,花费了一些时间来熟悉C语言的编程。
在设计开始,要形成流程图,它可以使设计有一定的逻辑性与严密性,使得设计思路明确。
采用模块化的设计思想很重要,它方便编写、修改与调试,另外加上必要的注释,便于交流与理解。
这次课程设计设计完成后,体会颇多,在学与做的过程中,取长补短,不断学习新的知识,吸取经验,达到进步的目的。
通过自身的努力以及相关图书资料的帮助,逐渐熟悉了KeiluVision3和C语言等软件的使用。
本次设计我学习到不少单片机的知识,但由于自己的理论知识水平有限,实践知识和设计经验不足,在设计过程中难免存在一些问题。
主要原因是考虑问题不周全,电路设计经验少,实际动手能力不足。
恳请各位老师批评指正,以使我在以后的学习和实践中加以改进和提高。
致谢
大四的这次课程设计,无论在知识还是能力方面,我从中受益匪浅,使我们真正地学会了如何正确地使用各种电子元器件,并在完成之后,进行验证设计是否合格,并一步一步地检测调试直至测试程序能够正常运行,各种功能得以实现。
同时九人一组,也增强了我们的团队协作能力,是我们认识到团队精神是成功的必不可缺的法宝。
在此我要向帮助我的指导老师耿鑫耿老师表示衷心的感谢!
课程设计中,有不懂的地方您总能不厌其烦、和蔼可亲地讲解,让我感受到您们的敬业和对学生们的关爱。
同时要感谢同学们的帮助!
他们的帮助让我的这次课程设计进行的相当顺利,并从中获益颇多。
最后再次感谢耿老师的悉心指导!
使我掌握到了焊接设计、调试等方面的本领,并再次感谢帮助过我的同学,使我感到了他们的对人无私帮助的温暖。
参考文献
[1]华成英,童诗白.模拟电子技术基础[M].第五版.北京:
清华大学出版社,2006
[2]阎石.数字电子技术基础[M].第五版.北京:
高等教育出版社,2004
[3]李金平,沈明山.电子系统设计[M].北京:
电子工业出版社,2007
[4]潘永雄,沙河.电子线路CAD使用教程[M].西安:
西安电子科技大学出版社,2007
[5]谭浩强.MCS-51单片机应用教程[M].北京:
清华大学出版社,2004
[6]刘海成.单片机及应用系统设计原理与实践[M].北京:
北京航空航天大学出版社,2009
[7]李朝青.单片机原理及接口技术[M].第三版.北京:
北京航空航天大学出版社,2005
[8]梁晓雯.电子系统设计基础[M].第三版.北京:
中国科学技术大学出版社,2008。
附录
附录1总体设计电路图
附录2源程序
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
#defineON1
#defineOFF0
sbitled1=P3^3;
sbitled2=P3^4;
sbitkey1=P1^0;
sbitkey2=P1^1;
sbitkey3=P1^2;
ucharSwitch=OFF;
ucharNight=OFF;
ucharnum,num1,t;
uintViameter=0,Money=0;
uintdat[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
voidmain()
{
TMOD=0x01;
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
EA=1;
EX0=1;
IT0=1;
while
(1)
{
key();
DisV();
DisM();
}
}
VoidT0_time()interrupt1
{
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
num++;
if(num==20)
{
num=0;
num1++;
if(num1==60)
t++;
}
}
voidDelay(uinti)
{
do
{
i-=1;
}
while(i);
}
voidkey()//按键定义;
{
if(key1==0)
{
Delay(5);
if(key1==0)
{
while(!
key1);
{
Viameter++;
if(Viameter<=300)
Money=3;
else
Money=3+(Viameter-300)/100;
}
}
}
elseif(key2==0)
{
Delay(5);
if(key2==0)
{
while(!
key2);
Viameter+=t*0.5;
}
}
elseif(key3==0)
{
Delay(5);
if(key3==0)
{
while(!
key3);
if(Night==ON)
{
Money+=2;
}
}
}
}
voidDisV()//里程定义;
{
uintge,shi,bai,qian;
qian=(Viameter*10)/1000;
bai=(Viameter*10)%1000/100;
shi=(Viameter*10)%100/10;
ge=(Viameter*10)%10;
P2=0x01;
P0=dat[qian];
Delay(100);
P2=0x02;
P0=(dat[bai]&0x7f);
Delay(100);
P2=0x04;
P0=dat[shi];
Delay(100);
P2=0x08;
P0=dat[ge];
Delay(100);
}
voidDisM()//价格定义;
{
uintshi,ge,sf,bf;
shi=Money/10;
ge=Money%10;
sf=Money*10%10;
bf=Money*100%10;
P2=0x10;
P0=dat[shi];
Delay(100);
P2=0x20;
P0=dat[ge];
Delay(100);
P2=0x40;
P0=(dat[sf]&0x7f);
Delay(100);
P2=0x80;
P0=dat[bf];
Delay(100);
}
附录3元件清单
类型
名称
数量
类型
名称
数量
电阻
10K
3
单片机
89C52
1
电容
10uF
3
晶振
12M
1
30pF
2
排阻
102
1
按键
4
共阳数码管
2