收藏 分销(赏)

自行车测速仪设计报告.pdf

上传人:精**** 文档编号:3629710 上传时间:2024-07-11 格式:PDF 页数:28 大小:641.68KB
下载 相关 举报
自行车测速仪设计报告.pdf_第1页
第1页 / 共28页
自行车测速仪设计报告.pdf_第2页
第2页 / 共28页
自行车测速仪设计报告.pdf_第3页
第3页 / 共28页
自行车测速仪设计报告.pdf_第4页
第4页 / 共28页
自行车测速仪设计报告.pdf_第5页
第5页 / 共28页
点击查看更多>>
资源描述

1、 word 文档 可自由复制编辑 嵌入式系统设计 word 文档 可自由复制编辑 自行车车速报警系统 摘 要 本课题实验主要是利用 STC89C52RC、12864 液晶、24C02E2PROM、霍尔传感器和加速度倾角传感器来实现自行车测速功能。通过霍尔传感器来采集信号,经过单片机处理后,由12864液晶显示其总里程,分里程,速度,加速度;信号经过加速度倾角传感器读出坡度值,并在12864 液晶中显示出来;然后由数学公式计算出消耗的卡路里值。12864 显示页面一共有三面。按键具有调控展现的页面,清除分里程数据,保存总里程数据的功能,利用24C02 实现断电不消失的功能。发光二极管模块,利用M

2、OS 管的特性可以实现在暗处自动点亮。关键词:自行车测速仪;霍尔传感器 A3144;加速度倾角传感器 MMA7455;12864LCD 目 录 设计要求 设计方案 .1 芯片的选择 .2 霍尔传感器与单片机的通信 .3 12864 液晶屏与单片机 .4 单片机与 24C02 .5 单片机与 MMA7455 .6 单片机下载程序 总体方案 .工作原理 .总体设计 系统硬件设计 word 文档 可自由复制编辑.STC89C52RC 单片机最小系统 .各部分电路电路图 .整体电路 系统软件设计 .主程序流程 参考文献 附录 设计要求 1.1 发光二极管模块在暗处自动点亮功能。1.2 利用霍尔传感器采

3、集信号,由单片机处理后控制外围设备工作。1.3 利用单片机控制 12864 液晶屏显示。1.4 将指定的数据放入 24C02 中,达到断电不丢失的效果。1.5 用 Keil uVision3 编写 C 程序,利用单片机最小系统烧写程序到单片机。1.6 利用传感器模块计算倾角(坡度),由 12864 液晶显示。word 文档 可自由复制编辑 设计方案 2.1 芯片的选择 自行车测速仪按系统功能实现要求,决定控制系统采用 STC89C52RC 单片机,采集信号的霍尔传感器采用 A3144,保存信息的 E2PROM 24C02,计算倾角的加速度倾角传感器MMA7455,用于显示的 12864 液晶。

4、2.2 霍尔传感器与单片机之间的通信 将霍尔传感器的信号输出端和单片机的某一个 I/O 口相连(本板子中使用 P23),通过检测 P23 电平的下降沿和上升沿来编写程序,以达到计数的功能。2.3 12864 液晶屏与单片机 将 12864 液晶屏按照其操作指南正确连接在电路中,编写程序,由单片机控制 12864 液晶显示各种数据。2.4 单片机与 24C02 程序编写中,要求保存功能的按键按下时,总里程的数据写入到 24C02 芯片中,达到断电不丢失的功能。将 24C02 按照操作手册正确连接到电路中,由单片机控制,当检查到按键按下时,执行程序:经总里程数据写入 24C02 中,保存起来。2.

5、5 单片机与 MMA7455 此模块是用集成工艺制作好的商品。按照操作手册正确连接到电路中,根据芯片资料和示例程序可以使其输出角度值,然后在12864 中显示出来。2.6单片机下载程序 利用单片机最小系统和串口(配合 MAX232 转电平芯片),借助 STC 下载器完成程序的烧写。word 文档 可自由复制编辑 3 总体方案 3.1 工作原理 本实验主要是利用 STC89C52RC、12864 液晶、24C02E2PROM、霍尔传感器和加速度倾角传感器来实现自行车测速功能。通过霍尔传感器来采集信号,经过单片机处理后,由 12864 液晶显示其总里程,分里程,速度,加速度;信号经过加速度倾角传感

6、器读出坡度值,并在 12864液晶中显示出来;然后由数学公式计算出消耗的卡路里值。12864 显示页面一共有三面。按键具有调控展现的页面,清除分里程数据,保存总里程数据的功能,利用 24C02 实现断电不消失的功能。发光二极管模块,利用 MOS 管的特性可以实现在暗处自动点亮。3.2 设计总体框图 STC89C52RC A3144 24C02 MMA7455 12864液晶 word 文档 可自由复制编辑 4 系统硬件设计 4.1 STC89C52RC单片机最小系统 4.1.1 最小系统包括晶体振荡电路、复位开关和电源部分。word 文档 可自由复制编辑 4.2各部分电路 4.2.1 主要控制

7、部分(STC89C52RC)4.2.2 12864 液晶部分 word 文档 可自由复制编辑 4.2.3 24C02 部分电路 4.2.4 串口及 MAX232部分 word 文档 可自由复制编辑 4.2.5 倾角传感器 MMA7455 4.2.6 霍尔传感器部分 4.2.7 发光二极管独立显示模块 word 文档 可自由复制编辑 4.3整体电路 word 文档 可自由复制编辑 5 系统软件设计 主程序流程图 word 文档 可自由复制编辑 参考文献 1 沈红卫 基于单片机结构的智能系统设计与实现 电子工业出版社 2 黄惠媛 单片机原理与接口技术 海洋出版社 3 周平 伍云辉 单片机应用技术

8、电子科技大学出版社 开始 初始化 检查霍尔传感器信号 单片机处理信号发出指令操作 液晶屏显示 word 文档 可自由复制编辑 4 吴金戌 沈金阳 郭庭吉 8051 单片机实践与应用 清华大学出版社 5 黄正谨等 电子设计竞赛赛题解析 东南大学出版社 附 录 程序:/*河北大学电信学院*/*李炜*/word 文档 可自由复制编辑/*自行车测速仪程序*/#include#include#define uchar unsigned char#define uint unsigned int/*液晶屏相关部分*/#define lcd_port P0 /液晶屏指令、数据通信接口 sbit rs=P27

9、;/液晶屏寄存器选择接口(rs=0时选择指令寄存器,rs=1时选择数据寄存器)sbit rw=P26;/液晶屏读写选择接口(rw=0 时选择写入,rw=1 时选择读出)sbit en=P25;/液晶屏使能接口(en=0 时通信接口中断,en=1 时通信接口接通)sbit ret=P24;/液晶屏主复位引脚/*子函数部分*/void delayms_lcd(uint ms);/延时子函数,时间为 1ms void delay_n10_us(uint n);/10微秒延时函数(n*10us)void lcd_wr_command(uchar com);/向液晶屏输入命令子函数 void lcd_w

10、r_data(uchar dat);/向液晶屏输入数据单字节子函数 void lcd_int();/LCD 初始化 void picture_show0();/12864画面 0 void picture_show1();/12864画面 1 void picture_show2();/12864画面 2 void picture_select();/12864画面选择 void key_select();/按键相关判断 void interrupt_set();/中断函数参数设定 void start_24C02();/24C02起始信号 void write_one_char(uchar

11、x);/写入一个字节 void wait_ack();/等待应答 uchar read_one_char();/读出一个字节 void stop_24C02();/24C02终止信号 void read_total_distance();/读出 24C02 中数据并且赋值给 total_distance void write_total_distance();/写入 24C02 中 total_distance数据 void write_total_distance1();/写入 24C02 中 total_distance数据 void forbid_data();/限制所有变量的取值/*2

12、4C02 相关部分*/sbit SCL=P15;/串口时钟引脚 sbit SDA=P14;/串口数据引脚/*相关数组部分*/uchar code data1=欢迎使用;uchar code data2=自行车测速仪;uchar code data3=制作人;uchar code data4=李炜;uchar code data5=赵向辉;uchar code data6=总里程;word 文档 可自由复制编辑 uchar code data7=分里程;uchar code data8=速度;uchar code data9=加速度;uchar code data10=坡度;uchar code

13、 data11=卡路里;uchar code data12=请注意安全;uchar code data_show=0123456789;/*相关变量部分*/uint new_total_distance=0,old_total_distance=0;/四位数据 uint new_part_distance=0,old_part_distance=0;/三位数据 uint old_speed=0,new_speed=0;/两位数据 uint old_acceleration=0,new_acceleration=0;/两位数据 uint old_ascent=0,new_ascent=0;/三位

14、数据 uint calorie=0;/三位数据 uchar old_j=0,new_j=0,part_flag=0,write_flag=0,show_flag=0,control_flag=0;static uint time=0;/*按键相关*/sbit key1=P10;/页面上翻 sbit key2=P11;/手动保存 sbit key3=P12;/页面下翻 sbit key4=P13;/清除分里程数据/*霍尔传感器相关部分*/sbit A3145_OUT=P23;/*/void main()read_total_distance();lcd_int();/LCD 初始化 pictur

15、e_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;word 文档 可自由复制编辑 if(show_flag=1)if(old_j=1)picture_show1();if(ol

16、d_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();/*限制所有变量的取值*/void forbid_data()if(old_total_distance+new_total_dista

17、nce)9999)new_total_distance=old_total_distance=0;if(new_part_distance999)new_part_distance=0;write_total_distance();read_total_distance();if(new_speed99)new_speed=0;if(new_acceleration99)new_acceleration=0;if(calorie999)calorie=0;word 文档 可自由复制编辑 /*LCD 显示画面 0*/void picture_show0()uchar i;i=0;lcd_wr_c

18、ommand(0 x82);/设置液晶屏的显示位置 while(data1i!=0)lcd_wr_data(data1i);i+;i=0;lcd_wr_command(0 x91);while(data2i!=0)lcd_wr_data(data2i);i+;i=0;lcd_wr_command(0 x8A);while(data3i!=0)lcd_wr_data(data3i);i+;i=0;lcd_wr_command(0 x99);while(data4i!=0)lcd_wr_data(data4i);i+;i=0;lcd_wr_command(0 x9C);while(data5i!=

19、0)lcd_wr_data(data5i);i+;/*LCD 画面 1*/void picture_show1()word 文档 可自由复制编辑 uchar i,flag=0;uint temp;i=0;lcd_wr_command(0 x81);/设置液晶屏的显示位置 while(data6i!=0)lcd_wr_data(data6i);i+;lcd_wr_command(0 x84);temp=(new_total_distance+old_total_distance);if(temp/1000=0)lcd_wr_data();else lcd_wr_data(data_showtem

20、p/1000);/显示数据(字符)flag=1;temp%=1000;if(temp/100)!=0|flag=1)lcd_wr_data(data_showtemp/100);/显示数据(字符)flag=1;else lcd_wr_data();temp%=100;if(temp/10)!=0|flag=1)lcd_wr_data(data_showtemp/10);/显示数据(字符)flag=1;else lcd_wr_data();temp%=10;lcd_wr_data(data_showtemp);/显示数据(字符)lcd_wr_command(0 x86);lcd_wr_data(

21、m);i=0;flag=0;lcd_wr_command(0 x91);while(data7i!=0)lcd_wr_data(data7i);word 文档 可自由复制编辑 i+;lcd_wr_command(0 x94);temp=new_part_distance;if(temp/100=0)lcd_wr_data();else lcd_wr_data(data_showtemp/100);/显示数据(字符)flag=1;temp%=100;if(temp/10)!=0|flag=1)lcd_wr_data(data_showtemp/10);/显示数据(字符)flag=1;else l

22、cd_wr_data();temp%=10;lcd_wr_data(data_showtemp);/显示数据(字符)lcd_wr_command(0 x96);lcd_wr_data(m);i=0;flag=0;lcd_wr_command(0 x89);while(data8i!=0)lcd_wr_data(data8i);i+;lcd_wr_command(0 x8B);temp=new_speed;if(temp/10=0)lcd_wr_data();else lcd_wr_data(data_showtemp/10);/显示数据(字符)temp%=10;lcd_wr_data(data

23、_showtemp);/显示数据(字符)lcd_wr_command(0 x8C);lcd_wr_data(m);lcd_wr_data(/);lcd_wr_data(s);i=0;word 文档 可自由复制编辑 old_speed=new_speed;lcd_wr_command(0 x99);while(data12i!=0)lcd_wr_data(data12i);i+;/*LCD 画面 2*/void picture_show2()uchar i,flag=0;uint temp;i=0;lcd_wr_command(0 x81);while(data9i!=0)lcd_wr_data

24、(data9i);i+;lcd_wr_command(0 x84);temp=new_acceleration;if(temp/10=0)lcd_wr_data();else lcd_wr_data(data_showtemp/10);/显示数据(字符)temp%=10;lcd_wr_data(data_showtemp);/显示数据(字符)lcd_wr_command(0 x85);lcd_wr_data(m);lcd_wr_data(/);lcd_wr_data(s);lcd_wr_data(2);i=0;flag=0;lcd_wr_command(0 x91);while(data10i

25、!=0)lcd_wr_data(data10i);i+;lcd_wr_command(0 x93);temp=new_ascent;if(temp/100=0)word 文档 可自由复制编辑 lcd_wr_data();else lcd_wr_data(data_showtemp/100);/显示数据(字符)flag=1;temp%=100;if(temp/10)!=0|flag=1)lcd_wr_data(data_showtemp/10);/显示数据(字符)flag=1;else lcd_wr_data();temp%=10;lcd_wr_data(data_showtemp);/显示数据

26、(字符)lcd_wr_command(0 x95);lcd_wr_data(0 x09);i=0;flag=0;lcd_wr_command(0 x89);while(data11i!=0)lcd_wr_data(data11i);i+;lcd_wr_command(0 x8C);temp=calorie;if(temp/100=0)lcd_wr_data();else lcd_wr_data(data_showtemp/100);flag=1;temp%=100;if(temp/10)!=0|flag=1)lcd_wr_data(data_showtemp/10);/显示数据(字符)flag

27、=1;else lcd_wr_data();temp%=10;word 文档 可自由复制编辑 lcd_wr_data(data_showtemp);/显示数据(字符)lcd_wr_command(0 x8E);lcd_wr_data(k);i=0;flag=0;lcd_wr_command(0 x99);while(data12i!=0)lcd_wr_data(data12i);i+;/*LCD 初始化*/void lcd_int()ret=0;/液晶屏复位 delayms_lcd(2);ret=1;delayms_lcd(2);lcd_wr_command(0 x30);/启动液晶屏基本指令

28、集并开启绘图显示功能 lcd_wr_command(0 x0c);/开显示,关光标,不闪烁 lcd_wr_command(0 x06);/字符进入模式为:字符不动,光标右移,地址加一 lcd_wr_command(0 x01);/清屏 delayms_lcd(2);/等待清屏完成 /*向液晶屏写入命令子函数*/void lcd_wr_command(uchar com)en=0;/关闭通信,为设置参数做准备 rs=0;/选择指令寄存器 rw=0;/写入液晶 en=1;/为开始通信做准备 lcd_port=com;delay_n10_us(8);/大于 72us的延时(根据手册)en=0;/数据

29、送如液晶屏并关闭通信(en的下降沿液晶屏接收数据)/*向液晶屏输入数据子函数*/void lcd_wr_data(uchar dat)en=0;/关闭通信,为设置参数做准备 rs=1;/选择数据寄存器 rw=0;/写入液晶 en=1;/为开始通信做准备 lcd_port=dat;word 文档 可自由复制编辑 delay_n10_us(8);/大于 72us的延时(根据手册)en=0;/数据送如液晶屏并关闭通信(en的下降沿液晶屏接收数据)/*毫秒延时函数,延时 1ms*/void delayms_lcd(uint ms)uchar i;while(ms-)for(i=0;i121;i+);/

30、*10微秒延时函数(n*10us)*/void delay_n10_us(uint n)while(n-)_nop_();_nop_();/*LCD 显示画面选择*/void picture_select()if(old_j=new_j);else switch(new_j)case 1:lcd_int();picture_show1();old_j=new_j;break;case 2:lcd_int();picture_show2();old_j=new_j;break;/*按键相关判断*/void key_select()if(key1=0)word 文档 可自由复制编辑 delayms

31、_lcd(7);if(key1=0)new_j=2;while(key1=0);if(key2=0)delayms_lcd(7);if(key2=0)old_total_distance+=new_total_distance;new_total_distance=0;write_total_distance();control_flag=1;while(key2=0);if(key3=0)delayms_lcd(7);if(key3=0)new_j=1;while(key3=0);if(key4=0)delayms_lcd(7);if(key4=0)old_total_distance+=n

32、ew_total_distance;new_part_distance=0;while(key4=0);/*中断函数参数设定*/void interrupt_set()TMOD=0 x11;/0001 0001 T1、T0 工作在定时方式 1 word 文档 可自由复制编辑 TH1=(65536-10000)/256;/T1定时时间为 10 毫秒(10000 微秒)TL1=(65536-10000)%256;TH0=(65536-20000)/256;TL0=(65536-20000)%256;ET1=1;/启动 T1 中断允许位 ET0=1;EA=1;/启动总中断允许位 TR1=1;/启动

33、T1 TR0=1;/*T1中断函数*/void timer1()interrupt 3 using 1 ET1=0;/关闭 T1 中断允许位 TH1=(65536-10000)/256;/重设 T1 定时时间为 10 毫秒(10000 微秒)TL1=(65536-10000)%256;if(A3145_OUT=0)part_flag=1;ET1=1;/开启 T1 中断允许位 /*T0中断函数*/void timer2()interrupt 1 using 2 TH0=(65536-20000)/256;TL0=(65536-20000)%256;time+;/*写入 24C02 中数据*/vo

34、id write_total_distance()start_24C02();write_one_char(0 xa0);wait_ack();write_one_char(0 x01);wait_ack();write_one_char(old_total_distance/256);wait_ack();stop_24C02();delayms_lcd(100);start_24C02();write_one_char(0 xa0);wait_ack();word 文档 可自由复制编辑 write_one_char(0 x02);wait_ack();write_one_char(old_

35、total_distance%256);wait_ack();stop_24C02();delayms_lcd(100);/*读出 24C02 中 total_distance数据*/void read_total_distance()start_24C02();write_one_char(0 xa0);wait_ack();write_one_char(0 x01);wait_ack();start_24C02();write_one_char(0 xa1);wait_ack();old_total_distance=read_one_char()*256;stop_24C02();del

36、ayms_lcd(100);start_24C02();write_one_char(0 xa0);wait_ack();write_one_char(0 x02);wait_ack();start_24C02();write_one_char(0 xa1);wait_ack();old_total_distance+=read_one_char();stop_24C02();delayms_lcd(100);/*24C02 启动程序*/void start_24C02()SCL=0;_nop_();SDA=1;_nop_();SCL=1;_nop_();SDA=0;word 文档 可自由复制

37、编辑 _nop_();SCL=0;/*24C02写入一个字节*/void write_one_char(uchar x)/写入一个字节 uchar i;for(i=0;i8;i+)x=1;SCL=0;_nop_();SDA=CY;_nop_();SCL=1;_nop_();SCL=0;_nop_();/*24C02等待应答*/void wait_ack()SCL=0;_nop_();SDA=1;/释放数据线 _nop_();SCL=1;_nop_();while(SDA=1);SCL=0;_nop_();/*24C02读出一个字节*/uchar read_one_char()/读出一个字节 uchar i,temp=0;SCL=0;_nop_();SDA=1;/释放数据线 _nop_();for(i=0;i8;i+)SCL=1;word 文档 可自由复制编辑 _nop_();temp=1;temp=temp|SDA;SCL=0;_nop_();return(temp);/*24C02终止程序*/void stop_24C02()SCL=0;_nop_();SDA=0;_nop_();SCL=1;_nop_();SDA=1;_nop_();SCL=0;/当总线多个器件时必须 SCL=1;

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服