电子设计报告出租车计价器
- 格式:doc
- 大小:574.50 KB
- 文档页数:30
电子设计实践报告题目:基于AT89S52单片机的出租车计价器设计班级:信科10-4班学号:姓名:指导教师:中国矿业大学计算机学院2013 年 5 月基于AT89S52单片机的出租车计价器设计摘要目前出租车已基本在全国大小城市普及,计价器也已经在各大、中城市广泛应用,虽然一些小城市、小城镇还未使用计价器,但计价器的普及也是毫无疑问的。
所以未来出租车计价器的市场还是十分有潜力的,制作出性能好、价格低的计价器十分必要。
出租车计价器是单片机的一种典型应用。
包括数码管显示模块、里程时间模块、等待时间模块、计价计算模块。
功能要求1. 设计一个出租车计价器,速度可以增加或减小,时间的确定采用定时器实现。
2. 要求单价可调,里程精确到0.1公里,并要求对等待时间进行计时。
3. 数码管显示需要配合锁存器使用。
4. 数码管的数值需要通过实时计算得到。
目录1 系统工作原理 (4)1.1基本原理 (4)2硬件设计 (6)2.1 单片机最小系统单元 (6)2.2 霍尔传感器单元 (7)2.3 键盘调整单元 (9)2.4 显示单元 (10)3软件设计 (11)3.1 系统主程序 (11)3.2 里程计数中断程序 (11)3.3 中途等待中断程序 (12)3.4 计算程序 (13)3.5 显示程序 (14)4调试改进过程及运行结果分析 (16)4.1 动态扫描的调试和分析 (16)4.2 按键查询功能的实现 (16)4.3 计价器系统的仿真 (16)学习心得 (18)仿真图PCB板.......................... 错误!未定义书签。
系统源程序.. (21)1 系统工作原理功能要求:出租车计价器是根据乘客乘坐汽车行驶距离和等候时间的多少进行计价的,并在行驶中同步显示本次消费、运行里程、运行单价以及等待时间等信息。
从起步开始,当汽车行驶里程未满3公里时,均按起步价计算。
超过3公里后,实现每1公里单价收费,中间遇到暂停时,计程数不再增加,开始计时收费,计程收费和计时收费的和便构成了一位乘客的车费。
起步价格可通过独立按键进行调节。
(默认起步价为3元,里程单价为1.5元/公里,等待计时单价为1.5元/5秒)1.1基本原理计价器系统主要由四部分组成:分别为基于霍尔传感器A44E的里程检测单元、AT89S52单片机、键盘和LED显示。
霍尔传感器主要用于检测汽车行使的里程数,出租车车轮每旋转一周,霍尔传感器A44E便产生一相应的脉冲输出,并把该脉冲交由单片机进行处理,单片机则根据程序设定,通过计算脉冲个数换算出已行驶里程(里程=脉冲个数*出租车车轮周长),相关数据进行总的消费金额的计算:当里程小于3公里时,总金额=起步价+等待时间*等待单价;当里程大于3公里时,总金额=起步价+(里程-3)*运行单价+等待时间*等待单价;计算好的金额、等待时间、里程和单价等数据信息都可实时地显示在数码管上。
其中,等待时间可根据霍尔传感器A44E是否有脉冲输出加以判断,如可设定等待时基为5s,即假如A44E在5s后仍无脉冲输出便认为进入等待时间,并由单片机AT89S52内部计时器对其进行计时。
独立键盘可以调整单价等相关数据,当按下某按键,会给单片机相应端口一低电平信号,单片机会通过循环扫描检测到此信号,并根据预先设置好的程序做出相应的处理;系统结构图如图1-1所示。
图1-1系统结构图2硬件设计2.1 单片机最小系统单元AT89S52 是一种低功耗、高性能CMOS8位微控制器,具有8K 在系统可编程Flash存储器。
使用Atmel 公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。
片上Flash允许程序存储器在系统可编程,亦适于常规编程器。
在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
AT89S52具有以下标准功能:8k字节Flash,256字节RAM,32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。
另外,AT89S52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。
空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工作。
掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
图2-1 单片机最小系统AT89S52单片机的复位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所示。
A44EP3.2口小磁铁STC89C52霍尔传感器图2-3传感器测距示意图本系统选择将A44E的脉冲输出端接到P3.2口,即做为定时器/计数器1的输入端,车轮每转一圈(设车轮的周长是2米),霍尔开关便输出一低电平信号,然后利用单片机定时器1对该脉冲计数,当计数达到10次时,则达到1公里,单片机将自动刷新里程、总金额等信息。
2.3 键盘调整单元当单价等信息需要进行修改时,就要用到键盘。
由于调节信息不多,故采用6个独立键盘即可,分别实现清零、切换、增大、减小和功能等作用。
电路原理如图2-5所示。
图2-5 键盘调整单元接线图图中,键盘从上至下依次为:K1:接P1.0口,按键对起步价进行调整;K2:接P1.1口,通过对功能键K3按下次数的计数,实现起步价数据的增大;K3:接P1.2口,通过对功能键k3按下次数的计数,实现起步价数据的减小;K4:接P1.3口,按键调整后的起步价确定;K6: 实现行程模式和等待模式的切换。
需要注意的时,当按键按下和释放的瞬间都有抖动现象,一般来说,抖动的时间长短与键盘的机械特性有关,大约为5-10ms[5]。
所以在实际编程时一定要注意键盘的去抖动。
键盘去抖动有专用的延时电路,也有专门的延时芯片,也可以用软件去抖,考虑到电路的难易程度,从简化硬件的角度,本次设计采用软件去抖动,用一个短延时程序,进行键盘去抖操作。
2.4 显示单元显示单元由一个4位8段共阳数码管组成,电路连接时,公共端接高电平,因此我们需要点亮哪个发光二极管只需给哪个二极管阴极送低电平,并采用动态扫描进行显示[6]。
由于溢出指示是采用发光二极管是否点亮表示,故必须选好参数以确保发光二极管正常工作。
根据元件手册(也可用万用表测量)查得,发光二极管点亮时压降为1.7V,点亮电流为3-20mA,取导通电流为5mA,所以限流电阻可选择为(5-1.7)/5=660,故可选择限流电阻值510Ω。
数码管动态显示电路如图2-7所示。
图2-7 数码管动态显示电路3软件设计3.1 系统主程序在主程序模块中,需要完成对各参量和接口的初始化、出租车起步价和单价的初始化以及中断、计算、循环等工作。
另外,在主程序模块中还需要设置启动/清除标志寄存器、里程寄存器和价格寄存器,并对它们进行初始化。
然后,主程序将根据各标志寄存器的内容,分别完成启动、清除、计程和计价等不同的操作。
当出租车运行后,就启动计价器,根据里程寄存器中的内容计算和判断行驶里程是否已超过起步价公里数。
若已超过,则根据里程值、每公里的单价值和起步价来计算出当前的总金额,并将结果存于总金额寄存器中;中途等待时,无脉冲输入,不产生中断,当时间超过等待设定值时,开始进行计时,并把等待金额加到总金额里,然后将总金额、里程、等待时间和单价送数码管显示出来。
程序流程如图3-1所示。
图3-1 主程序流程图3.2 里程计数中断程序每当霍尔传感器输出一个低电平信号,单片机定时器0(工作在计数模式)就对其计数一次,相应的变量设为inter就自加1,当里程计数器inter 对里程脉冲计满20000次时,对其自身进行清零操作,为下一次计数做准备,同时进入里程计数中断服务程序中,里程变量加1,总金额根据此时所设单价做出相应的变化。
里程中断子程序如图3-2所示。
图3-2 里程中断服务子程序3.3 中途等待中断程序在中途等待中断程序中,定时器1每5s计一次数,每计够100次(5sec),便将当前里程值送入某个缓存变量,与前一个5秒的值进行比较,如果两者相同,则表明霍尔传感器没有输出信号,认为出租车停了下来,进入等待计时,计时中间变量dd自加1,计够12次为一分钟,dd自清零,同时根据所设的等待单价刷新总金额。
用定时器作为基准,可使测试的等待时间更为精确(可以精确到uS 级);且每隔5秒比较一次,能有效减小误判率,避免把汽车低速行驶误认为静止等待处理。
中途等待子程序流程图如图3-3所示。
图3-3 中途等待中断子程序流程图3.4 计算程序计算程序根据里程数分别进入不同的计算公式。
如果里程大于3公里,则执行公式:总金额=起步价+(里程-3)*单价+等待时间*等待单价;否则,执行公式:总金额=起步价+等待时间*等待单价。