出租车计价器课程设计.docx
- 文档编号:9044296
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:16
- 大小:230.75KB
出租车计价器课程设计.docx
《出租车计价器课程设计.docx》由会员分享,可在线阅读,更多相关《出租车计价器课程设计.docx(16页珍藏版)》请在冰豆网上搜索。
出租车计价器课程设计
摘要
单片机是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的计算机系统。
出租车计价器是单片机的一种典型应用。
基于单片机的计价器是由单片机和外部电路组成。
包括检测模块,控制模块,人机模块。
里程检测模块由外加脉冲模拟车轮转速,控制模块包括AT89C52单片机和AT24C02,人机模块包括独立键盘和数码管动态显示。
系统性能指标:
1.脉冲模拟转速;
2.显示当前单价、行驶里程和总金额;
3.里程精确到0.1公里。
4.切换显示。
关键词:
AT89C52,脉冲,中断,计费,动态显示
目 录
概述1
一、系统工作原理2
1.1功能要求2
1.2基本原理2
二、硬件设计3
2.1单片机最小系统单元3
2.2掉电存储单元6
2.3键盘调整单元6
2.4显示单元7
三、软件设计9
3.1系统主程序9
3.2里程计数中断程序10
3.3中途等待中断程序10
3.4计算程序10
3.5显示程序11
3.6键盘程序11
四、调试改进过程及运行结果分析11
4.1动态扫描的调试和分析11
4.2按键查询功能的实现11
4.3外部中断的实现11
4.4计价器系统的仿真12
五、总结14
六、参考文献15
附录C系统源程序16
概述
随着城市建设日益加快,象征着城市面貌的出租车行业也将加速发展。
现在各大中城市出租车行业都已普及自动计价器,所以计价器技术的发展有很好的前景。
尽管小城市尚未普及,但计价器的普及也是毫无疑问的,所以未来汽车计价器的市场还是十分有潜力的。
基于单片机AT89C52设计的出租车计价器不仅可方便的用软件代替硬件,降低成本,具备一般计价器的计算里程和显示总金额的功能,还具备了掉电保持,白天、夜晚单价切换,并且还可很方便的扩展为速度测试仪,具有很好市场前景。
因此本课题基于单片机设计出租车计费系统具有非常重要的意义。
本课题功能要求
1.设计一个出租车计价器,并利用脉冲信号模拟车轮转动和单片机内集成的计数器测试出出租车运行里程。
2、3公里以内起步价5元,超过3公里每1公里1.8元。
3、功能按键,显示单价、公里数和总费用。
4、有完整的软件仿真结果和硬件电路,并用Protel设计系统原理图。
扩展要求:
1、低速时进入等待计时状态,等待计时超过5分钟后,每分钟0.9元。
2、夜班加价功能。
一、系统工作原理
1.1功能要求
出租车计价器是根据乘客乘坐汽车行驶距离和等候时间的多少进行计价的,并在行驶中同步显示本次消费、运行里程、运行单价以及等待时间等信息。
从起步开始,当汽车行驶里程未满3公里时,均按起步价计算。
超过3公里后,实现每1公里单价收费,中间遇到暂停时,计程数不再增加,开始计时收费,计程收费和计时收费的和便构成了一位乘客的车费。
同时,白天和夜晚价格不同,可以进行切换。
白天单价、夜晚单价、等待单价和起步价格都可通过独立键盘进行调节。
(默认起步价为5元/3公里,里程单价白天为1.8元/公里,夜晚为2.8元/公里,等待计时单价为0.9元/1分钟)
为提高计时、计价精度,确保乘客对自己消费的知情权,出租车计价器应做到里程数精确到0.1公里,同时为减少司机朋友来回调整单价以及停车后需重设单价的麻烦,计价器应具有掉电保持功能,即当重新启动后维持原有数值(包括总金额、等待时间、行驶里程、单价)不变,直至强制按下清零键,计价器显示起步价(刚起步时对应总金额)、运行单价,为下一次计价做准备。
1.2基本原理
计价器系统主要由五部分组成:
分别为脉冲模拟里程检测单元、AT89C52单片机、外扩串行EEPROM-AT24C02、独立键盘和数码管显示。
通过脉冲模拟车速,每输入一个脉冲相当于增加0.1公里的路程,停止脉冲输入相当于汽车停止进入等待状态。
输入的脉冲由单片机进行处理计费,相关数据进行总的消费金额的计算:
当里程小于3公里时,总金额=起步价+等待时间*等待单价;当里程大于3公里时,总金额=起步价+(里程-3)*运行单价+等待时间*等待单价;计算好的金额、等待时间、里程和单价等数据信息都可实时地显示在数码管上。
其中,等待时间可根据是否有脉冲输出加以判断,如可设定等待时基为5s,在5s后仍无脉冲输出便认为进入等待时间,并由单片机AT89C52内部计时器对其进行计时。
独立键盘可以调整单价等相关数据,当按下某按键,会给单片机相应端口一低电平信号,单片机会通过循环扫描检测到此信号,并根据预先设置好的程序做出相应的处理;调整好的数据存储到EEPROM中,掉电后可以使该数据不丢失,下次得电后直接从EEPROM-AT24C02中读到单片机,并通过数码管实时显示。
系统结构图如图1-1所示。
二、硬件设计
2.1单片机最小系统单元
主控机系统采用AT89C52单片机,其最小系统包括复位电路和晶振电路,以及P0口接入的10K的上拉电阻便构成了AT89C52单片机工作所需的最简外围电路。
单片机最小系统电路图如图2-1所示
图2-1单片机最小系统
1、复位电路
单片机在启动运行时都需要进行复位操作,以便使CPU和系统中的其它部件都处于某一确定的初始状态,并从这个状态开始工作。
AT89C52单片机有一个引脚RST,它是施密特触发器的输入端,其输出端接复位电路的输入。
复位信号是高电平有效,其有效时间应持续24个振荡脉冲周期(即二个机器周期)以上。
复位有电复位和手动复位两种。
手动复位有电平方式和脉冲方式两种。
本次设计中,为方便操作,采用手动复位的电平复位。
其复位电路如下表示:
复位电路连接图如图2-2所示:
图2-2复位电路连接图
图为80C51型单片机上电手动复位电路。
RC构成微分电路在接电瞬间,产生一个微分脉冲,其宽度若大于2个机器周期,80C51型单片机将复位。
为保证微分脉冲宽度足够大,RC时间常数应大于2个机器周期。
一般取10Uf电容、10k电阻。
2、时钟电路
时钟电路如图2-4所示:
图2-4时钟电路
时钟电路产生的振荡脉冲经过触发器进行二分频之后,才能为单片机的时钟脉冲信号。
振荡频率取决于石英晶体的振荡频率,频率范围可取1.2MHz—12MHz。
C3、C4主要起频率微调和稳定作用,电容值可取5~30pF。
晶体振荡频率高,则系统的时钟频率也高,单片机运行也就快,但反过来运行速度快对存储器的速度要求就高,对印刷电路板的工艺要求也高(线间寄生电容要小)。
在本次设计中,选取晶振频率为12MHz,C1和C2的值均为33uF。
2.2掉电存储单元
AT24C02的作用是在电源断开的时候,存储当前设定的总金额,等待时间,运行里程以及单价等信息。
AT24C02是Ateml公司的2KB的电可擦除存储芯片,引脚配置如图2-5所示。
图2-5AT24C02引脚配置图
图中R4、R5是上拉电阻,其作用是减少AT24C02的静态功耗。
由于AT24C02的数据线和地址线是复用的,采用串口的方式传送数据,只用两根线SCL(时钟脉冲)和SDA(数据/地址)与单片机P3.6和P3.7口连接,每当设定一次单价,系统就调用存储程序,将单价信息保存在芯片内;当系统重新上电的时候,自动调用读存储器程序,将存储器内的单价等信息,读到缓存单元中,供主程序使用。
2.3键盘调整单元
当单价等信息需要进行修改时,就要用到键盘。
由于调节信息不多,故采用5个独立键盘即可,分别实现清零、切换、增大、减小和功能等作用。
电路原理如图2-6所示。
图2-6键盘调整单元接线图
图中,键盘从上至下依次为:
S0:
接P1.0口,对上一次的计费进行清零,为下次载客做准备;
S1:
接P1.1口,通过对功能键S3按下次数的计数,实现单价数据的增大;
S2:
接P1.2口,通过对功能键S3按下次数的计数,实现单价数据的减小;
S3:
接P1.3口,按1次,进入调整白天单价;按2次,进入调整夜晚单价;按3次,进入调整等待单价;按4次,进入调整起步价;按5次,返回。
S4:
实现白天单价和夜晚单价的切换。
需要注意的时,当按键按下和释放的瞬间都有抖动现象,一般来说,抖动的时间长短与键盘的机械特性有关,大约为5-10ms[5]。
所以在实际编程时一定要注意键盘的去抖动。
键盘去抖动有专用的延时电路,也有专门的延时芯片,也可以用软件去抖,考虑到电路的难易程度,从简化硬件的角度,本次设计采用软件去抖动,用一个短延时程序,进行键盘去抖操作。
2.4显示单元
显示单元由两个4位8段共阳数码管组成,电路连接时,公共端接高电平,因此我们需要点亮哪个发光二极管只需给哪个二极管阴极送低电平,并采用动态扫描进行显示。
前三个数码管分别接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锁存器,其输出电流较大,电路接口简单且可直接驱动数码管显示。
。
数码管动态显示电路如图2-7所示。
图2-7数码管动态显示电路
三、软件设计
3.1系统主程序
在主程序模块中,需要完成对各参量和接口的初始化、出租车起步价和单价的初始化以及中断、计算、循环等工作。
另外,在主程序模块中还需要设置启动/清除标志寄存器、里程寄存器和价格寄存器,并对它们进行初始化。
然后,主程序将根据各标志寄存器的内容,分别完成启动、清除、计程和计价等不同的操作。
当出租车运行后,就启动计价器,根据里程寄存器中的内容计算和判断行驶里程是否已超过起步价公里数。
若已超过,则根据里程值、每公里的单价值和起步价来计算出当前的总金额,并将结果存于总金额寄存器中;中途等待时,无脉冲输入,不产生中断,当时间超过等待设定值时,开始进行计时,并把等待金额加到总金额里,然后将总金额、里程、等待时间和单价送数码管显示出来。
程序流程如图3-1所示。
图3-1主程序流程图
3.2里程计数中断程序
每当按键输入一个脉冲(低电平信号),单片机定时器0(工作在计数模式)就对其计数一次,相应的变量设为inter就自加1,并对自身产生清零操作,同时进入里程计数中断服务程序中,里程变量加1,总金额根据此时所设单价做出相应的变化。
3.3中途等待中断程序
在中途等待中断程序中,定时器1每50ms计一次数,每计够100次(5sec),便将当前里程值送入某个缓存变量,与前一个5秒的值进行比较,如果两者相同,则表明外部没有输出信号,认为出租车停了下来,进入等待计时,计时中间变量dd自加1,计够12次为一分钟,dd自清零,同时根据所设的等待单价刷新总金额。
3.4计算程序
计算程序根据里程数分别进入不同的计算公式。
如果里程大于3公里,则执行公式:
总金额=起步价+(里程-3)*单价+等待时间*等待单价;否则,执行公式:
总金额=起步价+等待时间*等待单价。
程序流程图如图3-2所示。
图3-2计算程序流程图
3.5显示程序
由于8位数码管所有段选皆有8位的P0口进行控制,因此,在每一瞬间,8位LED会显示同一个数字。
要想每位显示不同的字符,就必须采用动态扫描的方法轮流点亮各位LED,即在每一时刻只使某一位显示字符。
在此瞬间,段选控制I/O口输出相应字符段选码(字符码),而位选则控制I/O口在该显示的位送入选通电平,以保证该位显示显示相应字符。
如此循环操作,使每位分时显示该位应该显示的字符。
在本次设计中显示程序利用延时程序,每隔5ms刷新一次,相应的数码管点亮,显示一位数据,利用主函数内的循环,实现动态扫描显示,同时根据数码管余辉和人眼暂留现象,给人看上去每个数码管总是在亮,以实现动态显示。
3.6键盘程序
键盘采用查询的方式,放在主程序中,当有按键按下的时候,在相应I/O口产生一次低电平,当单片机查询出该低电平后便转入进行处理,处理结束返回
四、调试改进过程及运行结果分析
4.1动态扫描的调试和分析
动态扫描是单片机编程中最基本的知识,对其原理有比较清晰的掌握,本次用的是C语言编程。
第一次在程序中把段码和位码顺序送反,结果是只有在延时时间较长时才能显示正常,当然这样的结果是没有静态的效果。
4.2按键查询功能的实现
按键查询比较容易实现,只要注意1.按键结束后注意退出按键处理;2.不要陷入死循环,即避免显示一个数据后退不出来;3.在做实际键盘时要注意按下去抖和释放去抖。
4.3外部中断的实现
程序完成好,外部中断一直不能起不到作用,采用的单片机内部模拟脉冲却可以实现效果,经过分析是把外部中断0和1两种方式搞混了,仔细修改程序后,实现了功能,由外部输入低电平信号作为模拟车速的脉冲信号。
4.4计费器系统的仿真
当各个子模块都实现后,联调则主要是看当把他们融合在一起时是否会有时序上的冲突,以及可能存在的分析不周全的地方。
调试完成后在Proteus7.5上仿真结果如图4-1,4-2,4-3,4-4所示。
图4-1里程无溢出时小于三公里仿真结果
图4-2里程无溢出时大于三公里仿真结果
图4-3里程小于三公里时等待计费仿真结果
五、总结
经过近两周的设计,在老师和同学的帮助下,全面实现了预先设定的计价器应具有的功能,且满足了所有设计指标。
1.能准确显示出租车运行里程;
2.实现了单价可调,里程精确到0.1公里,并可以对等待时间进行计时;
3.通过EEPROM-AT24C02对存储空间进行了扩展,使其具备掉电存储功能。
4.有完整的软件仿真结果和硬件电路,并用Protel设计出了系统原理图,制作了电路板。
通过对基于Proteus7.5的仿真和实际电路的测试结果分析,表明用此方法设计的计价器。
实现了单价可调,掉电保持,计程精度达到0.1公里,此外还增加了等待计时功能,白天夜晚单价自动切换,并且能实时显示总金额,等待时间,运行里程,运行单价等详细信息;且能很方便的在不改变硬件电路的情况下通过改变软件实现计价精度的提高,进行功能上的扩展,如可把现有的计价器转变为计速器,完善的功能使得基于AT89C52单片机的出租车计价器的通用性和实用性有着无可比拟的优势,具有很高的现实意义和很好的市场前景。
回想这两周的课程设计,感慨颇多啊!
从理论到实践,学到了很多东西,对以前所学过的知识进行了巩固,也对书本上没有的东西进行了了解。
这次课程设计使得我们深刻体会到理论联系实践的重要性。
只有当一个人把所学的理论用于实践的时候才真正体现了价值。
在此次设计中遇到了诸多问题,毕竟是第一次做,而且当初学习单片机等专业选修课的时候也没学多牢固,以至于连简单的管脚图,一些元器件的使用方法也要上网查。
对于编写程序的过程亦是如此,由于自身条件有限,刚开始编的程序下载到单片机以后一直都不工作,到最后我们只有向软件学习好的同学请教,终于把程序问题解决了。
这次课程设计顺利结束了,虽然中间遇到过那么多问题,但是在古老师的指导和刘同学的帮助下终于引刃而解了。
再次感谢给过我们帮助的老师和同学们!
6、参考文献
[1]郭天祥.51单片机C语言教程.电子工业出版社,
[2]万文略单片机原理及应用。
重庆大学出版,
[3]康华光电子技术基础数字部分高等教育出版社
[4]单片机学习系统实验指导书浙江省海盐澉浦恒电气设备厂
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 出租车 计价器 课程设计