基于单片机的自行车里程表设计|附源码

基于单片机的自行车里程表设计

源码:点击下载源码

项目简介

这是一个基于51单片机的自行车里程表设计项目,能够实时显示自行车的行驶速度、累计里程,并提供时间显示、超速报警等功能。该项目适合作为单片机课程设计的学习案例,涵盖了多种常用外设的驱动与应用。

功能特点

  • 实时速度显示:通过检测车轮转动计算当前行驶速度(km/h)
  • 累计里程记录:自动累计行驶里程,支持数据掉电保存
  • 时间日期显示:集成DS1302实时时钟,显示年/月/日/时/分/秒/星期
  • 超速报警:可设置安全速度阈值,超速时蜂鸣器报警
  • 参数设置:支持按键设置车轮半径、安全速度、时间等参数
  • 数据持久化:使用AT24C02 EEPROM存储设置参数和里程数据

系统架构

硬件组成

模块 型号/说明
主控芯片 STC89C52/AT89S52系列单片机
显示模块 LCD1602液晶显示屏
时钟模块 DS1302实时时钟芯片
存储模块 AT24C02 EEPROM存储器
传感器 霍尔传感器/光电传感器(检测车轮转动)
报警模块 蜂鸣器

软件模块

复制代码
源程序/
├── mabiao.c      # 主程序文件
├── Data.h        # 数据定义头文件
├── Ds1302.h      # DS1302时钟驱动
├── AT24C02.h     # EEPROM驱动
└── STARTUP.A51   # 启动文件

核心代码解析

速度与里程计算原理

速度计算基于车轮转动检测:每当车轮转动一圈,传感器产生一个脉冲信号触发外部中断。系统在500ms时间窗口内统计脉冲数量,结合车轮周长计算速度。

c 复制代码
// 速度计算公式
Velocity = count * 2 * 3.14 * RADIUS / 100000 * 2 * 3600 / 40;
// count: 500ms内脉冲数
// RADIUS: 车轮半径(cm)
// 结果单位: km/h

里程累计通过定时器中断每500ms更新一次:

c 复制代码
// 里程累计
Mileage = Mileage + 10 * (Velocity/3.6) / 2;
// Velocity/3.6: 将km/h转换为m/s

DS1302时钟驱动

DS1302是一款低功耗实时时钟芯片,通过三线接口(RST、SCK、SDA)与单片机通信:

c 复制代码
sbit SCK = P1^1;    // 时钟信号
sbit SDA = P1^2;    // 数据线
sbit RST = P1^3;    // 复位/使能信号

// 写入一字节数据
void Ds1302_Write_Byte(unsigned char addr, unsigned char d);

// 读取一字节数据
unsigned char Ds1302_Read_Byte(unsigned char addr);

AT24C02 EEPROM驱动

AT24C02提供2KB的非易失性存储空间,使用I2C协议通信:

c 复制代码
sbit sda = P1^7;    // I2C数据线
sbit scl = P1^6;    // I2C时钟线
sbit WP  = P1^5;    // 写保护引脚

// 写入指定地址
void write_add(uchar address, uchar date);

// 读取指定地址
uchar read_add(uchar address);

存储的数据包括:

  • 地址0x01:车轮半径
  • 地址0x02:安全速度阈值
  • 地址0x03-0x05:里程数据(高/中/低字节)

LCD1602显示驱动

LCD1602是一款常用的16x2字符液晶屏,通过并行接口驱动:

c 复制代码
sbit rs = P1^4;     // 数据/指令选择
sbit en = P1^0;     // 使能信号

// 写指令
void write_1602com(uchar com);

// 写数据
void write_1602dat(uchar dat);

系统还实现了自定义字符功能,用于显示星期一到星期七的中文数字:

c 复制代码
uchar code num[] = {
    0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, // 一
    0x1f,0x01,0x01,0x1f,0x10,0x10,0x1f,0x00, // 二
    ...
};

按键功能说明

按键 功能
K1 进入/切换时间设置模式
K2 加调整(设置参数时)
K3 减调整(设置参数时)
K4 进入/退出自行车参数设置(半径、安全速度)
K2+K3 清零里程(同时按下)

显示界面

正常显示模式

复制代码
第一行:14/09/10 16:34 三
第二行:123.456km 25km/h

参数设置模式

复制代码
第一行:Wheel Radius  35cm
第二行:Safe Speed  30km/h

项目资源

本项目包含完整的开发资源:

  • 源程序:Keil C51工程文件,可直接编译生成HEX文件
  • 原理图:完整的电路原理图(PDF/DOCX格式)
  • PCB设计:Altium Designer工程文件,包含PCB布局和焊接图
  • Proteus仿真:可直接运行的仿真文件,验证系统功能
  • 设计论文:详细的设计文档和论文资料

学习价值

该项目适合作为单片机入门到进阶的学习项目,涵盖以下知识点:

  1. 单片机基础:中断系统、定时器、IO口操作
  2. 外设驱动:LCD1602、DS1302、AT24C02等常用芯片
  3. 通信协议:I2C协议、三线串行通信
  4. 系统设计:模块化程序设计、状态机思想
  5. 实际应用:传感器信号处理、数据计算与显示

适用场景:单片机课程设计、毕业设计、电子制作学习

源码:点击下载源码

相关推荐
学嵌入式的小杨同学5 小时前
STM32 进阶封神之路(三十九)FreeRTOS 临界区、挂起 / 删除、钩子函数、调度底层原理|从应用到内核深度解析
c++·stm32·单片机·嵌入式硬件·mcu·硬件架构·pcb
恒森宇电子有限公司7 小时前
南麟SA8304 单通道 H 桥直流有刷电机驱动芯片 ESOP8封装
单片机·嵌入式硬件
玄奕子7 小时前
F280049C + PCA9554A 实战复盘:从 NACK 定位到稳定驱动落地
嵌入式·dsp开发·ti c2000·f280049c
FreakStudio7 小时前
ESP32 实现在线动态安装库和自动依赖安装-使用uPyPI包管理平台
python·单片机·嵌入式·面向对象·电子diy·sourcetrail
4caf18 小时前
【51单片机】26/4/2 --0416
单片机·嵌入式硬件·51单片机
项目帮8 小时前
Java毕设选题推荐:基于springboot区块链的电子病历数据共享平台设计与实现【附源码、mysql、文档、调试+代码讲解+全bao等】
java·spring boot·课程设计
EmbeddedCore9 小时前
硬核实战:基于 C 语言宏定义的物联网网关命令分发框架设计
单片机·嵌入式
EmbeddedCore10 小时前
轻量级消息防重模块全解析:从原理到高性能优化
linux·运维·服务器·嵌入式硬件
啃玉米的艺术家11 小时前
中断 ------ 中断方式
嵌入式硬件