基于51单片机的自行车测速里程码表设计( proteus仿真+程序+设计报告+原理图+讲解视频)
仿真图proteus7.8及以上
程序编译器:keil 4/keil 5
编程语言:C语言
设计编号:S0078
1. 主要功能:
基于51单片机的自行车测速行驶里程检测与显示设计
1、通过按键控制自行车行驶速度;
2、通过霍尔传感器测量自行车当前速度;
3、单片机实时检测自行车的行驶里程,行驶里程显示,显示精度0.01公里;
4、显示当前速度和行驶里程,可按键清零;
5、具有超速报警功能,可以设置报警值;
需注意仿真中51单片机芯片是兼容的,AT89C51,AT89C52是51单片机的具体型号,内核是一样的。相同的原理图里,无论stc还是at都一样,引脚功能都是一样的,程序是兼容的,芯片可以替换为STC89C52/STC89C51/AT89C52/AT89C51等51单片机芯片。
2. 讲解视频:
讲解视频包含仿真运行讲解和代码讲解
3. 仿真设计
打开仿真工程,双击proteus中的单片机,选择hex文件路径,然后开始仿真。开始仿真LCD1602显示当前速度和里程数,当前速度为0km/h,当前总里程数0km。
通过加减速按键调整速度,直流电机逐渐加速,直到稳定。
实测12.9KM/h速度运行一个班小时后累计总里程为18.249km。
具有超速报警功能,通过按下设置键可以调整速度报警值。
4. 程序代码
使用keil4或者keil5编译,代码有注释,可以结合视频理解代码含义。
#include "reg51.h"
#include "lcd1602.h"
#define uchar unsigned char
#define uint unsigned int
#define DIR 26*2.54//轮胎直径66.04CM 26英寸 1 英寸=2.54 厘米
#define RUOND DIR*3.14//207.3656单位CM 周长(C)=π×D 其中 D 是轮胎的外径,包括胎壁和胎面的整体直径。
#define PER_RUOND RUOND/240.0 //电机一圈产生240次中断。每次中断前进约0.864023cm
sbit k1=P1^0;//按钮
sbit k2=P1^1;
sbit k3=P1^2;
sbit k4=P1^3;
sbit k5=P1^4;
sbit k6=P1^5;
sbit out=P1^6;//输出控制
sbit beep=P2^0;//蜂鸣器
float pwm=0;//占空比
uchar time=0,mode=0;//系统变量
uint sudu1=0,sudu2=0,lim=150;//速度
float sum=0;//里程
uchar disp1[]="Speed:000.0km/h";
uchar disp2[]="Sum:000.000km ";
uchar disp3[]="00.0km/h ";
//主函数
void main()
{
uchar i;
init_1602();
//设置INT0
IT0=1;//跳变沿出发方式(下降沿)
EX0=1;//打开INT0的中断允许。
TMOD|=0X01;//初始化定时器
TH0=0X3C;
TL0=0XB0;
ET0=1;//打开定时器0中断允许
EA=1;//打开总中断
TR0=1;//打开定时器
while(1)
{
//电机速度控制
if(i<20)
i++;
else
i=0;
if(i<pwm)
out=1;
else
out=0;
//电机调速
if(!k1)//加速
{
if(pwm<10)
pwm+=0.5;
while(!k1);
}
if(!k2)//减速
{
if(pwm>0)
pwm-=0.5;
while(!k2);
}
//设置
if(!k3)
{
mode=!mode;
while(!k3);
}
if(!k4)//加
{
if(lim<999)
lim++;
while(!k4);
}
if(!k5)//减
{
if(lim>0)
lim--;
while(!k5);
}
if(!k6)//清零
{
sum=0;
while(!k6);
}
}
}
//定时器中断
void Timer0() interrupt 1
{
float i;
uint j;
if(time<20)//1s
time++;
else
{
time=0;
sudu1 = sudu2*PER_RUOND;//厘米/秒sudu2*
sudu1 = sudu1/100.0*3600/10;//单位km/h 多除以10是因为这样算下来速度太快了,多除以10合理
sudu2=0;
//计算里程
i=sudu1;
i=i/360;
sum=sum+i;//一秒记录一次里程
//报警
if(sudu1>lim)
beep=0;
else
beep=1;
//显示
disp1[6]=sudu1/1000+0x30;
disp1[7]=sudu1%1000/100+0x30;
disp1[8]=sudu1%100/10+0x30;
disp1[10]=sudu1%10+0x30;
j=sum*10;
disp2[4]=j/100000+0x30;
disp2[5]=j%100000/10000+0x30;
disp2[6]=j%10000/1000+0x30;
disp2[8]=j%1000/100+0x30;
disp2[9]=j%100/10+0x30;
disp2[10]=j%10+0x30;
disp3[0]=lim/100+0x30;
disp3[1]=lim%100/10+0x30;
disp3[3]=lim%10+0x30;
if(mode==0)
{
write_string(1,0,disp1);
write_string(2,0,disp2);
}
else
{
write_string(1,0,"set:");
write_string(1,4," ");
write_string(2,0," ");
write_string(2,4,disp3);
}
}
TH0=0X3C;
TL0=0XB0;
}
void Int0() interrupt 0 //外部中断0的中断函数
{
sudu2++;
}
5. 设计报告
6613字设计报告,内容包括硬件设计、软件设计、软硬件框图、调试、结论等
随着现代科技的快速发展,智能化技术已广泛渗透到人们的日常生活中,并在诸多领域中发挥着日益重要的作用。在倡导绿色出行、节能环保的大背景下,自行车作为一种经济、便捷且环保的交通工具,其在性能监测与智能控制方面的提升显得尤为关键。现代社会对于自行车的需求不再仅限于基础的代步功能,而是更加强调安全、高效和用户体验的全面提升。
本课程设计作业正是基于这一需求背景,致力于研发一款以51系列单片机为核心的自行车测速行驶里程检测与显示系统。该系统集成了先进的传感技术和嵌入式计算能力,旨在实现对自行车速度信息的实时获取和高精度显示,同时还能精确记录并展示骑行过程中的累计行驶里程数据。为确保用户骑行的安全性和舒适性,系统特别设计了超速报警功能,当骑行速度超过预设阈值时,能够及时发出警示信号,提醒骑行者调整速度至合理范围内,从而有效降低因高速骑行可能导致的风险。
6. 原理图
原理图使用AD绘制,可供实物参考,仿真不同于实物,需要调试经验才能做出来。
Proteus仿真和实物作品的区别:
1.运行环境:Proteus仿真是在计算机上运行的,而实物则是在硬件电路板上运行。
2.调试方式:在Proteus仿真中,可以方便地进行单步调试和观察变量值的变化,而在实物中则需要通过调试器或者串口输出等方式进行调试。
电路连接方式:在Proteus仿真中,可以通过软件设置进行电路连接的修改,而在实物中则需要通过硬件电路板和连接线进行修改。
3.运行速度:Proteus仿真通常比实物运行速度快,因为仿真是基于计算机运行的,而实物则需要考虑电路板上的物理限制和器件的响应时间等因素。
4.功能实现:在Proteus仿真中,可以通过软件设置实现不同的功能,而在实物中则需要根据电路设计和器件的性能进行实现。
7. 设计资料内容清单
资料设计资料包括仿真,程序代码、讲解视频、功能要求、设计报告、软硬件设计框图等。
0、常见使用问题及解决方法–必读!!!!
1、程序代码注释
2、proteus仿真
3、功能要求
4、软硬件流程图
5、开题报告
6、设计报告
7、原理图
8、元器件清单
9、讲解视频
Altium Designer 安装破解
KEIL+proteus 单片机仿真设计教程
KEIL安装破解
Proteus元器件查找
Proteus安装
Proteus简易使用教程
单片机学习资料
相关数据手册
答辩技巧
设计报告常用描述
鼠标双击打开查找嘉盛单片机51 STM32单片机课程毕业设计.url