自行车测速仪设计报告.docx
- 文档编号:9393744
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:37
- 大小:314.38KB
自行车测速仪设计报告.docx
《自行车测速仪设计报告.docx》由会员分享,可在线阅读,更多相关《自行车测速仪设计报告.docx(37页珍藏版)》请在冰豆网上搜索。
自行车测速仪设计报告
电子设计竞赛设计报告
题目:
自行车测速仪
学院电子信息工程学院
学科门类工学
专业电气工程及其自动化
学号20104481142010448131
姓名李炜赵向辉
2011年12月21日
自行车测速仪
摘 要
本课题实验主要是利用STC89C52RC、12864液晶、24C02E^2PROM、霍尔传感器和加速度倾角传感器来实现自行车测速功能。
通过霍尔传感器来采集信号,经过单片机处理后,由12864液晶显示其总里程,分里程,速度,加速度;信号经过加速度倾角传感器读出坡度值,并在12864液晶中显示出来;然后由数学公式计算出消耗的卡路里值。
12864显示页面一共有三面。
按键具有调控展现的页面,清除分里程数据,保存总里程数据的功能,利用24C02实现断电不消失的功能。
发光二极管模块,利用MOS管的特性可以实现在暗处自动点亮。
关键词:
自行车测速仪;霍尔传感器A3144;加速度倾角传感器MMA7455;12864LCD
BicyleSpeedometer
ABSTRACT
ThisworkmainlyrealizespeedbikefunctionbyusingtheMCUoftheSTC89C52RC,
12864LCD,24C02E^2PROM,HallsensorsandAngleaccelerationsensor.Thesignalwas
collectedbytheHallsensorsandthenitwillbehandledbytheMCU.Afterthat,theMCU
willgivecommandsandinstructionstolettheLCDdisplaytheinformationwhichcontains
thetotalmileage,partmileage,speed,accelerate,ascentandthecalorieconsumed.Thereare
threepicturesoftheLCD,changedbyakeyswitch.Thefunctionoftheotherkeysweremade
upofclearingofthepartdistanceandsavethetotaldistance.Also,thereisanotherfunctionmodule,calledautomaticlight,whichcontrolledbytheLDR.
Keywords:
Bicylespeedometer;Hallsensors;Angleaccelerationsensor;12864LCD
目 录
1 设计要求 ................................
2 设计方案 ................................
2.1 芯片的选择 ...............................
2.2 霍尔传感器与单片机的通信 ..............
2.3 12864液晶屏与单片机 ..................
2.4 单片机与24C02 ........................
2.5 单片机与MMA7455 ......................
2.6 单片机下载程序 ........................
3 总体方案 ................................
3.1 工作原理 .............................
3.2 总体设计 .............................
4 系统硬件设计 ............................
4.1 STC89C52RC单片机最小系统 .............
4.2 各部分电路电路图 .....................
4.3 整体电路 .............................
5 系统软件设计 ............................
5.1 主程序流程 ...........................
参考文献 ....................................
附录 ........................................
1设计要求
1.1发光二极管模块在暗处自动点亮功能。
1.2利用霍尔传感器采集信号,由单片机处理后控制外围设备工作。
1.3利用单片机控制12864液晶屏显示。
1.4将指定的数据放入24C02中,达到断电不丢失的效果。
1.5用KeiluVision3编写C程序,利用单片机最小系统烧写程序到单片机。
1.6利用传感器模块计算倾角(坡度),由12864液晶显示。
2设计方案
2.1芯片的选择
自行车测速仪按系统功能实现要求,决定控制系统采用STC89C52RC单片机,采集信号的霍尔传感器采用A3144,保存信息的E^2PROM24C02,计算倾角的加速度倾角传感器MMA7455,用于显示的12864液晶。
2.2霍尔传感器与单片机之间的通信
将霍尔传感器的信号输出端和单片机的某一个I/O口相连(本板子中使用P2^3),通过检测P2^3电平的下降沿和上升沿来编写程序,以达到计数的功能。
2.312864液晶屏与单片机
将12864液晶屏按照其操作指南正确连接在电路中,编写程序,由单片机控制12864液晶显示各种数据。
2.4单片机与24C02
程序编写中,要求保存功能的按键按下时,总里程的数据写入到24C02芯片中,达到断电不丢失的功能。
将24C02按照操作手册正确连接到电路中,由单片机控制,当检查到按键按下时,执行程序:
经总里程数据写入24C02中,保存起来。
2.5单片机与MMA7455
此模块是用集成工艺制作好的商品。
按照操作手册正确连接到电路中,根据芯片资料和示例程序可以使其输出角度值,然后在12864中显示出来。
2.6单片机下载程序
利用单片机最小系统和串口(配合MAX232转电平芯片),借助STC下载器完成程序的烧写。
3总体方案
3.1工作原理
本实验主要是利用STC89C52RC、12864液晶、24C02E^2PROM、霍尔传感器和加速度倾角传感器来实现自行车测速功能。
通过霍尔传感器来采集信号,经过单片机处理后,由12864液晶显示其总里程,分里程,速度,加速度;信号经过加速度倾角传感器读出坡度值,并在12864液晶中显示出来;然后由数学公式计算出消耗的卡路里值。
12864显示页面一共有三面。
按键具有调控展现的页面,清除分里程数据,保存总里程数据的功能,利用24C02实现断电不消失的功能。
发光二极管模块,利用MOS管的特性可以实现在暗处自动点亮。
3.2 设计总体框图
4系统硬件设计
4.1STC89C52RC单片机最小系统
4.1.1 最小系统包括晶体振荡电路、复位开关和电源部分。
4.2各部分电路
4.2.1主要控制部分(STC89C52RC)
4.2.212864液晶部分
4.2.324C02部分电路
4.2.4串口及MAX232部分
4.2.5倾角传感器MMA7455
4.2.6霍尔传感器部分
4.2.7发光二极管独立显示模块
4.3整体电路
5系统软件设计
主程序流程图
参考文献
[1]沈红卫《基于单片机结构的智能系统设计与实现》电子工业出版社
[2]黄惠媛《单片机原理与接口技术》海洋出版社
[3]周平伍云辉《单片机应用技术》电子科技大学出版社
[4]吴金戌沈金阳郭庭吉《8051单片机实践与应用》清华大学出版社
[5]黄正谨等《电子设计竞赛赛题解析》东南大学出版社
附录
程序:
/*************河北大学电信学院***********/
/*******************李炜*****************/
/***********自行车测速仪程序**************/
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
/**********液晶屏相关部分*****************/
#definelcd_portP0//液晶屏指令、数据通信接口
sbitrs=P2^7;//液晶屏寄存器选择接口(rs=0时选择指令寄存器,rs=1时选择数据寄存器)
sbitrw=P2^6;//液晶屏读写选择接口(rw=0时选择写入,rw=1时选择读出)
sbiten=P2^5;//液晶屏使能接口(en=0时通信接口中断,en=1时通信接口接通)
sbitret=P2^4;//液晶屏主复位引脚
/*********子函数部分*****************/
voiddelayms_lcd(uintms);//延时子函数,时间为1ms
voiddelay_n10_us(uintn);//10微秒延时函数(n*10us)
voidlcd_wr_command(ucharcom);//向液晶屏输入命令子函数
voidlcd_wr_data(uchardat);//向液晶屏输入数据单字节子函数
voidlcd_int();//LCD初始化
voidpicture_show0();//12864画面0
voidpicture_show1();//12864画面1
voidpicture_show2();//12864画面2
voidpicture_select();//12864画面选择
voidkey_select();//按键相关判断
voidinterrupt_set();//中断函数参数设定
voidstart_24C02();//24C02起始信号
voidwrite_one_char(ucharx);//写入一个字节
voidwait_ack();//等待应答
ucharread_one_char();//读出一个字节
voidstop_24C02();//24C02终止信号
voidread_total_distance();//读出24C02中数据并且赋值给total_distance
voidwrite_total_distance();//写入24C02中total_distance数据
voidwrite_total_distance1();//写入24C02中total_distance数据
voidforbid_data();//限制所有变量的取值
/*********24C02相关部分****************/
sbitSCL=P1^5;//串口时钟引脚
sbitSDA=P1^4;//串口数据引脚
/**********相关数组部分***********/
ucharcodedata1[]="欢迎使用";
ucharcodedata2[]="自行车测速仪";
ucharcodedata3[]="制作人";
ucharcodedata4[]="李炜";
ucharcodedata5[]="赵向辉";
ucharcodedata6[]="总里程";
ucharcodedata7[]="分里程";
ucharcodedata8[]="速度";
ucharcodedata9[]="加速度";
ucharcodedata10[]="坡度";
ucharcodedata11[]="卡路里";
ucharcodedata12[]="请注意安全";
ucharcodedata_show[]="0123456789";
/***********相关变量部分************/
uintnew_total_distance=0,old_total_distance=0;//四位数据
uintnew_part_distance=0,old_part_distance=0;//三位数据
uintold_speed=0,new_speed=0;//两位数据
uintold_acceleration=0,new_acceleration=0;//两位数据
uintold_ascent=0,new_ascent=0;//三位数据
uintcalorie=0;//三位数据
ucharold_j=0,new_j=0,part_flag=0,write_flag=0,show_flag=0,control_flag=0;
staticuinttime=0;
/*******按键相关**************/
sbitkey1=P1^0;//页面上翻
sbitkey2=P1^1;//手动保存
sbitkey3=P1^2;//页面下翻
sbitkey4=P1^3;//清除分里程数据
/*********霍尔传感器相关部分**********/
sbitA3145_OUT=P2^3;
/***********************************/
voidmain()
{
read_total_distance();
lcd_int();//LCD初始化
picture_show0();
delayms_lcd(2000);
lcd_int();
picture_show1();
delayms_lcd(2000);
lcd_int();
picture_show2();
delayms_lcd(2000);
interrupt_set();
A3145_OUT=1;
while
(1)
{
key_select();
picture_select();
if(control_flag==0)
new_total_distance=new_part_distance;
if(show_flag==1)
{
if(old_j==1)
picture_show1();
if(old_j==2)
picture_show2();
}
if(part_flag==1)
{
while(A3145_OUT==0);
ET0=0;
TR0=0;
new_speed=250/time;
new_acceleration=(new_speed-old_speed)*50/time;
time=0;
ET0=1;
TR0=1;
new_part_distance+=5;
calorie=(calorie+5);
part_flag=0;
show_flag=1;
}
forbid_data();
}
}
/************限制所有变量的取值************/
voidforbid_data()
{
if((old_total_distance+new_total_distance)>9999)
{
new_total_distance=old_total_distance=0;
}
if(new_part_distance>999)
{
new_part_distance=0;
write_total_distance();
read_total_distance();
}
if(new_speed>99)
new_speed=0;
if(new_acceleration>99)
new_acceleration=0;
if(calorie>999)
calorie=0;
}
/***********LCD显示画面0********************/
voidpicture_show0()
{
uchari;
i=0;
lcd_wr_command(0x82);//设置液晶屏的显示位置
while(data1[i]!
=0)
{
lcd_wr_data(data1[i]);
i++;
}
i=0;
lcd_wr_command(0x91);
while(data2[i]!
=0)
{
lcd_wr_data(data2[i]);
i++;
}
i=0;
lcd_wr_command(0x8A);
while(data3[i]!
=0)
{
lcd_wr_data(data3[i]);
i++;
}
i=0;
lcd_wr_command(0x99);
while(data4[i]!
=0)
{
lcd_wr_data(data4[i]);
i++;
}
i=0;
lcd_wr_command(0x9C);
while(data5[i]!
=0)
{
lcd_wr_data(data5[i]);
i++;
}
}
/**************LCD画面1********************/
voidpicture_show1()
{
uchari,flag=0;
uinttemp;
i=0;
lcd_wr_command(0x81);//设置液晶屏的显示位置
while(data6[i]!
=0)
{
lcd_wr_data(data6[i]);
i++;
}
lcd_wr_command(0x84);
temp=(new_total_distance+old_total_distance);
if(temp/1000==0)
lcd_wr_data('');
else
{
lcd_wr_data(data_show[temp/1000]);//显示数据(字符)
flag=1;
}
temp%=1000;
if((temp/100)!
=0||flag==1)
{
lcd_wr_data(data_show[temp/100]);//显示数据(字符)
flag=1;
}
else
lcd_wr_data('');
temp%=100;
if((temp/10)!
=0||flag==1)
{
lcd_wr_data(data_show[temp/10]);//显示数据(字符)
flag=1;
}
else
lcd_wr_data('');
temp%=10;
lcd_wr_data(data_show[temp]);//显示数据(字符)
lcd_wr_command(0x86);
lcd_wr_data('m');
i=0;
flag=0;
lcd_wr_command(0x91);
while(data7[i]!
=0)
{
lcd_wr_data(data7[i]);
i++;
}
lcd_wr_command(0x94);
temp=new_part_distance;
if(temp/100==0)
lcd_wr_data('');
else
{
lcd_wr_data(data_show[temp/100]);//显示数据(字符)
flag=1;
}
temp%=100;
if((temp/10)!
=0||flag==1)
{
lcd_wr_data(data_show[temp/10]);//显示数据(字符)
flag=1;
}
else
lcd_wr_data('');
temp%=10;
lcd_wr_data(data_show[temp]);//显示数据(字符)
lcd_wr_command(0x96);
lcd_wr_data('m');
i=0;
flag=0;
lcd_wr_command(0x89);
while(data8[i]!
=0)
{
lcd_wr_data(data8[i]);
i++;
}
lcd_wr_command(0x8B);
temp=new_speed;
if(temp/10==0)
lcd_wr_data('');
else
lcd_wr_data(data_show[temp/10]);//显示数据(字符)
temp%=10;
lcd_wr_data(data_show[temp]);//显示数据(字符)
lcd_wr_command(0x8C);
lcd_wr_data('m');
lcd_wr_data('/');
lcd_wr_data('s');
i=0;
old_speed=new_speed;
lcd_wr_command(0x99);
while(data12[i]!
=0)
{
lcd_wr_data(data12[i]);
i++;
}
}
/**************LCD画面2********************/
voidpicture_show2()
{
uchari,flag=0;
uinttemp;
i=0;
lcd_wr_command(0x81);
while(data9[i]!
=0)
{
lcd_wr_data(data9[i]);
i++;
}
lcd_wr_command(0x84);
temp=new_acceleration;
if(temp/10==0)
lcd_wr_data('');
else
lcd_wr_data(data_show[temp/10]);//显示数据(字符)
temp%=10;
lcd_wr_da
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 自行车 测速 设计 报告