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

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

源码:点击下载源码

项目简介

这是一个基于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. 实际应用:传感器信号处理、数据计算与显示

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

源码:点击下载源码

相关推荐
FreakStudio14 小时前
做了个Claude Code CLI 电子宠物:程序员的实体监工代码搭子
python·单片机·嵌入式·面向对象·并行计算·电子diy·电子计算机
芯岭技术16 小时前
PY32L020系列32位MCU,超低功耗、高性价比,支持三种低功耗模式
单片机·嵌入式硬件
Hello_Embed17 小时前
嵌入式上位机开发入门(二十六):将 MQTT 测试程序加入 APP 任务
网络·笔记·网络协议·tcp/ip·嵌入式
2023自学中17 小时前
i.MX6ULL 板子的完整启动流程图(从上电 → 用户空间)
linux·嵌入式
危桥带雨21 小时前
RTC理论知识
stm32·单片机·嵌入式硬件·实时音视频
ElfBoard1 天前
飞凌精灵(ElfBoard)技术贴|如何在RK3506开发板上实现UART功能复用
大数据·linux·人工智能·驱动开发·单片机·嵌入式硬件·物联网
踏着七彩祥云的小丑1 天前
嵌入式——认识电子元器件——二极管系列
单片机·嵌入式硬件
Jack_02201 天前
基于51单片机的智能电动窗帘控制OLED显示设计
单片机·嵌入式硬件·51单片机·智能家居·oled显示·电动窗帘
摘星台1 天前
linux环境对stm32单片机进行程序烧录
linux·stm32·单片机
森G1 天前
STM32F103C8T6工程---标准库版usart2写回显
stm32·单片机