出租车计价器的设计与实现课程设计.docx
《出租车计价器的设计与实现课程设计.docx》由会员分享,可在线阅读,更多相关《出租车计价器的设计与实现课程设计.docx(45页珍藏版)》请在冰点文库上搜索。
出租车计价器的设计与实现课程设计
附件1:
学号:
0121109310631
课程设计
题目
出租车计价器的设计与实现
学院
信息工程学院
专业
通信工程
班级
姓名
指导教师
2013年7月5日
课程设计任务书
学生姓名:
专业班级:
指导教师:
工作单位:
信息工程学院
题目:
出租车计价器的设计与实现
初始条件:
本设计既可以使用集成译码器、计数器、定时器、脉冲发生器和必要的门电路等,也可以使用单片机系统构建多功能数字钟。
用数码管显示行驶里程、停车时间和计费值。
要求完成的主要任务:
(包括课程设计工作量及技术要求,以及说明书撰写等具体要求)
1、课程设计工作量:
1周。
2、技术要求:
1)设计一个出租车计价器。
要求用4位数码管显示行驶里程、停车时间和计费值,采用按键切换显示物理量。
2)出租车的起步价为3元,当里程行驶到1km后,费用为4元;当里程行驶到1.5km后,费用为5元;,当里程行驶到2km后,费用为6元;当里程行驶到2.5km后,费用为7元;当里程行驶到3km后,费用为8元;此后每公里计费为0.7元/0.5km。
停车每达3分钟,增加0.7元。
3)具有秒、分为60进制计数功能,能显示分、秒停车状态的计时结果,格式为:
00:
00min。
。
按照轮胎转动1圈为1m计算,计算并显示行驶的里程结果,格式为:
000.0km。
能显示乘车费用,格式为:
000.0元。
4)确定设计方案,按功能模块的划分选择元、器件和中小规模集成电路,设计分电路,画出总体电路原理图,阐述基本原理。
3、查阅至少5篇参考文献。
按《武汉理工大学课程设计工作规范》要求撰写设计报告书。
全文用A4纸打印,图纸应符合绘图规范。
时间安排:
1、2103年5月16日,布置课设具体实施计划与课程设计报告格式的要求说明。
2、2013年6月25日至2013年6月28日,方案选择和电路设计。
3、2013年6月29日至2013年7月3日,电路调试和设计说明书撰写。
4、2013年7月5日,上交课程设计成果及报告,同时进行答辩。
指导教师签名:
年月日
系主任(或责任教师)签名:
年月日
摘要
出租车计价器是乘客与司机双方的交易准则,它是出租车行业发展的重要标志,是出租车中最重要的工具。
它关系着交易双方的利益。
具有良好性能的计价器无论是对广大出租车司机朋友还是乘客来说都是很必要的。
因此,汽车计价器的研究也是十分有一个应用价值的。
而采用模拟电路和数字电路设计的计价器整体电路的规模较大,用到的器件多,造成故障率高,难调试,对于模式的切换需要用到机械开关,机械开关时间久了会造成接触不良,功能不易实现。
而采用单片机进行的设计,相对来说功能强大,用较少的硬件和适当的软件相互配合可以很容易的实现设计要求,且灵活性强,可以通过软件编程来完成更多的附加功能。
针对计费模式的切换,通过软件编程就可以轻易而举的实现。
避免了机械开关带来的不稳定因素。
另外在本方案中使用了四位数码管,可以实现更加友好的使用界面数据信息一目了然。
关键词:
出租车计价器单片机控制
Abstract
Taximeterisbothpassengersanddriversofthetransactioncriteria,itisthetaxiindustryanimportantsymbol,itisthemostimportanttool.Itrelatestotheinterestsofbothtransactions.Havingagoodperformanceregardlessofthemeterisavastnumberoftaxidriversorpassengersareverynecessary.Therefore,thecarmeterisalsoastudyofverymuchvalue.Theuseofanalogcircuitsanddigitalcircuitdesignofthemeterasawholecircuitofalargerscale,usingthedevice,afailurerateishighanddifficulttodebug,thepatternofswitchingneedtousemechanicalswitches,mechanicalswitchwillcausealong-timecontactsbad,functionsnoteasytoachieve.SCMusedforthedesign,relativelypowerful,withlesshardwareandappropriatesoftwarecaneasilycoordinatewitheachothertoachievethedesignrequirements,flexibilityandstrong,canbeprogrammedbysoftwaretocompletemoreoftheadditionalFunction.Pricingmodelfortheswitch,softwareprogrammingandcaneasilycitetheachievement.Toavoidamechanicalswitchthedestabilizingfactors.Alsointhisprogrammethattheuseofadot-matrixLCD,canbefriendliertouseinterface.Datainformationataglance,andeventhefinishedproductcanalsofacilitatetheuseofinterfacechanges,accordingtodifferentcustomersusingadifferentsituation.
Keywords:
Taximeter89S52MCUcontrol
1系统方案设计与论证
1.1系统方案设计
方案一:
采用数字电路控制,其实现方案框图,数字电路实现方案图,如图1-2所示。
采用传感器件,输出脉冲信号,经过放大整形作为移位寄存器的脉冲,实现计价。
采用传感器件,输出脉冲信号,经过放大整形作为移位寄存器的脉冲,实现计价,但是考虑到这种电路过于简单,性能不够稳定,而且电路不够实用。
模拟电路和数字电路设计的计价器整体电路的规模较大,用到的器件多,造成故障率高,难调试,对于模式的切换需要用到机械开关,机械开关时间久了会造成接触不良,功能不易实现。
图1-1数字电路实现方案框图
方案二:
采用单片机控制。
利用单片机丰富的I/O端口,及其控制的灵活性,实现基本的里程计价功能,途中等待等不同功能[4]。
采用单片机控制。
利用单片机丰富的I/O端口,及其控制的灵活性,有较大的活动空间,便于修改。
不但能实现基本的里程计价功能和价格调节、显示功能,而且能在很大的程度上扩展功能,还可以方便的对系统进行升级。
为此我们采用了单片机进行设计,相对来说功能强大,用较少的硬件和适当的软件相互配合可以很容易的实现设计要求。
单片机控制实现方案框图,如图1-2所示。
图2-2单片机控制实现方案框图
1.2系统方案论证
采用模拟电路和数字电路设计的计价器整体电路的规模较大,用到的器件多,造成故障率高,难调试,对于模式的切换需要用到机械开关,机械开关时间久了会造成接触不良,功能不易实现。
为此我们采用了单片机进行设计,相对来说功能强大,用较少的硬件和适当的软件相互配合可以很容易的实现设计要求,且灵活性强,可以通过软件编程来完成更多的附加功能。
综上对比,采用方案一数字电路设计的计价器整体电路的规模较大,用到的器件多,造成故障率高,难调试,对于模式的切换需要用到机械开关,机械开关时间久了会造成接触不良,功能不易实现。
而方案二单片机有较大的活动空间,利用单片机丰富的I/O端口,及其控制的灵活性,不但能实现基本的里程计价功能和价格调节、时钟显示功能,而且能在很大的程度上扩展功能,还可以方便的对系统进行升级。
采用了单片机进行设计,相对来说功能强大,用较少的硬件和适当的软件相互配合可以很容易的实现设计要求。
因此采用方案二作为本次设计的实现方案。
2系统原理与设计
2.1系统硬件设计
单片机控制模块设计
本设计中,采取单片机最小系统作为系统中的控制模块。
单片机最小系统,是指能维持单片机运行的最简单配置的系统。
这种系统成本低廉、结构简单,常用来构成简单的控制系统。
图2-1单片机控制模块电路图
AT89S52的管脚结构图及管脚说明:
VCC:
供电电压。
GND:
接地。
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FLASH编程时,P0口作为原码输入口,当FLASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89C51的一些特殊功能口,如表3-1所示:
P3口管脚备选功能
P3.0RXD(串行输入口)
P3.1TXD(串行输出口)
P3.2/INT0(外部中断0)
P3.3/INT1(外部中断1)
P3.4T0(记时器0外部输入)
P3.5T1(记时器1外部输入)
P3.6/WR(外部数据存储器写选通)
P3.7/RD(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
图2-2AT89S52管脚结构图
表2-1AT89S52部分引脚功能表
端口引脚
复用功能
P3.0
RXD(串行输入口)
P3.1
TXD(串行输出口)
P3.2
/INT0(外部中断0)
P3.3
/INT1(外部中断1)
P3.4
T0(定时器0的外部输入)
P3.5
T1(定时器1的外部输入)
P3.6
/WR(外部数据存储器写选通)
P3.7
/RD(外部数据存储器读选通)
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
/PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA/VPP:
当EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出。
时钟电路
AT89S52中有一个用于构成内部振荡器的高增益反相放大器,引脚XTAL1和XTAL2分别为该放大器的输入端和输出端。
这个放大器与作为反馈元件的片外石英晶体或8051单片机的时钟信号通常用两种电路形式得到:
内部振荡方式和外部振荡方式。
本设计主要是用内部振荡方式完成的[9]。
在引脚XTAL1和XTAL2外接晶体振荡器(简称晶振)或陶瓷谐振器,就构成了内部振荡方式。
由于单片机内部有一个高增益反相放大器,当外接晶振后,就构成了自激振荡器并产生振荡时钟脉冲。
晶振频率,以19.2K波特率为例,19.2K波特率的晶振为
19200×(256-0FDH)×384×2=11.0592(SMOD=1)
选用11.0592MHz只是为了得到精确的通信波特率,串口通信的可靠性高。
外接石英晶体及电容C2、C3接在放大器的反馈回路中构成并联谐振电路,起稳定振荡频率、快速起振的作用。
对外接电容C2、C3虽然没有十分严格的要求,但电容容量的大小会轻微影响振荡频率的高低、振荡器工作的稳定性、起振的难易程度及温度的稳定性,一般在20~60pF之间选择,本次采用22pF[10]。
时钟电路设计图,如图2-3所示。
图2-3时钟电路设计图
复位电路
单片机有一个复位引脚RST,它是施密特触发输入,当振荡器起振后,该引脚上出现2个机器周期以上的高电平,使器件复位,只要RST保持高电平,单片机保持复位状态[11]。
此时ALE、PSEN、P0、P1、P2、P3口都输出高电平。
RST变为低电平后,退出复位,单片机从初始状态开始工作。
对于复位电路,本设计采用上电复位电路,由于89C51是高电平复位,因此通过在RESET端接一个电阻到地,并接一个电容到电源的方式完成上电复位,上电时电源给电容充电,电容导通,因此RESET脚就相当于连接到+5V电源,开始复位,当电容充电完成后,电容断开,RESET脚被下拉电阻钳位在低电平,则退出复位状态。
复位电路设计图,如图2-4所示。
复位电路连接图如下
图2-4复位电路设计图
单片机在启动运行时都需要进行复位操作,以便使CPU和系统中的其它部件都处于某一确定的初始状态,并从这个状态开始工作。
AT89C51单片机有一个引脚RST,它是施密特触发器的输入端,其输出端接复位电路的输入。
复位信号是高电平有效,其有效时间应持续24个振荡脉冲周期(即二个机器周期)以上,若使用频率为6MHz的晶振,则复位信号持续时间应超过4μs才能完成复位操作。
复位之后,使ALE、PSEN、P0、P1、P2口的输出均为高电平(即为输入状态),复位后,内部寄存器的状态如表3、1所示。
RST变为低电平后,便又退出复位状态。
CPU从初始化工作,由状态表可知,复位后:
程序寄存器为0000H开始执行程序,内部RAM不受复位影响。
复位有电复位和按键手动复位两种。
按键手动复有电平方式和脉冲方式两种。
本次设计中,为方便人的操作,采用按键手动复位的按键电平复位。
其复位电路如下表示:
表2-2复位电路表
PC
0000H
TCON
00H
ACC
00H
TL0
00H
PSW
00H
TH0
00H
SP
07H
TL1
00H
DPTR
0000H
TH1
00H
P0-P3
0FFH
SCON
00H
IP
XX000000H
SBUF
00H
IE
0X000000H
PCON
不定
TMOD
00H
0XXX0000B
键盘调整模块设计
本设计中需要用到2个按键,驱动键盘,由于单片机的内部上拉,按键没按下时,处于稳定的高电平,当有按键按下时,单片机可扫描检查到低电平。
而不会引起按键的误操作,提高按键电路的抗干扰能力。
电路原理如图所示。
图2-5键盘调整模块
S1:
触发开关,接P1.1口,对上一次的计费进行清零,为下次载客准备
S2:
单掷开关,接P1.2口,实现暂停功能;当功能键S2按下时,开始暂停计费;直到S2弹起时,暂停结束。
需要注意的时,当按键按下和释放的瞬间都有抖动现象,一般来说,抖动的时间长短与键盘的机械特性有关,大约为5-10ms。
所以在实际编程时一定要注意键盘的去抖动。
键盘去抖动有专用的延时电路,也有专门的延时芯片,也可以用软件去抖,考虑到电路的难易程度,从简化硬件的角度,本次设计采用软件去抖动,用一个短延时程序,进行键盘去抖操作。
数据显示模块设计
本设计中采用四位一体共阴的数码管,数码管的位选信号即每个数码管的公共端,用单片机一组I/O口作为数据口向数码管发送数据信息,而用另一组I/O口对数码管进行位选,通过同相电平驱动芯片74HC573驱动,从而实现动态显示。
由于是共阴的数码管,因此当P2.0-P2.7输出为高电平时,数码管位选位被关闭,当P2.0-P2.3输出为低电平时,数码管位选位被打开。
前四个数码管分别接P2.0、P2.1和P2.2、P2.3,用于显示总金额;后面分别接P2.4、P2.5、P2.6和P2.7,用于显示里程。
数码管显示电路图,如图3-6所示。
图2-6数据显示模块数码管部分
数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。
通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。
在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果能够节省大量的I/O端口,而且功耗更低。
图2-7数据显示模块74HC573驱动部分
显示单元由两个4位8段共阴数码管组成,电路连接时,公共端接低电平,由于数码管内部二极管点亮时需要5mA以上的电流,而单片机的输出电流还不到1mA,所以数码管与单片机连接时需加驱动电路,可以使用上拉电阻的方法,也可以使用专门的驱动芯片,考虑到复用单片机I/O接口,节省单片机I/O资源,此次设计采用74HC573锁存器,其输出电流较大,电路接口简单且可直接驱动数码管显示。
74HC573的引脚分布图2-6如下。
图2-1074HC573的引脚分布
:
为三态允许输入端(低电平有效),也可称作输出允许端;1D-8D为数据输入端;
1Q-8Q为数据输出端;LE为锁存允许端。
74HC573所对应真值表2-10如表。
表2-1074HC573真值表
INPUT
OUTPUT
LED
Q
LHL
LLX
HXX
H
Q0
Z
由真值表可以看出,当为高电平时,无论LE与D端为何电平状态,其输出均为高阻态,此时芯片处于不可控状态。
做设计时必须使其处于可控状态,即应该接低电平。
当为低电平时,若LE为H,则D与Q同时为H或者L,数据实现直通传送;而当LE为L时,无论D为何状态Q都保持上一次的数据状态,数据被锁存住,利用此特性即可实现对数码管的控制。
其中:
H—高电平;L—低电平;X—任意电平;Z—高阻态,既不是高电平也不是低电平,其电平状态由与它相连接的其它电气状态决定;Q0—上次的电平状态。
本次设计中:
段选信号LE接P1.5,对应图中标号P1.5;位选信号LE接P1.6,对应图中标号P1.6。
控制显示时先给P1.5高电平,使通道打开,接着送字码,然后把P1.5电平拉低,使字码保持住;之后打开P1.6(送高电平),紧接着送位码,控制要显示的位,然后把P1.6拉低,数据被保持。
最后延时5ms;依次循环扫描;利用数码管点亮后的余晖和人眼视觉暂留效应即可实现动态显示。
数码管动态显示电路如图2-10所示。
2.2系统软件设计
系统模块
在主程序模块中,需要完成对各参量和接口的初始化、出租车起步价和单价的初始化以及中断、计算、循环等工作。
另外,在主程序模块中还需要设置启动/清除标志寄存器、里程寄存器和价格寄存器,并对它们进行初始化。
然后,主程序将根据各标志寄存器的内容,分别完成启动、清除、计程和计价等不同的操作。
当汽车运行起来时,就启动计价,根据里程寄存器中的内容计算和判断行驶里程是否已超过起步价公里数。
若已超过,则根据里程值、每公里的单价数和起步价数来计算出当前的总金额,并将结果存于总金额寄存器中;中途等待时,脉冲输入小于设定值时,当时间超过等待设定值时,开始进行计时,并把等待价格加到总金额里,然后将总金额、里程送数码管显示出来。
程序流程如图所示。
图2-8系统主程序流程图
中断模块
里程计数中断模块
每当霍尔传感器输出一个低电平信号,单片机定时器0(工作在计数模式)就对其计数一次,相应的变量设为inter就自加1,当里程计数器inter对里程脉冲计满500次时,对其自身进行清零操作,为下一次计数做准备,同时进入里程计数中断服务程序中,里程变量加1,总金额根据此时所设单价做出相应的变化。
里程中断子程序如图2-9所示。
图2-9里程中断服务子程序
中途等待中断模块
在中途等待中断程序中,定时器1每50ms计一次数,每计够100次(5sec),便将当前里程值送入某个缓存变量,与前一个5秒的值进行比较,如果两者相同,则表明时钟中断没有输出信号,认为出租车停了下来,进入等待计时,计时中间变量dd自加1,计够12次为一分钟,dd自清零,同时根据所设的等待单价刷新总金额。
计数初值可有以下公式获得:
X=(65536-t)*11.0592*10^6/12;
TH=X/256;
TL=X%256;
其中:
X表示计数初值,TH、TL分别为16位计数器高8位和低8位应装入的初值。
用定时器作为基准,可使测试的等待时间更为精确(可以精确到uS级);且每隔5秒比较一次,能有效减小误判率,避免把汽车低速行驶误认为静止等待处理。
中途等待子程序流程图如图2-3所示。
图2-10中途等待