基于51单片机的出租车计价器的设计
引言
在科学技术和经济水平快速发展的21世纪,乘坐出租车和网约车出行已经成为一种非常重要的交通出行方式。行业的转型发展让出租车行业迎来了一场新纪元。但是在出租车行业迅速发展的同时,也出现了很多问题。经营管理不善,司机服务不规范,随意定价收款的现象也是层出不穷。为了根治这种现象,出租车计价器孕育而生。出租车计价器的问世不仅减少了行业的乱象,而且让管理者和经营者更加诚信的服务乘客,在很大程度上改善了行业风气。
但是目前国内广泛使用的出租车计价器功能单一,不能满足人们的需求,人们更致力于一种功能齐全,生产成本低的出租车计价器。伴随着科技水平的提高,出租车计价器也迎来了新的变革,这时第二代出租车计价器问世了。
设计选用宏晶公司生产的STC89C52单片机,加上外围芯片,设计出一个性能稳定,实用性强的出租车计价器。电路主要由测速模块、时钟模块、测温模块组成。设计出功能齐全、实用性强的出租车计价器。此设计能够实现计价器的各项功能要求,使用适当的接口作为输人输出通道,实现对电机驱动模块的运行控制,以达到对出租车各项性能指标的测量,具有很大的市场前景以及开发空间。
总体设计框图如图1-1所示,设计主要由单片机模块,按键控制模块和LCD12864显示模块组成,它们的作用分别为:
显示模块:用LCD12864显示屏显示出租车计价器的各项性能指标,显示当前车速、温度、总费用、起步价、每公里价格等功能。起步价和每公里价格也能通过按键进行设置并且显示过程。
采用STC89C52作为主控芯片,管脚图如图2-1所示。51单片机的系统指令,内部结构相对简单。同时51单片机的I/O脚的设计和使用非常简单,指令系统规范。
采用PIC系列为核心控制器。PIC单片机将各种输入输出的接口都集成在一块芯片上,它较适合应用在功能单一的设计中。
采用直流电机为动力元件。安装较为简单,价格较为便宜。在给定的负载条件下,可以根据设计需要人为改变电机转速,更加有利于出租车计价器调速测速功能的实现。
采用步进电机为动力元件。步进电机不会以连续的方式旋转,而是以离散的步长或增量移动,不适合模拟出租车的运行速度。步进电机适用于对精度要求大的设计。
综上所述,由于本设计需要稳定的改变速度,同时速度变化较大。另一方面直流电机较为便宜,因此设计选择方案一,用直流电机作为电动机。
采用L298N电机驱动为控制器。如果改变输入,能够实现电机的转向。更适用于模拟小车行驶。它拥有双通道输出,A输出和B输出,可以实现两路电机进行不同的控制与操作。
采用ULN2003芯片作为控制器。ULN2003能够承受高压,内部是非门,输入与输出是相反的。它的电压增益高,温度范围宽。在工作时电压高。
综上所述,电机选用5V直流电机,设计只需要用电机模拟车轮转动,对电机的控制与操作要求低。用ULN2003驱动较为简单,更容易实现要求,因此选用ULN2003驱动作为本次设计的电机驱动模块。
采用霍尔传感器测速。霍尔传感器具有获取信息准确、体积小、测量范围广、精度高等优点。霍尔传感器对环境的要求低,同时结构简单。但是该方案利用线圈切割磁感线产生感应电动势,易受到电磁波干扰。
采用光电式测速。主要原理是将光信号转化为电信号。它获取信息准确,但对环境的要求较高,容易受到环境中的光干扰。
- 系统硬件电路设计
- 单片机最小系统的电路设计
- STC89C52芯片模块电路设计
- 单片机最小系统的电路设计
依据所选的方案,选用STC89C52作为出租车计价器的主控芯片,利用STC89C52的各个端口,实现设计所需要的各个功能。单片机端口可以控制显示模块、驱动电机模块、温度传感器模块、霍尔传感器模块以及DS1302时钟模块,还能控制各个按键的功能。设计使用单片机的P10,P11接口和直流电机驱动模块相连。使用P37接口与温度传感器模块相连。使用P12,P13,P14接口连接K1,K2,K3按键。用P32接口连接霍尔传感器模块。用P20,P21,P22接口连接DS1302时钟芯片。P9接口连接复位电路。P18,P19接口连接晶振电路。电路设计简单,STC89C52芯片模块电路设计如图3-1所示。
图3-1 STC89C52电路设计图
3.1.2 系统晶振电路设计
晶振电路能够产生和时钟一样准确的振荡电路,产生时钟脉冲信号,用于控制单片机程序执行的节拍和时序。Y1两端接入单片机的XTAL1和XTAL2,接入两个大小为30PF的电容。晶振电路设计如图3-2所示。
图3-2 晶振电路设计图
3.1.3 复位电路设计
使用单片机的RST接口连接复位电路,设计的复位电路由10uF的电容和10k的电阻接入RESET按键组成复位电路,设计如图3-3所示。
图3-3 复位电路设计图
3.1.4 电源电路设计
本设计采用经典的5V电源供电,为单片机提供电源,保障单片机工作电压的温度。电源电路设计如图3-4所示。
3.2 按键控制电路设计
根据设计功能要求,设置三个控制按键,分别命名K1、K2、K3。利用单片机的P12,P13,P14接口实现对出租车计价器设计的各个功能要求。通过编写软件代码,当通电时,初始状态为空车,初始状态会显示时钟和温度。按下K2按键可以驱动直流电机转动,通过延时实现调速,再长按K2实现加速,长按K3实现减速。在电机转动的同时可以利用霍尔传感器测速,并且将速度显示在LCD12864显示屏上,这就实现了出租车计价器的测速并且显示的功能。按下K1按键进入乘客已上车界面,在电机转动的同时进行测速,自动计算总费用并且将费用显示在LCD12864显示屏上。再次按下K1按键进入乘客已下车界面并且显示总费用。再按下K1将进入设置起步价的界面按下K2起步价加1,按下K3起步价减1,设置完起步价后按下K1保存退出,这样就实现了设置起步价的功能。继续按下K1进入设置每公里价格界面,按K2加一,按K3减一。设置完成后按下K1保存退出。按键控制电路设计如图3-5所示。
图3-5 按键控制电路设计
3.3 显示电路设计
根据设计的性能要求,设计了显示灯电路设计,显示灯电路由1K电阻R4和LED灯组成,当出租车超速时,红灯亮起提示超速。显示电路设计如图3-6所示。
系统设计采用ULN2003模块作为电机的驱动模块。ULN2003由七个NPN组成,如果直接用芯片的管脚驱动直流电机的话会使直流电机烧坏或者无法驱动。IN1-IN7是输入接口,OUT1-OUT7是输出接口。其内部是一个非门,输入与输出相反,ULN2003芯片不能直接输出高电平,需在外部接入上拉电阻,但是设计没有采用接入上拉电阻的方案。因此设计的电机电路在COM公共端接高电平,IN1输入通道连接单片机的P10接口接入高电平信号,IN2输入通道连接单片机P11接口,OUT1输出通道输出低电平,这样就能完成对电机的驱动,设计的电路图如图3-7所示。
图3-7 直流电机驱动电路设计图
4 系统软件设计
4.1主函数软件设计
系统需要使用到一下五种模式:无乘客、乘客以上车、乘客已下车、设置起步价、设置每公里价格。系统主函数程序设计流程如图4-1所示。前三个模式下操作基本相同,模式一的基本参数比模式二和模式三少,因为后面两种模式涉及到计算公里数和总价等等参数。基本参数包括温度、时间、起步价、是否有乘客乘坐或乘客上下车状态。以上所有模式按下K1都是切换到下一个模式,区别不同的是前三种模式下K2和K3是用于调速使用,后两种模式是用于调节价格。初始化系统采集时钟参数采集温度参数显示基本参数,接到乘客开始计费,乘客下车设置下一次起步价和设置下一次每公里价格。
部分程序:
#include "lcd12864.h"
#include "pwm.h"
#include "ds1302.h"
#include "key.h"
#include "ds18b20.h"
sbit MOTER=P1^0;
sbit LED=P1^1;
u8 t=0;
u8 key_value=0;
u8 flag=0;
u8 Ttemp_value=0;
u8 PF=5;
u8 duty=0;
u8 time=0;
float zprice=0;
void show_base();
void flagzero();
void flagone();
void flagtwo();
void flagthree();
void getandshow();
void main()
{
lcd12864_init();
ds18b20_init();
PWM_Init();
Exter0_Init();
Timer1_Init();
// ds1302_init();
while(1)
{
if(flag==0) flagzero();
else if(flag==1) flagone();
else if(flag==2) flagtwo();
else if(flag==3) flagthree();
}
}
void flagzero()
{
u8 flag0key=0;
zprice=0;
duty=0;
MOTER=0;
TR0=0;
show_base();
lcd12864_show_string(4,1,"乘客未上车!");
while(flag==0)
{
if(t==255) getandshow();
flag0key=key_scan(0);
if(flag0key==1) flag++;
else if(flag0key==2&&duty<=90)
{
duty+=10;
}
else if(flag0key==3&&duty>=10)
{
duty-=10;
}
if(duty>=time) MOTER=1;
else MOTER=0;
if(duty>=80)
{
LED=1;
}
else
{
LED=0;
}
t++;
}
lcd12864_clear();
}
void flagone()
{
u8 flag1key=0;
MOTER=0;
duty=0;
TR0=0;
show_base();
lcd12864_show_string(4,1,"乘客已上车!");
while(flag==1)
{
if(t==255) getandshow();
flag1key=key_scan(0);
if(flag1key==1) flag++;
else if(flag1key==2&&duty<=90)
{
duty+=10;
}
else if(flag1key==3&&duty>=10)
{
duty-=10;
}
if(duty>=time) MOTER=1;
else MOTER=0;
if(duty>=80)
{
LED=1;
}
else
{
LED=0;
}
t++;
}
lcd12864_clear();
}
void flagtwo()
{
u8 flag2key=0;
MOTER=0;
duty=0;
LED=0;
TR0=0;
show_base();
lcd12864_show_string(4,1,"乘客已到达!");
while(flag==2)
{
if(t==255) getandshow();
flag2key=key_scan(0);
if(flag2key==1) flag++;
t++;
}
lcd12864_clear();
}
内容包括:
需要完整的资料可在我的资源里下载,也可以加入我的纷传圈子,里面有资源压缩包的百度网盘下载地址及提取码。
纷传点击用微信打开即可,过程有点繁琐请见谅。
基于51单片机的出租车计价器的设计相关推荐
- 基于51单片机的出租车计价器(程序+仿真+论文)
1.主要功能 设计要求 : ①.不同情况具有不同的收费标准. 白天,晚上,途中等待(>10min 开始收费): ②.能进行手动修改单价 : ③.具有数据的复位功能: ④.具有启动计时开关.白天/ ...
- 51开发实例 基于51单片机的出租车计价器
一.系统设计 现如今网约车已经在我们的生活中非常普及,网约车和传统的出租车都离不开计价器,计价器的发展也日新月异,本次就是基于52单片机开发的出租车计价器,计价器的使用需要假定车辆是匀速运动的,通过时 ...
- 基于51单片机的出租车计价器含proteus仿真及电路图
本设计是针对城市出租车运营的一个计价器.设计基于AT89C52单片机为主控制芯片,通过霍尔传感器来给单片机产生脉冲,从而累计车轮旋转的圈数,利用算法来计算出行驶的路程,并根据相应的收费标准计算出应当收 ...
- 基于51单片机的出租车计价器proteus仿真原理图PCB
功能: 0.本系统采用STC89C52作为单片机 1.LCD1602液晶显示有四个状态 a) 时间显示 b) 时间设置 c) 计价器显示 d) 计价器设置 2.按键切换四个不同显示状态 3.默认为时间 ...
- c语言单片机计程车车费问题,基于51单片机的计程车计价器.doc
基于51单片机的计程车计价器 1.绪论 1.1课题背景及意义 随着出租车行业的发展,出租车已经是城市交通的重要组成部分,从加强行业管理以及减少司机与乘客的纠纷出发,具有良好性能的计价器对出租车司机和乘 ...
- 单片机检测电机频率c语言,基于51单片机的电动机测速表的设计.doc
基于51单片机的电动机测速表的设计 基于51单片机的电动机测速表设计 摘 要 本文介绍了采用光电传感器实施电机转速测量的方法.基本原理,完成了一种基于AT89C51单片机平台的电动机测速表的软硬件设计 ...
- 单片机遥控车c语言程序,基于51单片机的无线遥控小车设计[附发射接收程序]
/***************************************************************/ /*[基于51单片机的无线遥控小车设计] 作者王*茹 */ /*** ...
- 基于51单片机的电子万年历的设计-源代码
电子万年历的设计目录 电子万年历的设计 电子万年历的系统整体设计框图 所需要的元件 DS18B20模块 DS18B20的特点 DS18B20内部结构 DS18B20管脚排列 DS1302模块 SPI时 ...
- 基于51单片机的三角波信号发生器设计
基于51单片机的三角波信号发生器设计 一.任务要求: 设计内容 选择51单片机,晶振采用12MHz. 设计一个能产生50HZ至100HZ的三角波信号.通过0832/A芯片完成数模转换. 频率值由LED ...
最新文章
- alu是计算机中的什么东西,ALU,什么是ALU,ALU介绍--电子百科词库--科通芯城,IC及其他电子元器件交易型电商平台100%正品保证...
- 远程linux的几个工具
- 对cocos2dx引擎的改动
- VC调用C#写的DLL
- 又一个学期结束了,送给在校大学生几句话
- 异常:Error resolving template “xxx“, template might not exist or might not be accessible...解决办法
- strcat第二个参数变吗_您能解决这3个(看似)简单的Python问题吗?
- 传奇修改map地图教程_传奇gm如何增加或者修改服务器中的地图
- 程序化炒股软件有哪些?
- SQLMAP命令详解
- sql判断邮箱是否合法_用正则表达式验证邮箱和手机号
- MATLAB数字图像小系统
- 萤火虫小巷2(看完了)
- redis读写分离之lettuce
- struts2文件上传和下载
- linux下ace安装教程,linux下安装ACE开发环境
- 好的商城系统都是这个样子的
- c语言加法器程序代码,利用EDA设计加法器和减法器并且附有程序代码的实验报告...
- 【夜读】幸福的人,都拥有这5种好心态
- 南华大学2022第五届网络安全竞赛wp