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

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

源码:点击下载源码

项目简介

这是一个基于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 小时前
智谱开源 ZCode 之后,真正的考试才开始
单片机·嵌入式硬件·1024程序员节
Chery11406 小时前
高速ADC与精密DAC怎么选?DP9230D与DP8532D应用解析
嵌入式硬件·物联网·射频工程
海绵宝宝的月光宝盒8 小时前
14-AutoCAD-阵列命令应用与案例实战(AR)
经验分享·笔记·自动化·课程设计·制造·学习方法·cad
小李不想当小白9 小时前
SPI通信外设与W25Q64 (硬件SPI)(STM32标准库学习笔记)
笔记·stm32·单片机·嵌入式硬件·学习·嵌入式
LCG米10 小时前
STM32驱动W5500以太网模块实测:TCP吞吐瓶颈定位、TX指针回绕陷阱与断线重连保活落地
stm32·单片机·嵌入式硬件·tcp/ip
尼喃11 小时前
662K/65Z5三脚稳压芯片规格书—PW6566B33/B30引脚功能
嵌入式硬件
创界工坊工作室11 小时前
63-基于STC89C52霍尔传感器的智能化电能表设计
stm32·单片机·嵌入式硬件·51单片机·proteus
智购科技自动售货机厂家12 小时前
让AI经营自动售货机:从Project Vend看工具权限与业务规则~YH
大数据·服务器·单片机·嵌入式硬件·深度学习
Zwawa13 小时前
从 printf 到曲线:把数据送上 VOFA+
c语言·单片机·嵌入式
意法半导体STM3214 小时前
【官方原创】LAT6048 如何扩大MP2的A35核和M33核共享内存
stm32·单片机·嵌入式硬件·内存映射·stm32mp2