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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

出租车自动计费器.docx

1、出租车自动计费器摘要 11 概述 11.1 基本要求 11.2 功能介绍 12 设计方案 12.1设计原理 13 硬件电路 13.1 单片机最小系统 13.2 按键电路 13.3 数码管显示电路 13.4 LCD1602显示电路 14 软件设计 14.1单片机I/O资源使用 14.2 单片机软件模块设计 14.3 程序框图 15 PROTEUS仿真 15.1 总仿真电路图 15.2 不调价仿真 15.3 调价仿真 16 心得体会 1参考文献 1附录1 原件清单 1附录2 程序 1附录3 原理图 1出租车自动计费器设计摘要近些年来,出租车成为了人们出行重要的交通工具之一,出租车以低价高质的服务给

2、人们带来了不少方便。基于单片机系统设计的出租车计费器以单片机作为核心的控制元件,具有功能强,性能可靠,电路简单,成本低的特点,加上经过优化的程序,使其具有很高的智能化水平。本次设计中,硬件设计主电路以AT89S51单片机为核心控制元件,输出采用LCD1602液晶屏和四位一体数码管,显示起价、每公里单价、等待价格、行驶总里程和总金额,并配有多个按键,以供手动调节乘车价格。关键词:计费器 51单片机 LCD1602 数码管1 概述1.1 基本要求 以MCS-51系列单片机为核心,设计出租车自动计费器。 设计一个出租车自动计费器,具有行车里程计费、等候时间计费、及起价三部分,用四位数码管显示总金额,

3、最大值为99.99元。 行车里程单价1元/公里,等候时间单价0.5元/10分钟,起价3元(3公里起价)均能通过人工输入。 行车里程的计费以一个脉冲模拟汽车前进十米, 用LED显示行驶公里数和收费金额。一、计费功能费用按行驶里程计费,起步价为3元。1、当行驶里程小于或等于3公里,按起步价计费2、当行驶里程大于3公里,每公里收费1元,不足1公里不计3、等待时间为每10分钟收费0.5元,不足10分钟不计二、显示功能1、显示行驶里程:用LCD1602液晶屏显示,显示方式为“XX”,单位为Km,范围0-99Km2、显示等候时间:用LCD1602液晶屏显示,显示方式为“XX”,单位Min,范围0-99Mi

4、n3、显示总费用:用四位数码管显示,显示方式为“XX.X”,单位元,范围3-99.9元1.2 功能介绍本出租车自动计费,上电后显示默认的起步价,每公里计费单价,等待时间计费单价,可通过按键调整起步价,里程计费单价,等待时间计费单价。具有运行、暂停、停止状态,可以显示行驶的里程、等待的时间和出租车行驶的总费用。2 设计方案2.1设计原理利用单片机的强大功能,可用AT89S51单片机作主控芯片,用来处理计费器的各种数据并控制LCD1602和数码管显示模块,实现基本的里程计费和价格调整。为模拟汽车行驶,用单片机的T0定时器进行16位定时,每0.05S发射一个信号进入定时中断,20个中断为1S,每秒向

5、单片机发送信号表示前进10米。2.2 设计方案图2-1 总体设计框图3 硬件电路3.1 单片机最小系统该电路单片机最小系统由四个部分组成:电源、地、复位电路、时钟电路。电源电路中,电源接单片机,同时连接一个电容接地用于去耦合,稳定电源电压。复位电路如图3-1所示,共有两种基本形式:上电复位和按键复位。单片机上电瞬间会对C1进行充电,此过程C1相当于短路,RST引脚电平升高单片机复位;若要手动复位,则按下RSTK复位按键,RST引脚直接接高电平,单片机复位。图3-1 复位电路图3-2为单片机时钟电路,AT89S51内部有一个用于构成振荡器的高增益反相放大器,它的输入端为芯片引脚XTAL1,输出端

6、为XTAL2,。这两个引脚跨接石英晶体和微调电容,构成一个稳定的自激振荡器,微调电容的典型值通常为30pF。图3-2 时钟电路3.2 按键电路本设计共有6个独立按键:复位按键RSTK,进入退出设置键K1,光标移动键K2,数值增加键K3,等待计时键K4,开始暂停计费键K5。1.复位或者程序跑飞,可用RSTK键进行复位;2.调整计费单价,按K1进如设置状态,设置完后再按下K1退出设置状态;3.按K2可移动光标,分别调整各收费单价;4.按K5键开始计费,中间需要停车等待,可直接按K4进行等待计时计费,等待完毕直接按K5继续行驶计费。按键电路如图3-3所示。图3-3 按键电路3.3 数码管显示电路数码

7、管用于显示计费总价,显示方式为“XX.X”,单位元,显示范围为3-99.9元。为保证数码管显示的稳定性,在段选端前接锁存器74HC573,数码管电路如图3-4所示。图3-4 数码管显示电路由于单片机P0口没有上拉能力,所以数码管的段选口高电平由锁存器提供。3.4 LCD1602显示电路LCD1602液晶屏是字符型液晶屏,并且带字符库的,不需要查找代码,英文字符可直接输入显示。液晶电路使用时,如果发现液晶不亮可以调节连接液晶的变阻器,改变液晶的亮度。每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形。LC

8、D1602显示电路如图3-5所示。图3-5 LCD显示电路另外,系统供电由P1口外接的5V电源供电,如图3-6。图3-6 电源接口4 软件设计4.1单片机I/O资源使用此设计中P10到P13口和P32口连接按键控制输入,P0口和P14、P15、P16、P17口用于控制数码管,P2口和P34、P35、P36口用于控制LCD1602液晶屏。4.2 单片机软件模块设计一、LCD1602显示模块由于LCD1602程序比较复杂,所以专门创建一个1602的头文件,将1602的使用程序存放于头文件中,在主程序中只要声明了1602头文件,即可调用1602子程序。头文件下包含的子程序有:延时程序、LCD1602

9、初始化程序、写命令程序和写数据程序。由于只是使用LCD1602进行显示,所以不需要读命令数据程序。二、中断程序模块程序共使用三个中断:INT0、T0、T1中断。INT0中断用于进入或退出调价模式,打开计费器后进行计费之前,随时可以利用INT0中断进行调价,开始计费之后则关闭INT0中断,不能调价。T0定时中断形成行车脉冲,模拟汽车行驶,每0.05s产生一次中断,每20次中断为1s,每秒行驶10米距离。程序中设置一个变量flag2用来表示按下的是K4还是K5,按下K5键T0中断中的t1开始计时,模拟汽车行驶,再次按下则暂停计时,即停止行驶;按下K4,T0中的t2开始计时,计算等待的时间。T1中断

10、用于数码管显示,由于数码管是动态显示,所以在此较为复杂的主程序中运行会产生闪烁,将数码管显示程序置于T1中断程序中,就不会再闪烁。三、其它程序模块其它程序模块主要包括数码管显示模块、数据计算模块、调价模块、按键扫描模块等。数码管显示模块用于显示总费用,使用四位一体数码管显示,但只用其中后三位,显示0到99.9。数据计算模块主要计算行车里程、等待时间、等待收费、总收费。调价模块用于调整起价、每公里单价和等待收费单价。按键扫描模块用于检测用户按下了哪些功能键。4.3 程序框图本设计中,软件设计采用模块化操作,利用各个模块之间的相互联系,在设计中采用主程序调用子程序的方法,使程序通俗易懂。 在mai

11、n函数开始,要对系统初始化,和对硬件设备进行初始化,并使硬件处于就绪状态。通过判断是否计费,调价,清零等状态,来分别调用不同的子程序,使程序在设计之前,就有了很强的逻辑关系。这些对应于硬件就是通过按下各个控制开关,来分别进行不同的动作,最后显示屏根据输入的信息,来显示不同的数据信息,这就达到了软件控制硬件,同时输入信息控制输出信息的目的。整个程序的流程图如下:TO、T1、INT0初始化LCD1602初始化 否 否 是 是 图4-1 程序流程图从图中可以看出,程序开始就对LCD1602、T0 T1计数器和INT0进行了初始化,1602显示器开始显示计费标准,之后判断是否进行调整收费标准,如需调整

12、则进入调整程序进行价格调整,若不需要调整则判断是否开始计费或者计时,若开始则进入数据处理程序进行各数据计算,计算结果显示在LCD1602和数码管上,若不开始计价或者计时,则只用LCD1602显示收费标准。5 PROTEUS仿真5.1 总仿真电路图使用PROTEUS搭建好电路,下载程序进行仿真。仿真电路包含AT89S51单片机、按键控制电路、74HC573锁存器、四位共阴极数码管和LCD1602液晶屏。总电路如图5-1所示。图5-1 仿真电路图5.2 不调价仿真先使用默认的价钱进行仿真,即起步价3元,每公里1元,每等待10分钟0.5元。通过计算,行驶10公里且不等待收费10块钱,对比仿真结果图5

13、-2发现电路运行正常。图5-2 仿真一再仿真等待收费。行驶7公里,等待10分钟,通过计算应收费7.5元,对比仿真结果图5-3,运行结果也正确。图5-3 仿真二5.3 调价仿真这次先进行调价,再开始计费,检查调价程序是否能够正常运行。将起步价调为6元,每公里单价调为3元,按K5开始行驶计费,行驶10公里,计算得费用为27元,对比仿真结果图5-4,结果相同。图5-4 仿真三再将起步价调为5元,每公里单价调为2元,每10分钟等待单价调为1.5元进行仿真,等待10分钟,显示计费12.5元,与计算结果图5-5相同。图5-5 仿真四6 心得体会出租车计费器系统的设计已经全部完成,能按预期的效果进行模拟汽车

14、启动,停止,暂停等功能,并能够通过LCD和数码管显示车费数目。本款出租车计价器包括单价输出、单价调整、显示当前总费用等功能。另外,多功能出租车计价器还具有性能可靠、电路简单、成本低、实用性强等特点,加上经过优化的程序,使其有很高的智能化水平。 经过自己努力,基本上完成了设计要求的内容,在系统可行性分析、原理图设计等方面都作了许多实际工作,取得了一些成绩,同时也遇到了一些问题,存在一些不足。经过这几天的学习和工作,我觉得自己不论是在理论知识方面还是在动手能力方面都有了不小的进步,自己从中受益匪浅。这次设计很好的把以前学到的理论知识应用于实践,使我认识到理论知识与实践之间有一定的差距,只有通过不断

15、的努力学习和实践才能很好的把理论知识应用到实践当中,也只有通过不断的实践才能对理论知识的理解。 通过这次设计不仅学会了如何去查找相关资料,更重要的是通过查找资料和翻阅书籍学到了不少知识,扩大了知识面,提高了知识水平。经过单元设计和系统设计巩固了以前所学的专业知识,自己真正认识到理论联系实际的重要性,为以后的学习和工作提供了很多有价值的经验。通过这次设计不仅增强了自己的动脑能力和动手能力,也提高了我思考问题、分析问题、解决问题的能力,更重要的是学会用工程化的思想来解决问题。这在以前的学习过程中是不曾学到的。在短短的三个月时间内完成设计内容,在很大程度上得益于老师的帮助。这次设计是我认真认识到完整

16、、严谨、科学分析问题、解决问题的思想是多么的重要,只有拥有了科学的态度才能设计出有用的产品。另外通过本次设计,使我认识到自己理论知识的应用能力有很大的欠缺,需要在以后的学习中进一步提高。参考文献1张毅坤等.单片微型计算机原理及应用.西安电子科技大学出版社2李建忠.单片机原理及应用.西安电子科技大学出版社3张毅刚,彭喜元,彭宇.单片机原理及应用.高等教育出版社4康华光.电子技术基础数字部分.高等教育出版社5刘坤,赵红波,张宪栋.51单片机开发技术大全.人民邮电出版社6李广弟,朱月秀,冷祖祁.单片机基础.北京航空航天大学出版社附录1 原件清单名称规格数量电阻10K1个排阻1K1排可变电阻1个极性电

17、容10uF1个非极性电容33pF2个0.1uF2个晶振12MHz1个LCD16021个数码管1个芯片AT89S511个74HC5731个附录2 程序主程序:#include #include 1602.h#define uint unsigned int#define uchar unsigned charuchar table3=3,1,5; /起步价,单价,等待单价uchar table13;uchar code table2=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f; /09uchar code table3=0xbf,0x86,

18、0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef; /09带小数点uchar SetPlace,SetState=0; /设置位置,设置状态uchar time1,time2; /用于定时器计时uchar kilometre; /行走里程double min;double waitm=0.0,money=0.0; /等待计费、总计费uchar flag1=0,flag2; /用于K4和K5按键状态uchar num=0;uint x; uint t1,t2; /t1为T0定时,表示汽车行走了t1秒 /t2为T1定时,表示等待了t2秒sbit K1=P32; /设置

19、sbit K2=P12; /移动光标sbit K3=P13; /循环增加sbit K4=P10; /打开关闭等待计时器sbit K5=P11; /打开关闭计价器sbit LSA=P14; /数码管位选sbit LSB=P15;sbit LSC=P16;sbit LSD=P17;void Key(); /按键选择计费或计时void SMG(); /数码管显示void Data(); /计算行走里程、等待收费、总收费void tiaojia(); /按K1 K2 K3调整收费标准void LcdDisplay(); /1602显示void delay(uint c); /延时c毫秒void Int

20、0Configuration(); /外部0中断初始化void T_0Config(); /定时器0中断初始化void T_1Config(); /定时器1中断初始化/*主程序*/void main() LCD1602init(); T_0Config(); T_1Config(); Int0Configuration(); while(1) if(SetState=1) tiaojia(); /按下K1则调整价格,不按则跳过 else Key(); /按键选择计费或计时 Data(); /数据处理 LcdDisplay(); /1602显示 /*数码管显示程序*/void SMG() /共阴

21、极数码管 for(num=0;num2) SetPlace=0; while(i50)&(K2=0)/检测按键是否松开 delay(10); i+; i=0; if(K3=0) /检测按键K3按下 调节价格 delay(10); /消除抖动 if(K3=0) if(SetPlace9) /换成BCD码。 tableSetPlace=tableSetPlace+6; /转换为BCD码之后,就相当于十进制数了 if(tableSetPlace0x9)&(SetPlace=0) /起步价 tableSetPlace=0; if(tableSetPlace0x9)&(SetPlace=1) /单价 t

22、ableSetPlace=0; else tableSetPlace=tableSetPlace+5; if(tableSetPlace&0x0f)9) /换成BCD码。 tableSetPlace=tableSetPlace+6; /转换为BCD码之后,就相当于十进制数了 if(tableSetPlace0x99)&(SetPlace=2) /等待单价的10倍 tableSetPlace=0; while(i10)&(K3=0) /检测按键是否松开 delay(10); i+; i=0; /*数据处理计算程序*/void Data() /计算行走里程、等待收费、总收费 kilometre=(

23、10*t1)/100; /1000! min=t2/600; /t2/600是等待了多少个10分钟 waitm=min*table2; /不/10,在money处也不*10,正好抵消 if(kilometre=3) money=10*table0+waitm; else money=10*table0+10*(kilometre-3)*table1+waitm; x=money; table10=x/100; table11=x%100/10; table12=x%10; /*按键程序*/void Key() /按键选择计费或计时 if(K5=0) /按K5退出计时并进入计费模式 /再按下则退

24、出计费模式 delay(10); if(K5=0) ET0=1; /开T0中断 TR0=1; /启动定时器 flag1=!flag1; if(flag1=1) flag2=1; else flag2=0; if(K4=0) /按K4进入等待计时模式 delay(10); if(K4=0) ET0=1; TR0=1; flag2=2; /*LCD1602显示程序*/void LcdDisplay() /1602显示 LcdWriteCom(0x80); LcdWriteData(S); LcdWriteData(:); LcdWriteData(0+table0); /起步价 LcdWriteC

25、om(0x80+0x05); LcdWriteData(P); LcdWriteData(:); LcdWriteData(0+table1); /每公里单价 1 LcdWriteCom(0x80+0x0a); LcdWriteData(W); LcdWriteData(:); LcdWriteData(0+ (table2/10);/等待每10分钟单价 0.5元 LcdWriteData(.); LcdWriteData(0+ (table2%10); LcdWriteCom(0x80+0x40); LcdWriteData(T); LcdWriteData(I); LcdWriteData(M); LcdWriteData(E); LcdWriteData(:); LcdWriteData(0+(t2/60)/10); /等待时间(t2/60) 099 LcdWriteData(0+(t2/60)%10); LcdWriteCom(0x80+0x48); LcdWriteData(L); LcdWriteData(O); LcdWriteData(N); LcdWriteData(T); LcdWriteData(H); LcdWriteData(:); LcdWriteData(0+kilometre/10); /

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

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