用单片机STC89C52设计的出租车计价器毕业设计论文.docx

上传人:b****8 文档编号:10993303 上传时间:2023-02-24 格式:DOCX 页数:77 大小:698.74KB
下载 相关 举报
用单片机STC89C52设计的出租车计价器毕业设计论文.docx_第1页
第1页 / 共77页
用单片机STC89C52设计的出租车计价器毕业设计论文.docx_第2页
第2页 / 共77页
用单片机STC89C52设计的出租车计价器毕业设计论文.docx_第3页
第3页 / 共77页
用单片机STC89C52设计的出租车计价器毕业设计论文.docx_第4页
第4页 / 共77页
用单片机STC89C52设计的出租车计价器毕业设计论文.docx_第5页
第5页 / 共77页
点击查看更多>>
下载资源
资源描述

用单片机STC89C52设计的出租车计价器毕业设计论文.docx

《用单片机STC89C52设计的出租车计价器毕业设计论文.docx》由会员分享,可在线阅读,更多相关《用单片机STC89C52设计的出租车计价器毕业设计论文.docx(77页珍藏版)》请在冰豆网上搜索。

用单片机STC89C52设计的出租车计价器毕业设计论文.docx

用单片机STC89C52设计的出租车计价器毕业设计论文

毕业设计论文

用单片机STC89C52设计的出租车计价器的论文设计

摘要

随着城市建设日益加快,象征着城市面貌的出租车行业也将加速发展。

现在各大中城市出租车行业都已普及自动计价器,所以计价器技术的发展有很好的前景。

尽管小城市尚未普及,但计价器的普及也是毫无疑问的,所以未来汽车计价器的市场还是十分有潜力的。

出租车计价器是单片机的一种典型应用。

基于单片机的计价器是由单片机和外部电路组成。

包括检测模块,控制模块,人机模块。

里程检测模块由A44E构成,控制模块包括STC89C52单片机和AT24C02,人机模块包括独立键盘和LED动态显示。

系统性能指标

1.设定价格;

2.显示当前单价、行驶里程和总金额;

3.里程精确到0.1公里。

通过多次调试系统性能达到设计要求。

 

关键词:

STC89C52,霍尔传感器A44E,I2C总线,动态显示

DesignofTaximeterBasedonSTC89C52

ABSTRACT

Withtherapiddevelopmentofcityconstriction,thetaxiindustrywhichsymbolizesthecityscapealsohasanacceleratedprogress.Nowadaystheautomatictaximeterhasbeenwidelyusedintaxiindustryinmanycites.Therefore,thedevelopmentofautomatictaximeterisdoomed.Althoughautomatictaximeterisnotspreadinsometowns,thereisnodoubtthatitwouldbepopularized.Thus,infuturethebusinessofautomatictaximeterisstillpotential.

Onetypicalapplicationofsinglechipcomputerisautomatictaximeter.ThehardwareofthisdesigniscomposedofsinglechipcomputerandperipheralcircuitswhichconsistofDetectionUnit,ProcessingUnitandHumanComputerInteractionUnit.TheDetectionUnitisbasedonHall-effectsensor.TheProcessingUnitcontainsSTC89C52andAT24C02.HumanComputerInteractionUnitiscomposedofkeyboardandLED.

Thefunctionofthissystemincludesasfollows:

1.Settheunitprice;

2.Displaytheunitprice,totalamountandmileage.

3.Accuracy:

0.1km.

Afterrepeatedlydebugging,theperformanceofthissystemisreachedthedesignrequirements.

KEYWORDS:

STC89C52,Hall-effectsensor,A44E,I2CBus,Dynamicdisplay

目 录

前 言

单片机是一种可通过编程控制的微处理器,虽其自身不能单独用在某项工程或产品上,但当其与外围数字器件和模拟器件结合时便可发挥强大的功能,现在单片机已广泛应用于众多领域。

举例如下:

1.工业自动化。

如数据采集、测控技术。

2.智能仪器仪表。

如数字示波器、数字信号源、感应电流表等。

3.消费类电子产品。

如空调机、微波炉、IC卡、汽车电子设备等。

4.通信方面。

如调制解调器、程控交换技术等。

5.武器装备。

如飞机、军舰、导弹、鱼雷制导、智能武器等。

作为与自动化技术和电子密切相关的理工科学生,掌握单片机是最简单也最基础的要求。

为了进一步丰富和巩固单片机知识,也为了能更好的联系实际应用,本次毕业设计选择了基于单片机STC89C52控制的出租车计价器,并力求能做出实物。

鉴于电子技术、计算机技术以及各种更先进的仿真软件的出现,使用高级语言如C代替汇编语言进行编程和控制已成为现实,也成为一种发展趋势。

单片机C语言编程相对于MC51汇编语言编程有如下优点:

1.对单片机的指令系统不需要有很深的理解就可以编程操作单片机。

2.寄存器分配、不同存储器的寻址及数据类型等细节完全由编辑器自动处理。

3.程序有规范的结构,可分为不同的函数,可使程序结构化。

4.库中包括许多标准子程序,具有较强的处理能力,使用方便。

5.具有方便的模块化编程技术,使已编好的程序便于移植,可极大缩短开发时间,增加程序的可读性和可维护性。

事实上,当今许多硬件的开发都已开始用C语言编程,如各种单片机、DSP、ARM等,用C语言进行工业控制也已成为一种趋势,为了更好的适应当今社会形势,为了更好的面对挑战、把握机遇,此次毕业设计决定尝试用C语言编程完成。

也希望能在进一步熟悉单片机控制的同时,对数字电子技术、模拟电子技术、计算控制技术以及常用外围芯片有更深层次的了解,提高自己的综合能力。

综上:

基于单片机STC89C52设计的出租车计价器不仅可方便的用软件代替硬件,降低成本,具备一般计价器的计算里程和显示总金额的功能,还具备了掉电保持,白天、夜晚单价切换,并且还可很方便的扩展为速度测试仪,具有很好市场前景。

功能要求

1.设计一个出租车计价器,并利用霍尔传感器和单片机内集成的计数器测试出出租车运行里程。

2.要求单价可调,里程精确到0.1公里,并要求对等待时间进行计时。

3.利用I2C总线通过EEPROM对存储空间进行扩展,使其具备掉电存储功能。

4.有完整的软件仿真结果和硬件电路,并用Protel设计系统原理图。

 

 

第1章系统工作原理

 

1.1功能要求

出租车计价器是根据乘客乘坐汽车行驶距离和等候时间的多少进行计价的,并在行驶中同步显示本次消费、运行里程、运行单价以及等待时间等信息。

从起步开始,当汽车行驶里程未满3公里时,均按起步价计算。

超过3公里后,实现每1公里单价收费,中间遇到暂停时,计程数不再增加,开始计时收费,计程收费和计时收费的和便构成了一位乘客的车费。

同时,白天和夜晚价格不同,可以进行切换。

白天单价、夜晚单价、等待单价和起步价格都可通过独立键盘进行调节。

(默认起步价为5元/3公里,里程单价白天为2.5元/公里,夜晚为3.5元/公里,等待计时单价为1元/1分钟)

为提高计时、计价精度,确保乘客对自己消费的知情权,出租车计价器应做到里程数精确到0.1公里,同时为减少司机朋友来回调整单价以及停车后需重设单价的麻烦,计价器应具有掉电保持功能,即当重新启动后维持原有数值(包括总金额、等待时间、行驶里程、单价)不变,直至强制按下清零键,计价器显示起步价(刚起步时对应总金额)、运行单价,为下一次计价做准备。

1.2基本原理

计价器系统主要由五部分组成:

分别为基于霍尔传感器A44E的里程检测单元、STC89C52单片机、外扩串行EEPROM-AT24C02、独立键盘和LED显示。

霍尔传感器主要用于检测汽车行使的里程数,出租车车轮每旋转一周,霍尔传感器A44E便产生一相应的脉冲输出,并把该脉冲交由单片机进行处理,单片机则根据程序设定,通过计算脉冲个数换算出已行驶里程(里程=脉冲个数*出租车车轮周长),然后再根据从EEPROM-AT24C02中读取的单价等相关数据进行总的消费金额的计算:

当里程小于3公里时,总金额=起步价+等待时间*等待单价;当里程大于3公里时,总金额=起步价+(里程-3)*运行单价+等待时间*等待单价;计算好的金额、等待时间、里程和单价等数据信息都可实时地显示在数码管上。

其中,等待时间可根据霍尔传感器A44E是否有脉冲输出加以判断,如可设定等待时基为5s,即假如A44E在5s后仍无脉冲输出便认为进入等待时间,并由单片机STC89C52内部计时器对其进行计时。

独立键盘可以调整单价等相关数据,当按下某按键,会给单片机相应端口一低电平信号,单片机会通过循环扫描检测到此信号,并根据预先设置好的程序做出相应的处理;调整好的数据存储到EEPROM中,掉电后可以使该数据不丢失,下次得电后直接从EEPROM-AT24C02中读到单片机,并通过数码管实时显示。

系统结构图如图1-1所示。

图1-1系统结构图

第2章硬件设计

 

2.1单片机最小系统单元

主控机系统采用STC公司生产的STC89C52单片机,它含有512字节数据存储器RAM,内置8K的电可擦除FLASHROM,可重复编程,大小满足主控机软件系统设计,所以不必再扩展程序存储器。

芯片外围电路最高可接入40MHZ的晶振(AT单片机数值一般为24MHZ)。

复位电路和晶振电路,以及P0口接入的10K的上拉电阻便构成了STC89C52单片机工作所需的最简外围电路。

单片机最小系统电路图如图2-1所示。

图2-1单片机最小系统

STC89C52单片机的复位端接74LS14,它是一个史密特触发输入的芯片,高电平有效,具有稳定波形的作用。

RST端若由低电平上升到高电平并持续2个周期,系统将实现一次复位操作;在该复位电路中,按一下复位开关,利用电容冲放电的所产生的延时,就会在RST端产生一段时间的高电平,进而进行复位操作。

外接12M的晶振和两个30pF电容组成系统的内部时钟电路,其中电容主要起到滤波、微调以及利用其充放电过程帮助单片机晶振启振的作用[1]。

对于单片机的P0口,可以作为地址/数据总线使用,也可以作为一般的I/O口使用。

但当其作为I/O使用时,由于输出属于开漏电路,无上拉电阻故也无法进行高低电平的操作,此时必须接上拉电阻,一般阻值选为10K。

但P0口不能同时作为地址/数据总线和I/O使用。

本设计利用P0口的I/O功能[2]。

2.2霍尔传感器单元

A44E属于开关型的霍尔器件,其工作电压范围比较宽(4.5~18V),其输出的信号符合TTL电平标准,可以直接接到单片机的I/O端口上,而且其最高检测频率可达到1MHZ[3]。

A44E集成霍耳开关由稳压器A、霍耳电势发生器(即硅霍耳片)B、差分放大器C、施密特触发器D和OC门输出E五个基本部分组成。

在输入端输入电压Vcc,经稳压器稳压后加在霍尔电势发生器的两端,根据霍尔效应原理,当霍尔片处在磁场中时,在垂直于磁场的方向通以电流,则与这二者相垂直的方向上将会产生霍尔电势差VH输出,该VH信号经放大器放大后送至施密特触发器整形,使其成为方波输送到OC门输出。

当施加的磁场达到工作点时,触发器输出高电平,三极管导通,OC门输出端输出低电压,这种状态为开;当触发器输出低电平时,三极管截止,OC门输出高电压,这种状态为关[4]。

这样两次电压变换,使霍尔开关完成了一次开关动作。

A44E霍尔传感器原理如图2-2所示。

图2-2 A44E霍尔传感器原理

里程计算主要通过霍尔传感器A44E检测完成,出租车车轮每旋转一周,霍尔传感器A44E便产生一相应的脉冲输出,并把该脉冲交由单片机进行处理,单片机则根据程序设定,通过计算脉冲个数换算出已行驶里程:

里程=脉冲个数*出租车车轮周长。

其原理如图2-3所示。

图2-3传感器测距示意图

本系统选择将A44E的脉冲输出端接到P3.2口,即做为定时器/计数器1的输入端,车轮每转一圈(设车轮的周长是2米),霍尔开关便输出一低电平信号,然后利用单片机定时器1对该脉冲计数,当计数达到500次时,则达到1公里,单片机将自动刷新里程、总金额等信息。

 

2.3掉电存储单元

AT24C02的作用是在电源断开的时候,存储当前设定的总金额,等待时间,运行里程以及单价等信息。

AT24C02是Ateml公司的2KB的电可擦除存储芯片,采用两线串行的总线和单片机通讯,电压最低可以到2.5V,额定电流为1mA,静态电流10uA(5.5V),芯片内的资料可以在断电的情况下保存40年以上,而且采用8脚的DIP封装,使用方便。

AT24C02芯片引脚配置如图2-4所示。

图2-4AT24C02引脚配置图

图中R4、R5是上拉电阻,其作用是减少AT24C02的静态功耗。

由于AT24C02的数据线和地址线是复用的,采用串口的方式传送数据,只用两根线SCL(时钟脉冲)和SDA(数据/地址)与单片机P3.6和P3.7口连接,进行传送数据时遵守I2C总线协议。

每当设定一次单价,系统就调用存储程序,将单价信息保存在芯片内;当系统重新上电的时候,自动调用读存储器程序,将存储器内的单价等信息,读到缓存单元中,供主程序使用。

事实上AT24C02为典型的支持I2C总线的器件,对其进行编程时需遵守I2C总线的时序要求,以及I2C委员会对各种I2C芯片的地址分配规则。

现把I2C总线与AT24C02的通讯时序、通讯规则简要介绍如下:

1.I2C总线节点的寻址字节

主机产生起始条件后,发送的第一个字节为寻址字节。

该字节的头七位为从机地址,对于AT24C02来说高四位为1010,它是I2C总线器件的固有地址,紧接着是A1、A2、A3通过接地或者高电平决定外围器件的地址数据,第八位是读写控制为,当为0是表示主节点向从节点发送数据,当为1时表示要接收数据。

2.I2C总线数据传输的格式

(1)主控器的写数据格式:

首先由主机发送起始信号—当SCL为高电平时,SDA由高到低有跳变;然后发一个寻址字节,当收到应答信号后发送数据,其中应答信号为当SCL为高时SDA传送0,并持续4.7us以上;当主机产生停止信号时,数据传送结束,停止信号是当SCL为高电平时SDA有一个由低到高的跳变。

(2)主控器的读数据格式:

与写数据的不同之处在于数据发送结束和停止位之间加一个非应答位,表示数据发送结束,格式为当SCL为高时SDA传送1,并持续4.7us以上。

3.要特别注意的是SDA和SCL都是双向传输线,平时均处于高电平备用状态,只有当需要关闭时才使其钳制在低电平,且仅在SCL为高电平时数据才能传送,而当SCL为低电平时才允许数据发生变化。

2.4键盘调整单元

当单价等信息需要进行修改时,就要用到键盘。

由于调节信息不多,故采用5个独立键盘即可,分别实现清零、切换、增大、减小和功能等作用。

电路原理如图2-5所示。

图2-5键盘调整单元接线图

图中,键盘从上至下依次为:

S0:

接P1.0口,对上一次的计费进行清零,为下次载客做准备;

S1:

接P1.1口,通过对功能键S3按下次数的计数,实现单价数据的增大;

S2:

接P1.2口,通过对功能键S3按下次数的计数,实现单价数据的减小;

S3:

接P1.3口,按1次,进入调整白天单价;按2次,进入调整夜晚单价;按3次,进入调整等待单价;按4次,进入调整起步价;按5次,返回。

S4:

实现白天单价和夜晚单价的切换。

需要注意的时,当按键按下和释放的瞬间都有抖动现象,一般来说,抖动的时间长短与键盘的机械特性有关,大约为5-10ms[5]。

所以在实际编程时一定要注意键盘的去抖动。

键盘去抖动有专用的延时电路,也有专门的延时芯片,也可以用软件去抖,考虑到电路的难易程度,从简化硬件的角度,本次设计采用软件去抖动,用一个短延时程序,进行键盘去抖操作。

2.5显示单元

显示单元由两个4位8段共阳数码管组成,电路连接时,公共端接高电平,因此我们需要点亮哪个发光二极管只需给哪个二极管阴极送低电平,并采用动态扫描进行显示[6]。

前三个数码管分别接P2.0、P2.1和P2.2,用于显示总金额;第四个接P2.3,显示等待时间;第五个和第六个数码管分别接P2.4和P2.5,用于显示里程,由于需精确到小数位,故最多只能显示9.9公里,但经过添加溢出指示,可计到20公里,在现实中已基本够用;后面两个数码管分别接P2.6和P2.7,用于显示单价。

由于溢出指示是采用发光二极管是否点亮表示,故必须选好参数以确保发光二极管正常工作。

根据元件手册(也可用万用表测量)查得,发光二极管点亮时压降为1.7V,点亮电流为3-20mA,取导通电流为5mA,所以限流电阻可选择为(5-1.7)/5=660,故可选择限流电阻值510Ω。

由于数码管内部二极管点亮时需要5mA以上的电流,而单片机的输出电流还不到1mA,所以数码管与单片机连接时需加驱动电路,可以使用上拉电阻的方法,也可以使用专门的驱动芯片,考虑到复用单片机I/O接口,节省单片机I/O资源,此次设计采用74HC573锁存器,其输出电流较大,电路接口简单且可直接驱动数码管显示。

74HC573的引脚分布图2-6如下。

图2-674HC573的引脚分布

:

为三态允许输入端(低电平有效),也可称作输出允许端;

1D-8D为数据输入端;

1Q-8Q为数据输出端;

LE为锁存允许端。

74HC573所对应真值表2-1如表。

表2-174HC573真值表

INPUT

OUTPUT

LED

Q

LHL

LLX

HXX

H

Q0

Z

其中:

H—高电平;L—低电平;X—任意电平;Z—高阻态,既不是高电平也不是低电平,其电平状态由与它相连接的其它电气状态决定;Q0—上次的电平状态。

由真值表可以看出,当

为高电平时,无论LE与D端为何电平状态,其输出均为高阻态,此时芯片处于不可控状态。

做设计时必须使其处于可控状态,即

应该接低电平。

为低电平时,若LE为H,则D与Q同时为H或者L,数据实现直通传送;而当LE为L时,无论D为何状态Q都保持上一次的数据状态,数据被锁存住,利用此特性即可实现对数码管的控制。

本次设计中:

段选信号LE接P1.5,对应图中标号P1.5;位选信号LE接P1.6,对应图中标号P1.6。

控制显示时先给P1.5高电平,使通道打开,接着送字码,然后把P1.5电平拉低,使字码保持住;之后打开P1.6(送高电平),紧接着送位码,控制要显示的位,然后把P1.6拉低,数据被保持。

最后延时5ms;依次循环扫描;利用数码管点亮后的余晖和人眼视觉暂留效应即可实现动态显示。

数码管动态显示电路如图2-7所示。

 

图2-7数码管动态显示电路

 

第3章软件设计

 

3.1系统主程序

在主程序模块中,需要完成对各参量和接口的初始化、出租车起步价和单价的初始化以及中断、计算、循环等工作。

另外,在主程序模块中还需要设置启动/清除标志寄存器、里程寄存器和价格寄存器,并对它们进行初始化。

然后,主程序将根据各标志寄存器的内容,分别完成启动、清除、计程和计价等不同的操作。

当出租车运行后,就启动计价器,根据里程寄存器中的内容计算和判断行驶里程是否已超过起步价公里数。

若已超过,则根据里程值、每公里的单价值和起步价来计算出当前的总金额,并将结果存于总金额寄存器中;中途等待时,无脉冲输入,不产生中断,当时间超过等待设定值时,开始进行计时,并把等待金额加到总金额里,然后将总金额、里程、等待时间和单价送数码管显示出来。

程序流程如图3-1所示。

图3-1主程序流程图

3.2里程计数中断程序

每当霍尔传感器输出一个低电平信号,单片机定时器0(工作在计数模式)就对其计数一次,相应的变量设为inter就自加1,当里程计数器inter对里程脉冲计满500次时,对其自身进行清零操作,为下一次计数做准备,同时进入里程计数中断服务程序中,里程变量加1,总金额根据此时所设单价做出相应的变化。

里程中断子程序如图3-2所示。

图3-2里程中断服务子程序

 

3.3中途等待中断程序

在中途等待中断程序中,定时器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秒比较一次,能有效减小误判率,避免把汽车低速行驶误认为静止等待处理。

中途等待子程序流程图如图3-3所示。

图3-3中途等待中断子程序流程图

3.4计算程序

计算程序根据里程数分别进入不同的计算公式。

如果里程大于3公里,则执行公式:

总金额=起步价+(里程-3)*单价+等待时间*等待单价;否则,执行公式:

总金额=起步价+等待时间*等待单价。

程序流程图如图3-4所示。

图3-4计算程序流程图

 

3.5显示程序

由于8位数码管所有段选皆有8位的P0口进行控制,因此,在每一瞬间,8位LED会显示同一个数字。

要想每位显示不同的字符,就必须采用动态扫描的方法轮流点亮各位LED,即在每一时刻只使某一位显示字符。

在此瞬间,段选控制I/O口输出相应字符段选码(字符码),而位选则控制I/O口在该显示的位送入选通电平,以保证该位显示显示相应字符。

如此循环操作,使每位分时显示该位应该显示的字符[7]。

在本次设计中显示程序利用延时程序,每隔5ms刷新一次,相应的数码管点亮,显示一位数据,利用主函数内的循环,实现动态扫描显示,同时根据数码管余辉和人眼暂留现象,给人看上去每个数码管总是在亮,以实现动态显示。

3.6键盘程序

键盘采用查询的方式,放在主程序中,当有按键按下的时候,在相应I/O口产生一次低电平,当单片机查询出该低电平后便转入进行处理,处理结束返回。

键盘程序流程图如图3-5。

图3-5键盘程序

按键检测流程图3-6所示。

图3-6按键检测子程序流程图

 

第4章调试改进过程及运行结果分析

 

4.1动态扫描的调试和分析

动态扫描是单片机编程中最基本的知识,虽对其原理有比较清晰的掌握,也曾用汇编语言写过程序,但此次用C语言编写还是出现了错误。

第一就是把段码和位码顺序送反,结果是只有在延时时间较长时才能显示正常,当然这样的代价是没有静态的效果;第二就是用动态扫描时给八个数码管送了10个数,显然这样做结果必定混乱;最后就是开始时用switch、case语句实现动态扫描,当程序较小时可以正常工作,但当后期程序较大时,出现了时序混乱的问题。

最后解决的方法是用了锁存器,显示结果正常为固定的预设的八个数字。

 

4.2AT24C02的编程与调试

对AT24C02编程对我来说是一个比较新知识点,遇到了不少问题,这里仅把经验教训简要介绍一下。

首先是一定要对I2C总线时序有较深刻了解后再尝试编程,第二就是要注意向AT24C02写一个字和读一个字的区别,当从AT24C02读数据时一定要注意,当读完时从机AT24C02一定要发送一个非应答信号表示数据读完。

调试的方法是在指定地址写一个数字

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 初中教育 > 科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1