




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、目 录摘要11 概述21.1 基本要求21.2 功能介绍22 设计方案32.1设计原理33 硬件电路43.1 单片机最小系统43.2 按键电路53.3 数码管显示电路53.4 LCD1602显示电路64 软件设计74.1单片机I/O资源使用74.2 单片机软件模块设计74.3 程序框图85 PROTEUS仿真105.1 总仿真电路图105.2 不调价仿真105.3 调价仿真116 心得体会13参考文献14附录1 原件清单15附录2 程序16附录3 原理图29出租车自动计费器设计摘要近些年来,出租车成为了人们出行重要的交通工具之一,出租车以低价高质的服务给人们带来了不少方便。基于单片机系统设计的
2、出租车计费器以单片机作为核心的控制元件,具有功能强,性能可靠,电路简单,成本低的特点,加上经过优化的程序,使其具有很高的智能化水平。本次设计中,硬件设计主电路以AT89S51单片机为核心控制元件,输出采用LCD1602液晶屏和四位一体数码管,显示起价、每公里单价、等待价格、行驶总里程和总金额,并配有多个按键,以供手动调节乘车价格。关键词:计费器 51单片机 LCD1602 数码管11 概述1.1 基本要求 以MCS-51系列单片机为核心,设计出租车自动计费器。 设计一个出租车自动计费器,具有行车里程计费、等候时间计费、及起价三部分,用四位数码管显示总金额,最大值为99.99元。 行车里程单价1
3、元/公里,等候时间单价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-99Min3、显示总费用:用四位数码管显示,显
4、示方式为“XX.X”,单位元,范围3-99.9元1.2 功能介绍本出租车自动计费,上电后显示默认的起步价,每公里计费单价,等待时间计费单价,可通过按键调整起步价,里程计费单价,等待时间计费单价。具有运行、暂停、停止状态,可以显示行驶的里程、等待的时间和出租车行驶的总费用。2 设计方案2.1设计原理利用单片机的强大功能,可用AT89S51单片机作主控芯片,用来处理计费器的各种数据并控制LCD1602和数码管显示模块,实现基本的里程计费和价格调整。为模拟汽车行驶,用单片机的T0定时器进行16位定时,每0.05S发射一个信号进入定时中断,20个中断为1S,每秒向单片机发送信号表示前进10米。2.2
5、设计方案复位电路里程传输按键电路数码管显示总费用锁存器LCD1602显示行驶里程和等待时间等AT89S51单片机图2-1 总体设计框图3 硬件电路3.1 单片机最小系统该电路单片机最小系统由四个部分组成:电源、地、复位电路、时钟电路。电源电路中,电源接单片机,同时连接一个电容接地用于去耦合,稳定电源电压。复位电路如图3-1所示,共有两种基本形式:上电复位和按键复位。单片机上电瞬间会对C1进行充电,此过程C1相当于短路,RST引脚电平升高单片机复位;若要手动复位,则按下RSTK复位按键,RST引脚直接接高电平,单片机复位。图3-1 复位电路图3-2为单片机时钟电路,AT89S51内部有一个用于构
6、成振荡器的高增益反相放大器,它的输入端为芯片引脚XTAL1,输出端为XTAL2,。这两个引脚跨接石英晶体和微调电容,构成一个稳定的自激振荡器,微调电容的典型值通常为30pF。图3-2 时钟电路3.2 按键电路本设计共有6个独立按键:复位按键RSTK,进入退出设置键K1,光标移动键K2,数值增加键K3,等待计时键K4,开始暂停计费键K5。1.复位或者程序跑飞,可用RSTK键进行复位;2.调整计费单价,按K1进如设置状态,设置完后再按下K1退出设置状态;3.按K2可移动光标,分别调整各收费单价;4.按K5键开始计费,中间需要停车等待,可直接按K4进行等待计时计费,等待完毕直接按K5继续行驶计费。按
7、键电路如图3-3所示。图3-3 按键电路3.3 数码管显示电路数码管用于显示计费总价,显示方式为“XX.X”,单位元,显示范围为3-99.9元。为保证数码管显示的稳定性,在段选端前接锁存器74HC573,数码管电路如图3-4所示。图3-4 数码管显示电路由于单片机P0口没有上拉能力,所以数码管的段选口高电平由锁存器提供。3.4 LCD1602显示电路LCD1602液晶屏是字符型液晶屏,并且带字符库的,不需要查找代码,英文字符可直接输入显示。液晶电路使用时,如果发现液晶不亮可以调节连接液晶的变阻器,改变液晶的亮度。每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到
8、了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形。LCD1602显示电路如图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头文件,即可调
9、用1602子程序。头文件下包含的子程序有:延时程序、LCD1602初始化程序、写命令程序和写数据程序。由于只是使用LCD1602进行显示,所以不需要读命令数据程序。二、中断程序模块程序共使用三个中断:INT0、T0、T1中断。INT0中断用于进入或退出调价模式,打开计费器后进行计费之前,随时可以利用INT0中断进行调价,开始计费之后则关闭INT0中断,不能调价。T0定时中断形成行车脉冲,模拟汽车行驶,每0.05s产生一次中断,每20次中断为1s,每秒行驶10米距离。程序中设置一个变量flag2用来表示按下的是K4还是K5,按下K5键T0中断中的t1开始计时,模拟汽车行驶,再次按下则暂停计时,即
10、停止行驶;按下K4,T0中的t2开始计时,计算等待的时间。T1中断用于数码管显示,由于数码管是动态显示,所以在此较为复杂的主程序中运行会产生闪烁,将数码管显示程序置于T1中断程序中,就不会再闪烁。三、其它程序模块其它程序模块主要包括数码管显示模块、数据计算模块、调价模块、按键扫描模块等。数码管显示模块用于显示总费用,使用四位一体数码管显示,但只用其中后三位,显示0到99.9。数据计算模块主要计算行车里程、等待时间、等待收费、总收费。调价模块用于调整起价、每公里单价和等待收费单价。按键扫描模块用于检测用户按下了哪些功能键。4.3 程序框图本设计中,软件设计采用模块化操作,利用各个模块之间的相互联
11、系,在设计中采用主程序调用子程序的方法,使程序通俗易懂。 在main函数开始,要对系统初始化,和对硬件设备进行初始化,并使硬件处于就绪状态。通过判断是否计费,调价,清零等状态,来分别调用不同的子程序,使程序在设计之前,就有了很强的逻辑关系。这些对应于硬件就是通过按下各个控制开关,来分别进行不同的动作,最后显示屏根据输入的信息,来显示不同的数据信息,这就达到了软件控制硬件,同时输入信息控制输出信息的目的。整个程序的流程图如下:开始TO、T1、INT0初始化LCD1602初始化LCD默认显示 是否按下S1键 否 否 调价程序是 是是否按下S4或S5数码管、LCD显示数据图4-1 程序流程图从图中可
12、以看出,程序开始就对LCD1602、T0 T1计数器和INT0进行了初始化,1602显示器开始显示计费标准,之后判断是否进行调整收费标准,如需调整则进入调整程序进行价格调整,若不需要调整则判断是否开始计费或者计时,若开始则进入数据处理程序进行各数据计算,计算结果显示在LCD1602和数码管上,若不开始计价或者计时,则只用LCD1602显示收费标准。5 PROTEUS仿真5.1 总仿真电路图使用PROTEUS搭建好电路,下载程序进行仿真。仿真电路包含AT89S51单片机、按键控制电路、74HC573锁存器、四位共阴极数码管和LCD1602液晶屏。总电路如图5-1所示。图5-1 仿真电路图5.2
13、不调价仿真先使用默认的价钱进行仿真,即起步价3元,每公里1元,每等待10分钟0.5元。通过计算,行驶10公里且不等待收费10块钱,对比仿真结果图5-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元进行仿真,等
14、待10分钟,显示计费12.5元,与计算结果图5-5相同。图5-5 仿真四6 心得体会出租车计费器系统的设计已经全部完成,能按预期的效果进行模拟汽车启动,停止,暂停等功能,并能够通过LCD和数码管显示车费数目。本款出租车计价器包括单价输出、单价调整、显示当前总费用等功能。另外,多功能出租车计价器还具有性能可靠、电路简单、成本低、实用性强等特点,加上经过优化的程序,使其有很高的智能化水平。 经过自己努力,基本上完成了设计要求的内容,在系统可行性分析、原理图设计等方面都作了许多实际工作,取得了一些成绩,同时也遇到了一些问题,存在一些不足。经过这几天的学习和工作,我觉得自己不论是在理论知识方面还是在动
15、手能力方面都有了不小的进步,自己从中受益匪浅。这次设计很好的把以前学到的理论知识应用于实践,使我认识到理论知识与实践之间有一定的差距,只有通过不断的努力学习和实践才能很好的把理论知识应用到实践当中,也只有通过不断的实践才能对理论知识的理解。 通过这次设计不仅学会了如何去查找相关资料,更重要的是通过查找资料和翻阅书籍学到了不少知识,扩大了知识面,提高了知识水平。经过单元设计和系统设计巩固了以前所学的专业知识,自己真正认识到理论联系实际的重要性,为以后的学习和工作提供了很多有价值的经验。通过这次设计不仅增强了自己的动脑能力和动手能力,也提高了我思考问题、分析问题、解决问题的能力,更重要的是学会用工
16、程化的思想来解决问题。这在以前的学习过程中是不曾学到的。在短短的三个月时间内完成设计内容,在很大程度上得益于老师的帮助。这次设计是我认真认识到完整、严谨、科学分析问题、解决问题的思想是多么的重要,只有拥有了科学的态度才能设计出有用的产品。另外通过本次设计,使我认识到自己理论知识的应用能力有很大的欠缺,需要在以后的学习中进一步提高。参考文献1张毅坤等.单片微型计算机原理及应用.西安电子科技大学出版社2李建忠.单片机原理及应用.西安电子科技大学出版社3张毅刚,彭喜元,彭宇.单片机原理及应用.高等教育出版社4康华光.电子技术基础数字部分.高等教育出版社5刘坤,赵红波,张宪栋.51单片机开发技术大全.
17、人民邮电出版社6李广弟,朱月秀,冷祖祁.单片机基础.北京航空航天大学出版社附录1 原件清单名称规格数量电阻10K1个排阻1K1排可变电阻1个极性电容10uF1个非极性电容33pF2个0.1uF2个晶振12MHz1个LCD16021个数码管1个芯片AT89S511个74HC5731个附录2 程序主程序:#include <reg52.h>#include "1602.h"#define uint unsigned int#define uchar unsigned charuchar table3=3,1,5; /起步价,单价,等待单价uchar table13;
18、uchar code table2=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/09uchar code table3=0xbf,0x86,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;
19、/用于K4和K5按键状态uchar num=0;uint x;uint t1,t2; /t1为T0定时,表示汽车行走了t1秒 /t2为T1定时,表示等待了t2秒sbit K1=P32; /设置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(); /计算行走里程、等待收费
20、、总收费void tiaojia(); /按K1 K2 K3调整收费标准void LcdDisplay(); /1602显示void delay(uint c); /延时c毫秒void Int0Configuration(); /外部0中断初始化void T_0Config(); /定时器0中断初始化void T_1Config(); /定时器1中断初始化/*主程序*/void main()LCD1602init();T_0Config();T_1Config();Int0Configuration();while(1)if(SetState=1)tiaojia();/按下K1则调整价格,不按
21、则跳过elseKey();/按键选择计费或计时Data(); /数据处理LcdDisplay(); /1602显示 /*数码管显示程序*/void SMG() /共阴极数码管for(num=0;num<3;num+)switch(num) /table1存放的是总金额数case(0):LSA=1;LSB=0;LSC=1;LSD=1;P0=table2table1num;delay(1);P0=0; break;case(1):LSA=1;LSB=1;LSC=0;LSD=1;P0=table3table1num;delay(1);P0=0; break;case(2):LSA=1;LSB=
22、1;LSC=1;LSD=0;P0=table2table1num;delay(1);P0=0; break;/*调价程序*/ void tiaojia() /调整价格程序uchar i;if(K2=0)/检测按键K2按下 光标移动delay(10);if(K2=0)SetPlace+; /光标向前移一位if(SetPlace>2)SetPlace=0;while(i<50)&&(K2=0)/检测按键是否松开delay(10);i+;i=0;if(K3=0)/检测按键K3按下 调节价格delay(10);/消除抖动if(K3=0)if(SetPlace<2)ta
23、bleSetPlace=tableSetPlace+1;if(tableSetPlace&&0x0f)>9) /换成BCD码。tableSetPlace=tableSetPlace+6; /转换为BCD码之后,就相当于十进制数了if(tableSetPlace>0x9)&&(SetPlace=0)/起步价tableSetPlace=0;if(tableSetPlace>0x9)&&(SetPlace=1)/单价tableSetPlace=0;elsetableSetPlace=tableSetPlace+5;if(tableSe
24、tPlace&&0x0f)>9) /换成BCD码。tableSetPlace=tableSetPlace+6; /转换为BCD码之后,就相当于十进制数了if(tableSetPlace>0x99)&&(SetPlace=2) /等待单价的10倍tableSetPlace=0;while(i<10)&&(K3=0) /检测按键是否松开delay(10);i+;i=0;/*数据处理计算程序*/void Data() /计算行走里程、等待收费、总收费kilometre=(10*t1)/100;/1000!min=t2/600; /t2
25、/600是等待了多少个10分钟waitm=min*table2; /不/10,在money处也不*10,正好抵消if(kilometre<=3)money=10*table0+waitm;elsemoney=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退出计时并进入计费模式/再按下则退出计费模式delay(10);if(K5=0)ET0=1; /开T0中断TR0=1;
26、/启动定时器flag1=!flag1;if(flag1=1)flag2=1;elseflag2=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); /起步价LcdWriteCom(0x80+0x05);LcdWriteData('P
27、');LcdWriteData(':');LcdWriteData('0'+table1); /每公里单价 1LcdWriteCom(0x80+0x0a);LcdWriteData('W'); LcdWriteData(':');LcdWriteData('0'+ (table2/10);/等待每10分钟单价 0.5元 LcdWriteData('.'); LcdWriteData('0'+ (table2%10);LcdWriteCom(0x80+0x40);LcdWrit
28、eData('T');LcdWriteData('I');LcdWriteData('M');LcdWriteData('E'); LcdWriteData(':');LcdWriteData('0'+(t2/60)/10); /等待时间(t2/60) 099LcdWriteData('0'+(t2/60)%10);LcdWriteCom(0x80+0x48);LcdWriteData('L');LcdWriteData('O');LcdWriteDa
29、ta('N');LcdWriteData('T'); LcdWriteData('H');LcdWriteData(':'); LcdWriteData('0'+kilometre/10); /行走里程LcdWriteData('0'+kilometre%10);/*定时器T0及T0中断*/void T_0Config()TMOD=0x01;PT0=1; /T0设置为高优先级TH0=(65535-50000)/256; / 0.05STL0=(65535-50000)%256; /给定时器装初值,程
30、序启动之后定时器开始计时EA=1;void T_0() interrupt 1TH0=(65535-50000)/256; / 重装初值TL0=(65535-50000)%256;time1+;if(time1>=20) /1Stime1=0;switch(flag2) /按K5则t1+,按K4则t2+ /原因是两个程序公用一个定时器case(1):t1+;break;case(2):t2+;break;/*定时器T1及T1中断*/void T_1Config()TMOD=0x10;TH1=(65535-10000)/256; / 0.05STL1=(65535-10000)%256;
31、/给定时器装初值,程序启动之后定时器开始计时EA=1;TR1=1;ET1=1;void T_1() interrupt 3TH1=(65535-10000)/256; / 重装初值TL1=(65535-10000)%256;SMG(); /数码管显示在中断中,这样就不会闪了/*外部中断0及中断*/void Int0Configuration() /设置INT0IT0=1;/跳变沿触发方式(下降沿)EX0=1;/打开INT0的中断允许。EA=1; /打开总中断void Int0() interrupt 0/如果按下了K3就进入中断 delay(10);if(K1=0)switch(SetState)case 0:SetState=1;break;case 1:SetState=0;break;SetPlace=0;/*
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030中国房地产金融行业发展前景及发展策略与投资风险研究报告
- 中班下期末家长会课件
- 2024年沿河土家族自治县“特岗计划”招聘考试真题
- 水电施工合同协议书范本
- 专职教师聘用合同范本
- 美发店染色返工合同范本
- 下村承包农田合同范本
- 转让固定资产的合同协议
- 茶叶经销商合同协议范本
- 2025深入探讨建筑工程合同的风险管理与控制
- 安保工作月度总结
- 开业美容项目活动方案
- 2025年技术玻璃制品行业市场调研报告
- 2025至2030高纯氯化钾行业产业运行态势及投资规划深度研究报告
- 2025年吉林省中考数学试卷真题(含答案详解)
- 2025年中国自由锻件行业发展运行现状及投资潜力预测报告
- 医学美容技术专业教学标准(高等职业教育专科)2025修订
- QGDW11970.7-2023输变电工程水土保持技术规程第7部分水土保持设施质量检验及评定
- 变电站创优工程汇报
- 党课课件含讲稿:以作风建设新成效激发干事创业新作为
- DB62T 4134-2020 高速公路服务区设计规范
评论
0/150
提交评论