自行车测速仪设计报告Word文档格式.docx

上传人:b****7 文档编号:22529796 上传时间:2023-02-04 格式:DOCX 页数:37 大小:314.38KB
下载 相关 举报
自行车测速仪设计报告Word文档格式.docx_第1页
第1页 / 共37页
自行车测速仪设计报告Word文档格式.docx_第2页
第2页 / 共37页
自行车测速仪设计报告Word文档格式.docx_第3页
第3页 / 共37页
自行车测速仪设计报告Word文档格式.docx_第4页
第4页 / 共37页
自行车测速仪设计报告Word文档格式.docx_第5页
第5页 / 共37页
点击查看更多>>
下载资源
资源描述

自行车测速仪设计报告Word文档格式.docx

《自行车测速仪设计报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《自行车测速仪设计报告Word文档格式.docx(37页珍藏版)》请在冰豆网上搜索。

自行车测速仪设计报告Word文档格式.docx

Bicylespeedometer;

Hallsensors;

Angleaccelerationsensor;

目  录

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、霍尔传感器和加速度倾角传感器来实现自行车测速功能。

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<

reg52.h>

intrins.h>

#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();

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();

picture_show0();

delayms_lcd(2000);

picture_show1();

picture_show2();

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>

new_acceleration=0;

if(calorie>

calorie=0;

/***********LCD显示画面0********************/

voidpicture_show0()

{

uchari;

i=0;

lcd_wr_command(0x82);

//设置液晶屏的显示位置

while(data1[i]!

=0)

lcd_wr_data(data1[i]);

i++;

lcd_wr_command(0x91);

while(data2[i]!

lcd_wr_data(data2[i]);

lcd_wr_command(0x8A);

while(data3[i]!

lcd_wr_data(data3[i]);

lcd_wr_command(0x99);

while(data4[i]!

lcd_wr_data(data4[i]);

lcd_wr_command(0x9C);

while(data5[i]!

lcd_wr_data(data5[i]);

/**************LCD画面1********************/

voidpicture_show1()

uchari,flag=0;

uinttemp;

i=0;

lcd_wr_command(0x81);

while(data6[i]!

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]);

else

temp%=100;

if((temp/10)!

lcd_wr_data(data_show[temp/10]);

temp%=10;

lcd_wr_data(data_show[temp]);

lcd_wr_command(0x86);

lcd_wr_data('

m'

flag=0;

lcd_wr_command(0x91);

while(data7[i]!

lcd_wr_data(data7[i]);

lcd_wr_command(0x94);

temp=new_part_distance;

if(temp/100==0)

lcd_wr_command(0x96);

lcd_wr_command(0x89);

while(data8[i]!

lcd_wr_data(data8[i]);

lcd_wr_command(0x8B);

temp=new_speed;

if(temp/10==0)

temp%=10;

lcd_wr_command(0x8C);

/'

s'

old_speed=new_speed;

lcd_wr_command(0x99);

while(data12[i]!

lcd_wr_data(data12[i]);

/**************LCD画面2********************/

voidpicture_show2()

i=0;

lcd_wr_command(0x81);

while(data9[i]!

lcd_wr_data(data9[i]);

temp=new_acceleration;

lcd_wr_data(data_show[temp/10]);

lcd_wr_da

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 育儿知识

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1