基于单片机的自行车里程表设计
源码:点击下载源码
项目简介
这是一个基于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仿真:可直接运行的仿真文件,验证系统功能
- 设计论文:详细的设计文档和论文资料
学习价值
该项目适合作为单片机入门到进阶的学习项目,涵盖以下知识点:
- 单片机基础:中断系统、定时器、IO口操作
- 外设驱动:LCD1602、DS1302、AT24C02等常用芯片
- 通信协议:I2C协议、三线串行通信
- 系统设计:模块化程序设计、状态机思想
- 实际应用:传感器信号处理、数据计算与显示
适用场景:单片机课程设计、毕业设计、电子制作学习
源码:点击下载源码