当前位置: 首页 > news >正文

基于51单片机的出租车计价器霍尔测速设计

基于51单片机的出租车计价器霍尔测速设计

1. 系统功能介绍

本设计以STC89C52单片机为核心,结合LCD1602液晶显示模块、霍尔测速模块、电机与电位器调速模块、DS1302时钟芯片、AT24C02存储器以及按键电路,完成了一个模拟出租车计价器的完整系统。系统功能涵盖里程与时间双模式计价、实时显示、参数存储及用户设置功能,充分体现了出租车计价器的核心工作原理与运行逻辑。

其主要功能如下:

  1. 时间与日期显示:利用DS1302实时时钟模块,系统能够准确显示年、月、日、时、分、秒,确保时间信息的精准性。
  2. 电机与速度模拟:通过电位器调节电机转速,模拟出租车在不同速度下的运行状态。
  3. 霍尔测速与里程计算:霍尔传感器实时采集电机转速,并结合车轮参数实现里程的累积计算。
  4. 计价模式切换:系统支持按里程计价与按时间计价两种方式。当速度高于设定阈值时,自动进入里程计价;当速度低于阈值时,自动切换为时间计价。
  5. 存储功能:AT24C02用于掉电保存计价参数及用户设置,保证断电后数据不丢失。
  6. LCD显示与提示:LCD1602显示当前时间、日期、里程和计价信息,提供直观交互体验。
  7. 按键交互:设置按键用于价格与时间参数的调整,包含切换、加、减、设置四个独立按键,便于用户操作。

本系统的设计不仅实现了出租车计价器的基础功能,同时在硬件和软件架构上提供了扩展性,可进一步拓展如蓝牙数据传输、费用上传等功能。


2. 系统电路设计

在硬件架构上,系统以STC89C52单片机为核心控制器,各功能模块通过标准接口电路与单片机相连。整体电路设计遵循模块化原则,便于调试与维护。

2.1 单片机最小系统电路

STC89C52单片机作为系统的核心,提供主控功能。其最小系统包括:

  1. 时钟电路:采用12MHz晶振与两个30pF电容,保证单片机运行的稳定性。
  2. 复位电路:上电复位电路由电容、电阻及复位按键构成,确保单片机启动时进入稳定运行状态。
  3. 电源电路:5V稳压电源为单片机和各模块提供稳定电压。

2.2 LCD1602液晶显示模块

LCD1602负责显示系统的主要数据,包括时间、日期、里程和费用。LCD1602通过并行方式与单片机连接,数据口D0-D7连接至单片机P0口,RS、RW、E信号线分别接至单片机的控制引脚。

2.3 霍尔测速模块

霍尔传感器安装在电机端口,能够检测电机旋转的磁场变化并输出脉冲信号。单片机通过外部中断或定时器捕获脉冲数,从而计算电机的转速与车辆的模拟行驶里程。

2.4 电机与电位器调速模块

电机用于模拟出租车发动机的运行。电位器调节电机供电电压,从而改变转速,间接反映车辆行驶速度。通过这种设计,可以直观展示不同速度下的计价模式切换效果。

2.5 DS1302实时时钟电路

DS1302是一款常用的实时时钟芯片,支持时分秒、日期与闰年自动调整。其与单片机通过三线串行接口通信:RST、SCLK、IO。芯片内部自带时钟振荡器和备用电池接口,保证掉电后依然保持时间的准确性。

2.6 AT24C02存储模块

AT24C02是一款I²C总线的EEPROM存储芯片,主要用于保存用户设置的价格参数与初始数据。其与单片机通过SCL与SDA接口通信,具备掉电保存功能,保证系统掉电后不会丢失重要设置。

2.7 按键模块

四个独立按键分别为:切换、加、减、设置

  • 切换键:用于在不同参数和菜单间切换;
  • 加键:用于增加数值;
  • 减键:用于减少数值;
  • 设置键:用于进入或退出设置模式。

2.8 电源电路

系统统一采用+5V供电,部分模块内部通过稳压器进一步调节电压。必要时可增加滤波电容以保证电路稳定运行。


3. 程序设计

程序设计是本系统的核心,采用C语言编写并通过Keil进行开发,功能涵盖主控逻辑、外设驱动、数据存储与交互显示。

3.1 主程序结构

主程序完成系统初始化、功能选择、实时监控、模式切换和数据处理等功能。

#include <reg52.h>
#include "lcd1602.h"
#include "ds1302.h"
#include "at24c02.h"
#include "hall.h"void main()
{System_Init();  // 系统初始化while(1){DS1302_ReadTime();      // 读取实时时间Hall_CalcSpeed();       // 霍尔测速计算Update_Distance();      // 更新里程数据Fare_Calculation();     // 计价逻辑LCD_Display();          // 显示信息Key_Scan();             // 按键扫描处理}
}

3.2 LCD1602显示程序

LCD显示程序用于动态显示时间、里程与计价信息。

void LCD_Display()
{LCD_SetCursor(0,0);LCD_WriteString("Time:");LCD_WriteTime(current_time);   // 显示年月日时分秒LCD_SetCursor(1,0);LCD_WriteString("Km:");LCD_WriteFloat(distance);LCD_SetCursor(1,8);LCD_WriteString("Fare:");LCD_WriteFloat(fare);
}

3.3 霍尔测速与里程计算

通过霍尔传感器采集的脉冲数计算速度与里程:

void Hall_CalcSpeed()
{// 假设每转一圈产生N个脉冲,R为轮胎周长speed = (pulse_count / N) * R / time_interval;distance += (pulse_count / N) * R;pulse_count = 0; // 清零
}

3.4 计价模式逻辑

当速度高于阈值时,按里程计价;低于阈值时,按时间计价。

void Fare_Calculation()
{if(speed > SPEED_THRESHOLD){fare = distance * price_per_km;}else{fare += (elapsed_time / 60.0) * price_per_min;}
}

3.5 DS1302时钟模块程序

DS1302通过串行通信获取时间:

void DS1302_ReadTime()
{current_time.sec = DS1302_ReadByte(0x81);current_time.min = DS1302_ReadByte(0x83);current_time.hour= DS1302_ReadByte(0x85);current_time.date= DS1302_ReadByte(0x87);current_time.month=DS1302_ReadByte(0x89);current_time.year =DS1302_ReadByte(0x8D);
}

3.6 AT24C02存储程序

用于存储价格参数,掉电不丢失:

void AT24C02_SavePrice()
{I2C_WriteByte(0x00, price_per_km);I2C_WriteByte(0x01, price_per_min);
}void AT24C02_LoadPrice()
{price_per_km = I2C_ReadByte(0x00);price_per_min= I2C_ReadByte(0x01);
}

3.7 按键控制程序

实现参数设置功能:

void Key_Scan()
{if(KEY_SWITCH == 0) { mode = !mode; }  // 切换模式if(KEY_ADD == 0) { price_per_km++; }if(KEY_SUB == 0) { price_per_km--; }if(KEY_SET == 0) { setting_flag = !setting_flag; }
}

4. 总结

本设计实现了基于51单片机的出租车计价器系统,涵盖了里程与时间双模式计价、数据存储、实时显示与用户设置等功能。系统通过霍尔测速模块获取转速和里程数据,结合DS1302时钟实现时间计价,LCD1602实时显示多项信息,并利用AT24C02实现掉电保存。程序部分采用模块化设计,既便于调试,也利于后期扩展。

该设计不仅能够满足教学演示和实验研究的需求,还能够作为出租车计价器的简化原型,展示嵌入式系统在交通领域的应用价值。


文章转载自:

http://QX4bnFY5.dpmhz.cn
http://mC0dhuIT.dpmhz.cn
http://aJWsBpYd.dpmhz.cn
http://hFReRbqf.dpmhz.cn
http://KSfSSra6.dpmhz.cn
http://XqMY1fR9.dpmhz.cn
http://bPRBkq70.dpmhz.cn
http://km3bcC5o.dpmhz.cn
http://CHNda8Qq.dpmhz.cn
http://D51jN32Z.dpmhz.cn
http://kS11yUHl.dpmhz.cn
http://dZYTHLTI.dpmhz.cn
http://uE6XfKls.dpmhz.cn
http://oUlaHRiY.dpmhz.cn
http://WhWNbkJT.dpmhz.cn
http://qOJojZEc.dpmhz.cn
http://oCnmZ4dD.dpmhz.cn
http://uIU6K6l7.dpmhz.cn
http://HCM6pVEw.dpmhz.cn
http://IsBaQlTr.dpmhz.cn
http://gaUtedAY.dpmhz.cn
http://M0ucWU6g.dpmhz.cn
http://NqvWS7Vp.dpmhz.cn
http://gVTWzZbL.dpmhz.cn
http://9A1whxgO.dpmhz.cn
http://QXc0OMWx.dpmhz.cn
http://a1sZYcks.dpmhz.cn
http://ritkjXQx.dpmhz.cn
http://YESGfqEx.dpmhz.cn
http://WnwXnGFD.dpmhz.cn
http://www.dtcms.com/a/387137.html

相关文章:

  • 【笔记】Agent应用开发与落地全景
  • C++ STL底层原理系列学习路线规划
  • LAN口和WAN口
  • Dify + Bright Data MCP:从实时影音数据到可落地的智能体生产线
  • 数据库--使用DQL命令查询数据(二)
  • 【FreeRTOS】创建一个任务的详细流程
  • CKA06--storageclass
  • 宝塔安装以及无法打开时的CA证书配置全攻略
  • wend看源码-Open_Deep_Research(LangChain)
  • 摄像头文档识别与透视变化技术和背景建模技术(追踪)
  • 123、【OS】【Nuttx】【周边】效果呈现方案解析:find 格式化打印
  • DC-4靶机渗透
  • 大模型在线对话平台集锦(持续更新ing...)
  • JavaScript中 i++ 与 ++i
  • 【cookie】JavaScript操作增删改查
  • OC-AFNetworking
  • Java全栈学习笔记35
  • kylin v10 系统 上 qt 5.15.17版本构建及使用
  • Linux:基于环形队列的生产者消费模型
  • Nginx 配置 Vue 项目 Hash/History 模式路由跳转错误的解决方案
  • Linux Makefile与进度条
  • 硬件驱动——I.MX6ULL裸机启动(3)(按键设置及中断设置
  • 深度学习基本模块:RNN 循环神经网络
  • 【深度学习】PixelShuffle处理操作
  • 10.1 - 遗传算法(旅行商问题C#求解)
  • Java 集合入门:从基础到实战的完整知识指南
  • 《过山车大亨3 完整版》PSXbox版下月推出 预告片赏
  • P1107题解
  • 多目标数据关联算法MATLAB实现
  • 战略推理AI Agents:组装LLM+因果推断+SHAP