ImageVerifierCode 换一换
格式:DOCX , 页数:40 ,大小:505.45KB ,
资源ID:17287543      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/17287543.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(出租车计费器设计课程设计论文Word文件下载.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

出租车计费器设计课程设计论文Word文件下载.docx

1、举例如下:1. 工业自动化。如数据采集、测控技术。2. 智能仪器仪表。如数字示波器、数字信号源、感应电流表等。3. 消费类电子产品。如空调机、微波炉、IC卡、汽车电子设备等。4. 通信方面。如调制解调器、程控交换技术等。5. 武器装备。如飞机、军舰、导弹、鱼雷制导、智能武器等。作为与自动化技术和电子密切相关的理工科学生,掌握单片机是最简单也最基础的要求。为了进一步丰富和巩固单片机知识,也为了能更好的联系实际应用,本次课程设计选择了基于单片机AT89S52控制的出租车计费器,并力求能做出实物。鉴于电子技术、计算机技术以及各种更先进的仿真软件的出现,使用高级语言如C代替汇编语言进行编程和控制已成为

2、现实,也成为一种发展趋势。单片机C语言编程相对于MC51汇编语言编程有如下优点:1. 对单片机的指令系统不需要有很深的理解就可以编程操作单片机。2. 寄存器分配、不同存储器的寻址及数据类型等细节完全由编辑器自动处理。3. 程序有规范的结构,可分为不同的函数,可使程序结构化。4. 库中包括许多标准子程序,具有较强的处理能力,使用方便。5. 具有方便的模块化编程技术,使已编好的程序便于移植,可极大缩短开发时间,增加程序的可读性和可维护性。事实上,当今许多硬件的开发都已开始用C语言编程,如各种单片机、DSP、ARM等,用C语言进行工业控制也已成为一种趋势,为了更好的适应当今社会形势,为了更好的面对挑

3、战、把握机遇,此次毕业设计决定尝试用C语言编程完成。也希望能在进一步熟悉单片机控制的同时,对数字电子技术、模拟电子技术、计算控制技术以及常用外围芯片有更深层次的了解,提高自己的综合能力。综上:基于单片机AT89S52设计的出租车计费器不仅可方便的用软件代替硬件,降低成本,具备一般计费器的计算里程和显示总金额的功能,还具备了掉电保持,白天、夜晚单价切换,并且还可很方便的扩展为速度测试仪,具有很好市场前景。功能要求1. 设计一个出租车计费器,并利用霍尔传感器和单片机内集成的计数器测试出出租车运行里程。2. 要求单价可调,里程精确到0.1公里,并要求对等待时间进行计时。3. 利用I2C总线通过EEP

4、ROM对存储空间进行扩展,使其具备掉电存储功能。第1章 系统工作原理1.1功能要求出租车计费器是根据乘客乘坐汽车行驶距离和等候时间的多少进行计费的,并在行驶中同步显示本次消费、运行里程、运行单价以及等待时间等信息。从起步开始,当汽车行驶里程未满3公里时,均按起步价计算。超过3公里后,实现每1公里单价收费,中间遇到暂停时,计程数不再增加,开始计时收费,计程收费和计时收费的和便构成了一位乘客的车费。同时,白天和夜晚价格不同,可以进行切换。白天单价、夜晚单价、等待单价和起步价格都可通过独立键盘进行调节。(默认起步价为5元/3公里,里程单价白天为2.5元/公里,夜晚为3.5元/公里,等待计时单价为1元

5、/1分钟)为提高计时、计费精度,确保乘客对自己消费的知情权,出租车计费器应做到里程数精确到0.1公里,同时为减少司机朋友来回调整单价以及停车后需重设单价的麻烦,计费器应具有掉电保持功能,即当重新启动后维持原有数值(包括总金额、等待时间、行驶里程、单价)不变,直至强制按下清零键,计费器显示起步价(刚起步时对应总金额)、运行单价,为下一次计费做准备。1.2基本原理计费器系统主要由五部分组成:分别为基于霍尔传感器A44E的里程检测单元、STC89C52单片机、外扩串行EEPROM-AT24C02、独立键盘和LED显示。霍尔传感器主要用于检测汽车行使的里程数,出租车车轮每旋转一周,霍尔传感器A44E便

6、产生一相应的脉冲输出,并把该脉冲交由单片机进行处理,单片机则根据程序设定,通过计算脉冲个数换算出已行驶里程(里程=脉冲个数*出租车车轮周长),然后再根据从EEPROM-AT24C02中读取的单价等相关数据进行总的消费金额的计算:当里程小于3公里时,总金额=起步价+等待时间*等待单价;当里程大于3公里时,总金额=起步价+(里程-3)*运行单价+等待时间*等待单价;计算好的金额、等待时间、里程和单价等数据信息都可实时地显示在数码管上。其中,等待时间可根据霍尔传感器A44E是否有脉冲输出加以判断,如可设定等待时基为5s,即假如A44E在5s后仍无脉冲输出便认为进入等待时间,并由单片机STC89C52

7、内部计时器对其进行计时。独立键盘可以调整单价等相关数据,当按下某按键,会给单片机相应端口一低电平信号,单片机会通过循环扫描检测到此信号,并根据预先设置好的程序做出相应的处理;调整好的数据存储到EEPROM中,掉电后可以使该数据不丢失,下次得电后直接从EEPROM-AT24C02中读到单片机,并通过数码管实时显示。系统结构图如图1-1所示。图1-1 系统结构图 第2章 硬件设计2.1单片机最小系统单元主控机系统采用STC公司生产的 STC89C52单片机,它含有512 字节数据存储器RAM,内置8K 的电可擦除FLASH ROM,可重复编程,大小满足主控机软件系统设计,所以不必再扩展程序存储器。

8、芯片外围电路最高可接入40MHZ的晶振(AT单片机数值一般为24MHZ)。复位电路和晶振电路,以及P0口接入的10K的上拉电阻便构成了STC89C52 单片机工作所需的最简外围电路。单片机最小系统电路图如图2-1所示。图2-1 单片机最小系统STC89C52单片机的复位端接74LS14,它是一个史密特触发输入的芯片,高电平有效,具有稳波形的作用。RST端若由低电平上升到高电平并持续2个周期,系统将实现一次复位操作定;在该复位电路中,按一下复位开关,利用电容冲放电的所产生的延时,就会在RST端产生一段时间的高电平,进而进行复位操作。外接12M的晶振和两个30pF 电容组成系统的内部时钟电路,其中

9、电容主要起到滤波、微调以及利用其充放电过程帮助单片机晶振启振的作用。对于单片机的P0口,可以作为地址/数据总线使用,也可以作为一般的I/O口使用。但当其作为I/O使用时,由于输出属于开漏电路,无上拉电阻故也无法进行高低电平的操作,此时必须接上拉电阻,一般阻值选为10K。但P0口不能同时作为地址/数据总线和I/O使用。本设计利用po口的I/O功能。2.2 霍尔传感器单元A44E属于开关型的霍尔器件,其工作电压范围比较宽(4.518V),其输出的信号符合TTL电平标准,可以直接接到单片机的I/O 端口上,而且其最高检测频率可达到1MHZ。A44E 集成霍耳开关由稳压器A、霍耳电势发生器(即硅霍耳片

10、)B、差分放大器C、施密特触发器D和OC门输出E五个基本部分组成。在输入端输入电压Vcc,经稳压器稳压后加在霍尔电势发生器的两端,根据霍尔效应原理,当霍尔片处在磁场中时,在垂直于磁场的方向通以电流,则与这二者相垂直的方向上将会产生霍尔电势差VH输出,该VH信号经放大器放大后送至施密特触发器整形,使其成为方波输送到OC门输出。当施加的磁场达到工作点时,触发器输出高电平,三极管导通, OC门输出端输出低电压,这种状态为开;当触发器输出低电平时,三极管截止,OC门输出高电压,这种状态为关 。这样两次电压变换,使霍尔开关完成了一次开关动作。A44E霍尔传感器原理如图2-2所示。图2-2A44E霍尔传感

11、器原理里程计算主要通过霍尔传感器A44E检测完成,出租车车轮每旋转一周,霍尔传感器A44E便产生一相应的脉冲输出,并把该脉冲交由单片机进行处理,单片机则根据程序设定,通过计算脉冲个数换算出已行驶里程:里程=脉冲个数*出租车车轮周长。其原理如图2-3所示。图2-3 传感器测距示意图本系统选择将A44E的脉冲输出端接到P3.2口,即做为定时器/计数器1的输入端,车轮每转一圈(设车轮的周长是2米),霍尔开关便输出一低电平信号,然后利用单片机定时器1对该脉冲计数,当计数达到500次时,则达到1公里,单片机将自动刷新里程、总金额等信息。2.3 掉电存储单元AT24C02的作用是在电源断开的时候,存储当前

12、设定的总金额,等待时间,运行里程以及单价等信息。AT24C02 是Ateml公司的2KB的电可擦除存储芯片,采用两线串行的总线和单片机通讯,电压最低可以到2.5V,额定电流为1mA,静态电流10uA(5.5V),芯片内的资料可以在断电的情况下保存40年以上,而且采用8 脚的DIP 封装,使用方便。AT24C02芯片引脚配置如图2-4所示。图2-4 AT24C02引脚配置图图中R4、R5 是上拉电阻,其作用是减少AT24C02 的静态功耗。由于AT24C02的数据线和地址线是复用的,采用串口的方式传送数据,只用两根线SCL(时钟脉冲)和SDA(数据/地址)与单片机P3.6和P3.7口连接,进行传

13、送数据时遵守I2C总线协议。每当设定一次单价,系统就调用存储程序,将单价信息保存在芯片内;当系统重新上电的时候,自动调用读存储器程序,将存储器内的单价等信息,读到缓存单元中,供主程序使用。事实上AT24C02为典型的支持I2C总线的器件,对其进行编程时需遵守I2C总线的时序要求,以及I2C委员会对各种I2C芯片的地址分配规则。现把I2C总线与AT24C02的通讯时序、通讯规则简要介绍如下:1. I2C总线节点的寻址字节主机产生起始条件后,发送的第一个字节为寻址字节。该字节的头七位为从机地址,对于AT24C02来说高四位为1010,它是I2C总线器件的固有地址,紧接着是A1、A2、A3通过接地或

14、者高电平决定外围器件的地址数据,第八位是读写控制为,当为0是表示主节点向从节点发送数据,当为1时表示要接收数据。2. I2C总线数据传输的格式(1) 主控器的写数据格式:首先由主机发送起始信号当SCL为高电平时,SDA由高到低有跳变;然后发一个寻址字节,当收到应答信号后发送数据,其中应答信号为当SCL为高时SDA传送0,并持续4.7us以上;当主机产生停止信号时,数据传送结束,停止信号是当SCL为高电平时SDA有一个由低到高的跳变。(2)主控器的读数据格式:与写数据的不同之处在于数据发送结束和停止位之间加一个非应答位,表示数据发送结束,格式为当SCL为高时SDA传送1,并持续4.7us以上。3

15、. 要特别注意的是SDA和SCL都是双向传输线,平时均处于高电平备用状态,只有当需要关闭时才使其钳制在低电平,且仅在SCL为高电平时数据才能传送,而当SCL为低电平时才允许数据发生变化。2.4 键盘调整单元当单价等信息需要进行修改时,就要用到键盘。由于调节信息不多,故采用5个独立键盘即可,分别实现清零、切换、增大、减小和功能等作用。电路原理如图2-5所示。图2-5 键盘调整单元接线图图中,键盘从上至下依次为:S0:接P1.0口,对上一次的计费进行清零,为下次载客做准备;S1:接P1.1口,通过对功能键S3按下次数的计数,实现单价数据的增大;S2:接P1.2口,通过对功能键S3按下次数的计数,实

16、现单价数据的减小;S3:接P1.3口,按1次,进入调整白天单价;按2次,进入调整夜晚单价;按3次,进入调整等待单价;按4次,进入调整起步价;按5次,返回。S4: 实现白天单价和夜晚单价的切换。需要注意的时,当按键按下和释放的瞬间都有抖动现象,一般来说,抖动的时间长短与键盘的机械特性有关,大约为5-10ms 5 。所以在实际编程时一定要注意键盘的去抖动。键盘去抖动有专用的延时电路,也有专门的延时芯片,也可以用软件去抖,考虑到电路的难易程度,从简化硬件的角度,本次设计采用软件去抖动,用一个短延时程序,进行键盘去抖操作。2.5 显示单元显示单元由两个4位8段共阳数码管组成,电路连接时,公共端接高电平

17、,因此我们需要点亮哪个发光二极管只需给哪个二极管阴极送低电平,并采用动态扫描进行显示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,所

18、以限流电阻可选择为(5-1.7)/5=660,故可选择限流电阻值510。由于数码管内部二极管点亮时需要5mA以上的电流,而单片机的输出电流还不到1mA,所以数码管与单片机连接时需加驱动电路,可以使用上拉电阻的方法,也可以使用专门的驱动芯片,考虑到复用单片机I/O接口,节省单片机I/O资源,此次设计采用74HC573锁存器,其输出电流较大,电路接口简单且可直接驱动数码管显示。74HC573的引脚分布图2-6如下。图2-6 74HC573的引脚分布:为三态允许输入端(低电平有效),也可称作输出允许端;1D-8D为数据输入端;1Q-8Q为数据输出端;LE为锁存允许端。74HC573所对应真值表2-1

19、如表。表2-1 74HC573真值表INPUTOUTPUT LE DQL H LL L XH X XHQ0Z其中 :H高电平;L低电平;X任意电平;Z高阻态,既不是高电平也不是低电平,其电平状态由与它相连接的其它电气状态决定;Q0上次的电平状态。由真值表可以看出,当为高电平时,无论LE与D端为何电平状态,其输出均为高阻态,此时芯片处于不可控状态。做设计时必须使其处于可控状态,即应该接低电平。当为低电平时,若LE为H,则D与Q同时为H或者L,数据实现直通传送;而当LE为L时,无论D为何状态Q都保持上一次的数据状态,数据被锁存住,利用此特性即可实现对数码管的控制。本次设计中:段选信号LE接P1.5

20、,对应图中标号P1.5;位选信号LE接P1.6,对应图中标号P1.6。控制显示时先给P1.5高电平,使通道打开,接着送字码,然后把P1.5电平拉低,使字码保持住;之后打开P1.6(送高电平),紧接着送位码,控制要显示的位,然后把P1.6拉低,数据被保持。最后延时5ms;依次循环扫描;利用数码管点亮后的余晖和人眼视觉暂留效应即可实现动态显示。数码管动态显示电路如图2-7所示。图2-7 数码管动态显示电路第3章 软件设计3.1 系统主程序在主程序模块中,需要完成对各参量和接口的初始化、出租车起步价和单价的初始化以及中断、计算、循环等工作。另外,在主程序模块中还需要设置启动/清除标志寄存器、里程寄存

21、器和价格寄存器,并对它们进行初始化。然后,主程序将根据各标志寄存器的内容,分别完成启动、清除、计程和计费等不同的操作。当出租车运行后,就启动计费器,根据里程寄存器中的内容计算和判断行驶里程是否已超过起步价公里数。若已超过,则根据里程值、每公里的单价值和起步价来计算出当前的总金额,并将结果存于总金额寄存器中;中途等待时,无脉冲输入,不产生中断,当时间超过等待设定值时,开始进行计时,并把等待金额加到总金额里,然后将总金额、里程、等待时间和单价送数码管显示出来。程序流程如图3-1所示。图3-1 主程序流程图3.2 里程计数中断程序每当霍尔传感器输出一个低电平信号,单片机定时器0(工作在计数模式)就对

22、其计数一次,相应的变量设为inter就自加1,当里程计数器inter对里程脉冲计满500次时,对其自身进行清零操作,为下一次计数做准备,同时进入里程计数中断服务程序中,里程变量加1,总金额根据此时所设单价做出相应的变化。里程中断子程序如图3-2所示。图3-2 里程中断服务子程序3.3 中途等待中断程序在中途等待中断程序中,定时器1每50ms计一次数,每计够100次(5sec),便将当前里程值送入某个缓存变量,与前一个5秒的值进行比较,如果两者相同,则表明霍尔传感器没有输出信号,认为出租车停了下来,进入等待计时,计时中间变量dd自加1,计够12次为一分钟,dd自清零,同时根据所设的等待单价刷新总

23、金额。计数初值可有以下公式获得:X=(65536-t)*11.0592*106/12;TH=X/256;TL=X%256;其中:X表示计数初值,TH、TL分别为16位计数器高8位和低8位应装入的初值。用定时器作为基准,可使测试的等待时间更为精确(可以精确到uS级);且每隔5秒比较一次,能有效减小误判率,避免把汽车低速行驶误认为静止等待处理。中途等待子程序流程图如图3-3所示。图3-3 中途等待中断子程序流程图3.4 计算程序计算程序根据里程数分别进入不同的计算公式。如果里程大于3公里,则执行公式:总金额=起步价+(里程-3)*单价+等待时间*等待单价;否则,执行公式:总金额=起步价+等待时间*

24、等待单价。程序流程图如图3-4所示。图3-4 计算程序流程图3.5 显示程序由于8位数码管所有段选皆有8位的P0口进行控制,因此,在每一瞬间,8位LED会显示同一个数字。要想每位显示不同的字符,就必须采用动态扫描的方法轮流点亮各位LED,即在每一时刻只使某一位显示字符。在此瞬间,段选控制I/O口输出相应字符段选码(字符码),而位选则控制I/O口在该显示的位送入选通电平,以保证该位显示显示相应字符。如此循环操作,使每位分时显示该位应该显示的字符 7 。在本次设计中显示程序利用延时程序,每隔5ms刷新一次,相应的数码管点亮,显示一位数据,利用主函数内的循环,实现动态扫描显示,同时根据数码管余辉和人

25、眼暂留现象,给人看上去每个数码管总是在亮,以实现动态显示。3.6 键盘程序键盘采用查询的方式,放在主程序中,当有按键按下的时候,在相应I/O口产生一次低电平,当单片机查询出该低电平后便转入进行处理,处理结束返回。键盘程序流程图如图3-5。图3-5 键盘程序按键检测流程图3-6所示图3-6 按键检测子程序流程图第4章 调试改进过程及运行结果分析4.1 动态扫描的调试和分析动态扫描是单片机编程中最基本的知识,虽对其原理有比较清晰的掌握,也曾用汇编语言写过程序,但此次用C语言编写还是出现了错误。第一就是把段码和位码顺序送反,结果是只有在延时时间较长时才能显示正常,当然这样的代价是没有静态的效果;第二

26、就是用动态扫描时给八个数码管送了10个数,显然这样做结果必定混乱;最后就是开始时用switch、case语句实现动态扫描,当程序较小时可以正常工作,但当后期程序较大时,出现了时序混乱的问题。最后解决的方法是用了锁存器,显示结果正常为固定的预设的八个数字。4.2 AT24C02的编程与调试对AT24C02编程对我来说是一个比较新知识点,遇到了不少问题, 这里仅把经验教训简要介绍一下。首先是一定要对I2C总线时序有较深刻了解后再尝试编程,第二就是要注意向 AT24C02写一个字和读一个字的区别,当从 AT24C02读数据时一定要注意,当读完时从机 AT24C02一定要发送一个非应答信号表示数据读完

27、。调试的方法是在指定地址写一个数字再看能是否读出,当显示程序编写好后,可以在Ptoteus中用数码管显示看是否与分析一致,也可以把读出的数据赋给某个变量,再通过在keil中执行view/watch&call stack window 调出相应变量观察。4.3 按键查询功能的实现按键查询比较容易实现,只要注意1. 按键结束后注意退出按键处理;2.不要陷入死循环,即避免显示一个数据后退不出来;3.在做实际键盘时要注意按下去抖和释放去抖。按键去抖可通过以下语句实现: if(key=0) delay(5); if(key=0) while(!key); delay(5); while(! 按键处理程序

28、 4.4 计算程序的分析与设计由于里程和单价都精确的小数点后一位,而显示时仍按整数显示,只不过人为的加入 &0x7f(共阳极时加入&0x7f,共阴极时加入 |0x)控制是否显示小数点儿,故实际计算时要做适当改动。改动如下:1. 当里程值大于30(实际对应大于3公里)且无进位时,溢出指示灯不亮,总金额=起步价+(里程十位数字-2)*运行单价+等待单价*等待时间;2. 当里程值小于30(实际对应小于3公里),肯定无进位,溢出指示灯不亮,总金额=起步价+等待单价*等待时间;3. 有进位,溢出指示灯点亮,表示里程一定大于三公里,只需执行总金额=起步价+7*运行单价+(里程十位数字+1)*运行单价+等待

29、单价*等待时间即:总金额=起步价+(里程十位数字+8)*运行单价+等待单价*等待时间。4.5 结果分析与性能改进经过反复调试验证,基于STC89C52单片机控制设计的出租车计价器满足了所有预设性能指标,具有较好的抗干扰性,价格也较为合理,具有很好的工业开发和市场前景。可以改进的地方可能有很多;就我现在所思考的可从以下两个方面加以考虑:1. 尝试着把两个锁存器74HC573去掉,当然不能影响整个计价器的功能,这样会使硬件电路更简洁,成本也会更低,符合实际中的最大利润空间定理。2. 设计板时把键盘和显示器放在芯片和其它电路的反面,这样封装成实际产品时可把人机接口留在外面,更人性化,也符合人们的习惯

30、。4.6 计价器系统的仿真当各个子模块都实现后,联调则主要是看当把他们融合在一起时是否会有时序上的冲突,以及可能存在的分析不周全的地方。本次设计联调时出现的问题主要有:第一是显示时存在时序上的冲突,详见4.1第三点;第二就是中断设置时出现混乱,即同时用定时器0,定时器1,和外部中断1时,后两者都不再工作(通过编一个方波程序,发现定时器1即P3.5无跳变),解决方法时让定时器1工作在计数方式代替工作在定时方式,如此不但可以完成相应功能,解决了问题,更重要的是省去一个中断,简化了程序设计。调试完成后在Proteus 7.5 上仿真结果如图4-1,4-2,4-3,4-4所示。图4-1 里程无溢出时仿真结果(小于三公里)图4-2

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

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