最新版基于51单片机的出租车计价器带仿真及程序毕业设计.docx
《最新版基于51单片机的出租车计价器带仿真及程序毕业设计.docx》由会员分享,可在线阅读,更多相关《最新版基于51单片机的出租车计价器带仿真及程序毕业设计.docx(23页珍藏版)》请在冰豆网上搜索。
最新版基于51单片机的出租车计价器带仿真及程序毕业设计
毕业论文
基于51单片机的出租车计价器带仿真及程序
引言
现在各个城市出租车行业都已普及,因此出租车计价器的技术已经成熟,但是出租车计价器的市场还具有广阔的前景。
随着城市建设的日益完善,关乎城市面貌的出租车行业也将迅速发展,出租车计价器的的大批量需求也是毫无疑问的,所以未来出租车计价器的市场还是有相当大的潜力的。
本次出租车计价器设计以AT89S52单片机为中心,采用U18霍尔传感器对轮胎转数进行计数,实现对出租车里程的测量,并最终计算出结果。
其中采用寄存器芯片AT24C02使系统在掉电的时候对单价、里程、车轮长度等信息进行存储,采用时钟芯片DS1302来显示时间和在系统需要时进行计时。
输出采用两个4段数码显示管,而且根据按键有空车指示灯、等待查询指示灯、单程指示灯进行指示。
汽车计价器是乘客与司机双方的交易准则,它是出租车行业发展的重要标志,是出租车中最重要的工具。
它关系着交易双方的利益。
具有良好性能的计价器无论是对广大出租车司机朋友还是乘客来说都是很必要的。
因此,汽车计价器的研究也是有一定的应用价值的。
1绪论
1.1出租车计价器概述
我国在70年代开始出现出租车,但那时的计费系统大都是国外进口不但不够准确,价格还十分昂贵。
随着改革开放日益深入,出租车行业的发展势头已十分突出,国内各机械厂家纷纷推出国产计价器。
出租车计价器的功能从刚开始的只显示路程(需要司机自己定价,计算后四舍五入),到能够自主计费,以及现在的能够打一发票和语音提示、按时间自主变动单价等功能。
随着城市旅游业的发展,出租车行业已成为城市的窗口,象征着一个城市的文明程度。
本次设计的目的在于现在各大中城市出租车行业都已普及自动计价器,所以计价器技术的发展已成定局。
而部分小城市尚未普及,但随着城市建设日益加快,象征着城市面貌的出租车行业也将加速发展,计价器的普及也是毫无疑问的,所以未来汽车计价器的市场还是十分有潜力的。
1.2单片机的概述
计算机系统已明显地朝巨型化、单片化、网络化三个方向发展。
巨型化发展的目的在于不断提高计算机的运算速度和处理能力,以解决复杂系统计算和高速数据处理,比如系统仿真和模拟、实时运算和处理。
单片化是把计算机系统尽可能集成在一块半导体芯片上,其目的在于计算机微型化和提高系统的可靠性,这种单片计算简称单片机。
单片机的内部硬件结构和指令系统主要是针对自动控制应用而设计的所以单片机又称微控制器MCU(MicroControllerUnit)。
用它可以很容易地将计算机嵌入到各种仪器和现场控制设备中,因此单片机又叫做嵌入式微控制器(EmbeddedMCU)。
单片机自20世纪70年代问世以来,以其鲜明的特点得到迅猛发展,已广泛应用于家用电器、智能玩具、智能仪器仪表、工业控制、航空航天等领域,经过30多年的发展,性能不断提高,品种不断丰富,已经形成自动控制的一支中坚力量。
据统计,我国的单片机年容量已达1~3亿片,且每年以大约16%的速度增长,但相对于国际市场我国的占有率还不到1%。
这说明单片机应用在我国有着广阔的前景。
对于从事自动控制的技术人员来讲,掌握单片机原理及其应用已经成为必不可少的学习任务。
单片机的应用十分广泛,在工业控制领域、家电产品、智能化仪器仪表、计算机外部设备,特别是机电一体化产品中,都有重要的用途。
其主要的用途可以分为以下方面。
单片机的应用十分广泛,在工业控制领域、家电产品、智能化仪器仪表、计算机外部设备,特别是机电一体化产品中,都有重要的用途。
其主要的用途可以分为以下方面。
●显示:
通过单片机控制发光二极管或是液晶,显示特定的图形和字符。
●机电控制:
用单片机控制机电产品做定时或定向的动作。
●检测:
通过单片机和传感器的联合使用,用来检测产品或者工况的意外发生。
●通信:
通过RS-232串行通信或者是USB通信,传输数据和信号。
●科学计算:
用来实现简单的算法。
那么单片机是不是解决上述应用的唯一选择呢?
当然不是!
单片机最明显的优点是价格便宜,从几元人民币到几十元人民币。
这是因为这类芯片的生产量很大,技术也很成熟。
其次,单片机的体积也远小于其他两种方案。
单片机本身一般用40引脚封装,当然功能多一些的单片机也有引脚比较多的,如68引脚,功能少的只有10多个或20多个引脚,有的甚至只有8只引脚。
当然,单片机无论在速度还是容量方面都小于其他两种方案,但是在实际工作中并不是任何需要计算机的场合都要求计算机有很高的性能。
例如,控制电冰箱的控制器就不需要使用嵌入式系统,用一片51就可以轻松实现。
所以应用的关键是看能否够用,是否有很好的性能价格比。
51系列的单片机已经面世十多年,依然没有被淘汰,还在不断发展中,这就说明是它有广阔的应用前景。
2总体方案设计
本次设计是使用单片机技术来实现一个出租车的数字计价器,利用单片机丰富的IO端口,及其控制的灵活性,实现基本的里程计价功能和单双程价格调整、时钟显示功能等等。
具有性能可靠,电路简单、成本低、扩展空间大等特点。
2.1设计任务要求
2.1.1设计任务
设计一款基于AT89S52单片机的出租车数字计价器,通过对传感器的检测,对数值进行处理和显示。
2.1.2设计要求
一、基本要求
(1)能显示里程,单位为公里,最后一位为小数位。
(2)能显示金额数,单位为元,最后一位为小数位。
(3)可设定单程价格和往返价格,单程价格为2元公里,往返价格为1.5元公里。
(4)起步公里数为3公里,价格为5元,若实际距离大于3公里,按规则3计算价格。
(5)按暂停键,计价器可暂停计价,按查询键,可显示总等待时间。
二、发挥部分
(1)增加了空车指示功能,当无客人时,按下功能切换按键,空车指示灯亮。
(2)增加实时时间显示,无论计价器工作或者空车,都能显示实时时间,便于时间提醒。
(3)增加信息储存功能。
可以储存等待时间,里程和金额。
2.2设计的主要功能
本设计所设计的出租车数字计价器的主要功能有:
金额输出、路程输出、数据复位、计时计价、空车显示等。
输出采用LCD12864液晶显示屏显示。
2.3方案的选取
本设计是由软件设计和硬件设计两部分组成的。
软件设计要进行程序的编写和软件仿真;硬件设计要设计电路、硬件仿真和制作电路板。
2.3.1硬件设计方案
本系统的硬件设计主要包括单片机AT89S52、数据显示部件、U18霍尔传感器电路、里程计算及计价单元的设计。
在硬件设计过程中,充分利用各部件的功能,实现多功能的出租车计价器设计。
计价器的单片机系统框图如图2-1所示。
它由以下几个部件组成:
霍尔传感器单元、AT89S52单片机、金额显示、里程显示、电源。
利用单片机丰富的IO端口,及其控制的灵活性,实现基本的里程和价格的计算及显示功能。
图2-1计价器系统框图
2.3.2软件设计方案
本设计程序的采取C语言进行编写,使用KeiluVision4编译和Proteus7.4a仿真软件进行仿真调试。
其中的里程计算和费用计算方案如下。
1、里程计算
(1)霍尔传感器对车轮进行信号检测,产生并输出脉冲信号到单片机;
(2)单片机对传感器输出的脉冲信号进行计数,并进行km计算:
每一个信号代表轮胎旋转一周,设轮胎的周长为2m;每km产生的信号数为500,里程显示为N×2m=2N(km)
2、费用计算
(1)出租车的起步费为5元,并且3km内不需额外计价;
(2)出租车行驶3km后,单程2元km,双程1.5元km。
(3)等待收费的标准为5分钟算一公里;
(4)暂停时计价器暂停计价,不收费用。
3硬件设计
本设计的硬件设计包括单片机AT89S52单元、测距单元、显示单元(数码管显示金额、等待时间和里程,指示灯对单双程切换指示、空车指示、等待计时指示)、按键单元、时钟单元和储存单元。
3.1AT89S52单片机及最小系统
1、AT89S52单片机
AT89S52具有如下特点:
40个引脚,8kBytesFlash片内程序存储器,256bytes的随机存取数据存储器(RAM),32个外部双向输入输出(IO)口,3个16位可编程定时计数器,全双工串行口,看门狗(WDT)电路,片内时钟振荡器。
图3-1AT89S52引脚图
P0口有二个功能:
1、外部扩展存储器时,当做数据地址总线。
2、不扩展时,可做一般的IO使用,但内部无上拉电阻,作为输入或输出时应在外部接上拉电阻。
P1口只做IO口使用:
其内部有上拉电阻。
P2口有两个功能:
1、扩展外部存储器时,当作地址总线使用。
2、2、做一般IO口使用,其内部有上拉电阻。
3、P3口有两个功能:
除了作为IO使用外(其内部有上拉电阻),还有一些特殊功能,由特殊寄存器来设置。
设计中用到的单片机各管脚(图3-1)功能以及与其他模块连接介绍如下:
VCC:
接+5V电源。
VSS:
接地。
时钟引脚:
XTAL1和XTAL2两端接晶振和30PF的电容,构成时钟电路。
它可以使单片机稳定可靠的运行。
RST:
复位信号输入端,高电平有效。
当在此引脚加两个机器周期的高电平时,就可以完成复位操作。
P1.0:
接功能按键。
P1.2:
接空车指示灯。
P0口接显示屏数据口,P2口接显示屏控制口。
P3.4:
接霍尔传感器的输出口。
P3.5:
接时钟电路DS1302的RST口。
P3.6:
接DS1302的SCLK口。
P3.7:
接DS1302的IO口。
2、单片机最小系统
复位电路和晶振电路是AT89S52工作所需的最简外围电路。
单片机最小系统电路图如图3-2所示。
图3-2单片机最小系统
AT89S52的复位端是一个史密特触发输入,高电平有效。
RST端若由低电平上升到高电平并持续2个周期,系统将实现一次复位操作。
在复位电路中,按一下复位开关就使在RST端出现一段时间的高电平,外接11.0592M晶振和两个30pF电容组成系统的内部时钟电路。
3.2测距单元
本次设计我们选取了霍尔传感器来进行里程测量。
霍尔器件是一种磁传感器。
用它们可以检测磁场及其变化,可在各种与磁场有关的场合中使用。
霍尔器件以霍尔效应为其工作基础。
霍尔器件具有许多优点,它们的结构牢固,体积小,重量轻,寿命长,安装方便,功耗小,频率高,耐震动,不怕灰尘、油污、水汽及盐雾等的污染或腐蚀。
霍尔器件分为:
霍尔元件和霍尔集成电路两大类,前者是一个简单的霍尔片,使用时常常需要将获得的霍尔电压进行放大。
后者将霍尔片和它的信号处理电路集成在同一个芯片上。
本次设计选取了霍尔集成电路来测量里程。
里程测量是通过将霍尔传感器的集成电路安装在车轮上方的铁板上,将磁铁安装在车轮上,旋转的车轮将磁铁对准集成电路时,霍尔传感器会输出一个脉冲信号,送到单片机,经过单片机的计算处理,将行驶的里程送到显示单元并显示出来。
其原理示意图如下:
图3-3传感器测距示意图
U18是一种利用霍尔效应做成的半导体集成电路器件,它被设计在交变磁场中运行,特别是能在低电源电压和长时间运行温度范围可达到125℃。
这种霍尔IC可用作各种类型的传感器(速度传感器、位移传感器、转速传感器等等),接触开关以及相类似的应用场合。
其工作电压比较宽(2.5~20V),可运行在较大的温度范围内(-20℃~125℃),其输出的信号符合TTL电平标准,可以直接接到单片机的IO端口上,而且其最高检测频率可达到1MHZ。
霍尔传感器的特性如图3-4所示,其中BOP为工作点“开”的磁感应强度,BRP为释放点“关”的磁感应强度。
当外加的磁感应强度超过动作点BOP时,传感器输出低电平,当磁感应强度降到动作点BOP以下时,传感器输出电平不变,一直要降到释放点BRP时,传感器才由低电平跃变为高电平。
BOP与BRP之间的滞后使开关动作更为可靠。
U18集成霍耳开关由稳压器A、霍耳电势发生器(即硅霍耳片)B、差分放大器C、施密特触发器D和OC门输出E五个基本部分组成。
在输入端输入电压VCC,经稳压器稳压后加在霍尔电势发生器的两端,根据霍尔效应原理,当霍尔片处在磁场中时,在垂直于磁场的方向通以电流,则与这二者相垂直的方向上将会产生霍尔电势差VH输出,该VH信号经放大器放大后送至施密特触发器整形,使其成为方波输送到OC门输出。
当施加的磁场达到工作点(即Bop)时,触发器输出高电压(相对于地电位),使三极管导通,此时OC门输出端输出低电压,三极管截止,使OC门输出高电压,这种状态为关。
这样两次电压变换,使霍尔开关完成了一次开关动作。
图3-4U18霍尔传感器和其输出特性
U18霍尔传感器有3个外接口,2个是电源的正负极接口,最后一个是脉冲信号输出口,只要将霍尔传感器的信号输出端接到单片机的端口上便可以实现距离检测。
其中,单片机的P3.2(INT0)引脚作为信号的输入端,采用外部中断0进行计数。
车轮每转一圈,霍尔传感器就产生一个脉冲信号,根据霍尔效应原理,当霍尔片处在磁场中时,霍尔传感器的输出端输出低电平。
当车轮转动一圈时小磁铁提供一个磁场,则霍尔传感器输出一次低电平完成一次数据采集,从而产生信号。
霍尔传感器检测并输出信号到单片机的INT0或INT1计算脉冲输入端,引起单片机的中断,对脉冲计数,当计数达到特定的次数时,里程就会增加,单片机对里程进行计算后,通过接口电路将计算好的结果传送到数码管并显示出来。
3.3按键单元
本设计的按键单元电路(如图3-5)仅有一个功能按键,也就是是否计价控制键,其功能是开启计价模式,并控制空车指示灯的亮灭。
3.4时钟单元
本设计采用基于DS1302的时钟电路(如图3-6)对时间进行实时显示,单片机掉电对其没有影响。
用数码管表现出来,当出租车空车时就显示时间,给人时间提示。
图3-6时钟电路单元
3.5显示单元
本次课程设计采用的是LCD12864液晶显示屏,其功能十分强大,液晶显示屏(LCD)用于数字型钟表和许多便携式计算机的一种显示器类型。
1、液晶和液晶显示
LCD显示使用了两片极化材料,在它们之间是液体水晶溶液。
电流通过该液体时会使水晶重新排列,以使光线无法透过它们。
因此,每个水晶就像百叶窗,既能允许光线穿过又能挡住光线。
液晶显示器(LCD)目前科技信息产品都朝着轻、薄、短、小的目标发展,在计算机周边中拥有悠久历史的显示器产品当然也不例外。
在便于携带与搬运为前题之下,传统的显示方式如CRT映像管显示器及LED显示板等等,皆受制于体积过大或耗电量甚巨等因素,无法达成使用者的实际需求。
而液晶显示技术的发展正好切合目前信息产品的潮流,无论是直角显示、低耗电量、体积小、还是零辐射点,都能让使用者享受最佳的视觉环境。
这种显示器件的最大特点是:
(1) 微功耗,每个显示字符只有几个毫安。
是所有显示器件中功耗最小的。
(2) 低压驱动,一般扭曲向列型(TN)器件阀值电压仅1.5-2V,可以直接与大规模集成电路直接匹配。
(3) 平板形结构,尺寸可以很大,也可以很小。
显示的有效面积相对来说也是比较大的。
显示图案的自由度也相当大
(4) 液晶显示器件属于被动型,不发光,靠调制外界光达到显示目的。
因此,在阳光下也能看的很清楚,既没有刺目感,也不会引起视觉疲劳,更没有射线辐射,伤害视力。
所以它是高信息量信息显示的理想器件。
(5)液晶显示器件虽然所需材料都有特殊、较高的要求,但是其结构简单,而且工艺非常适应现代化规模生产。
所以其生产成本不高。
正因为它具有这些特点,所以在一切小型、便携、数字、智能化仪表中具有最大竞争力;在大信息量、彩色化、微型及巨型显示领域,液晶显示器件也具有很大的潜力。
2、液晶显示器各种图形的显示原理
(1)线段的显示
点阵图形式液晶由M×N个显示单元组成,假设LCD显示屏有64行,每行有128列,每8列对应1字节的8位,即每行由16字节,共16×8=128个点组成,屏上64×16个显示单元与显示RAM区1024字节相对应,每一字节的内容和显示屏上相应位置的亮暗对应。
例如屏的第一行的亮暗由RAM区的 000H——00FH的16字节的内容决定,当(000H)=FFH时,则屏幕的左上角显示一条短亮线,长度为8个点;当(3FFH)=FFH时,则屏幕的右下角显示一条短亮线;当(000H)=FFH,(001H)=00H,(002H)=00H,„„(00EH)=00H,(00FH)=00H时,则在屏幕的顶部显示一条由8段亮线和8条暗线组成的虚线。
这就是LCD显示的基本原理。
(2)字符的显示
用LCD显示一个字符时比较复杂,因为一个字符由6×8或8×8点阵组成,既要找到和显示屏幕上某几个位置对应的显示RAM区的8字节,还要使每字节的不同位为“1”,其它的为“0”,为“1”的点亮,为“0”的不亮。
这样一来就组成某个字符。
但由于内带字符发生器的控制器来说,显示字符就比较简单了,可以让控制器工作在文本方式,根据在LCD上开始显示的行列号及每行的列数找出显示RAM对应的地址,设立光标,在此送上该字符对应的代码即可。
汉字的显示
汉字的显示一般采用图形的方式,事先从微机中提取要显示的汉字的点阵码(一般用字模提取软件),每个汉字占32B,分左右两半,各占16B,左边为1、3、 5„„右边为2、4、6„„根据在LCD上开始显示的行列号及每行的列数可找出显示RAM对应的地址,设立光标,送上要显示的汉字的第一字节,光标位置加 1,送第二个字节,换行按列对齐,送第三个字节„„直到32B显示完就可以LCD上得到一个完整汉字。
4软件设计
本系统的软件设计主要分为系统主程序、数据处理子程序、和键盘扫描子程序四个模块,下面对每一块进行介绍。
4.1系统主程序
本设计中,软件设计采用模块化操作,利用各个模块之间的相互联系,在设计中采用主程序调用各个子程序的方法,使程序通俗易懂,我们设计了整体程序流程图。
在main函数编写开始,要进行初始化,包括对系统初始化和对硬件设备进行初始化,并使硬件处于就绪状态。
在主程序模块中,需要完成对各接口芯片的初始化、出租车起价和单价的初始化、中断向量的设计以及开中断、循环等待等工作。
系统流程图如下图4-1。
图4-1系统主程序流程图
4.2数据处理子程序
每当霍尔传感器输出一个低电平信号就使单片机中断一次,在计数中断服务程序,里程和金额都相应变化,当然等待时间也换算成里程(当速度小于5km(void)
{
init_lcd();
clearscreen(0);
setline(0);
TMOD=0x06;
distance_km=0;
TH0=0xCE;
TL0=0xCE;
EA=1;
TR0=1;
Init_DS1302();
while
(1)
{
if(P10==0)
{
ET0=1;
P12=0;
display(distance_km);
display1(money);
}
else
{
ET0=0;
P12=1;
distance_km=0;
money=0;
display(distance_km);
display1(money);
}
displayc(1,0,0*16,li);
displayc(1,0,1*16,chen);
displayc(1,0,2*16,shu);
displaye(1,0,6*8,num,14);
displayc(1,3,0*16,jin);
displayc(1,3,1*16,e);
displaye(1,3,5*8,num,14);
display2();
}
}
lcd12864.c
#include{
column=column&0x3f;最终列
column=column|0x40;起始列
lcd_wcmd(column);
}
voidsetonoff(ucharonoff)
{
onoff=0x3e|onoff;
lcd_wcmd(onoff);
}
voidselectscreen(ucharscreen)
{
switch(screen)
{
case0:
cs1=0;delay
(2);cs2=0;delay
(2);break;
case1:
cs1=0;delay
(2);cs2=1;delay
(2);break;
case2:
cs1=1;delay
(2);cs2=0;delay
(2);break;
default:
break;
}
}
voidclearscreen(ucharscreen)
{
uchari,j;
selectscreen(screen);
for(i=0;i<8;i++)
{
setpage(i);
setcolumn(0);
for(j=0;j<64;j++)
{
lcd_wdat(0x00);
}
}
}
voidinit_lcd()
{
readbusy();
selectscreen(0);
setonoff(0);
selectscreen(0);
setonoff
(1);
selectscreen(0);
clearscreen(0);
setline(0);
}
code.[]={0x24,0x24,0xA4,0xFE,0x23,0x22,0x00,0x3E,0x22,0x22,0x22,0x22,0x22,0x3E,0x00,0x00,
0x08,0x06,0x01,0xFF,0x01,0x06,0x40,0x49,0x49,0x49,0x7F,0x49,0x49,0x49,0x41,0x00};
ucharcodeshu[]={0x90,0x52,0x34,0x10,0xFF,0x10,0x34,0x52,0x80,0x70,0x8F,0x08,0x08,0xF8,0x08,0x00,
0x82,0x9A,0x56,0x63,0x22,0x52,0x8E,0x00,0x80,0x40,0x33,0x0C,0x33,0x40,0x80,0x00};
ucharcodejin[]={0x00,0x80,0x80,0x40,0x20,0x50,0x48,0x44,0xC3,0x44,0x48,0x50,0x20,0x40,0x80,0x80,
0x00,0x40,0x40,0x42,0x4A,0x72,0x42,0x42,0x7F,0x42,0x42,0x62,0x5A,0x42,0x40,0x40};
ucharcodee[]={0x00,0x00,0x8C,0x44,0xB5,0x26,0xA4,0x64,0x0C,0x02,0xF2,0x1A,0xD6,0x12,0xF2,0x02,
0x00,0x10,0x08,0xFC,0x4A,0x49,0x4A,0xFC,0x08,0x80,0x4F,0x30,0x0F,0x10,0x2F,0xC0};
ucharcodegong[]={0x00,0x00,0x80,0x40,0x20,0x18,0x06,0x80,0x00,0x07,0x18,0x20,0x40,0x80,0x00,0x00,
0x00,0