自行车里程表的设计.docx
《自行车里程表的设计.docx》由会员分享,可在线阅读,更多相关《自行车里程表的设计.docx(60页珍藏版)》请在冰豆网上搜索。
![自行车里程表的设计.docx](https://file1.bdocx.com/fileroot1/2023-1/30/6ca09672-828b-4443-b6e7-7aa5f43e5698/6ca09672-828b-4443-b6e7-7aa5f43e56981.gif)
自行车里程表的设计
学号:
1434060103
毕业设计说明书
GRADUATEDESIGN
设计题目:
基于单片机的自行车里程速度表设计和实现
学生姓名:
程晓锋
专业班级:
2014自升本1班
学院:
继续教育学院
指导教师:
邸志刚副教授
2016年11月30日
摘要
随着居民生活水平的不断提高,自行车不再仅仅是普通的运输、代步的工具,而是成为人们娱乐、休闲、锻炼的首选。
自行车的速度里程表能够满足人们最基本的需求,让人们能清楚地知道当前的速度、里程等物理量。
本论文主要阐述一种基于霍尔元件的自行车的速度里程表的设计。
以AT89C52单片机为核心,霍尔传感器测转数,实现对自行车里程/速度的测量统计,采用1302实现在系统掉电的时候保存里程信息,并能将自行车的里程数及速度用LCD实时显示。
文章详细介绍了自行车的速度里程表的硬件电路和软件设计。
硬件部分利用霍尔元件将自行车每转一圈的脉冲数传入单片机系统,然后单片机系统将信号经过处理送显示。
软件部分用C语言进行编程,采用模块化设计思想。
该系统硬件电路简单,子程序具有通用性。
关键词:
里程/速度;霍尔元件;单片机;LCD显示
Abstract
Withthedevelopingofpeople’slife,thebicycleisnotonlytheuniversaltooloftransportationandsubstituteforwalking,butbecomesthefirstchoiceofentertainmentandexercising.Thebicyclemileage/speedcanfulfillthebasicneedofpeople’slife,sothattheycanlearnthespeedandthemileageofthebicycle.Inthispaper,thebicyclemileage/speeddesignbasedontheHallelementiselaborated.ByAT89C52askernel,usingHallelementtomeasurerevolution,themeasureandstatisticareachieved.Therangeinformationissavedbywhenthepowerisoff,thebicyclespeedcanbedisplayedonLCD.Inthisarticle,thehardwarecircuitandsoftwaredesignofbicyclemileage/speedinstrumentareintroducedindetail.Aboutthehardware,thepulsenumberistransmittedofonecycleofthebicycleintoSingleChipMicrocomputersystem.ThenthesignalprocessedbySingleChipMicrocomputersystemissenttodisplayscream.Aboutthesoftware,inassemblelanguage;theprogramisdesignedinthemodeofmodules.Thesystemhassimplehardware,commonsub-program.
KEYWORDS:
Mileage/speed;Hallelement;Singlechipmicrocomputer;LCDdisplay.
前言
本文介绍里程表设计以单片机和霍尔传感器为核心。
霍尔传感器将到来的低电平脉冲信号输入到单片机进行控制和计算,再采用LCD模块进行显示,使得自行车的里程数据能直观的显示给使用者。
自行车里程表是用于远距离连续测量自行车行驶距离的仪表。
它分为电源、霍尔传感器和显示器3部分。
随着居民生活水平的不断提高,自行车不再仅仅是普通的运输、代步的工具,而是成为人们娱乐、休闲、锻炼的首选。
因此,人们希望自行车的功用更强大,能给人们带来更多的方便。
自行车里程速度表作为自行车的一大辅助工具也正是随着这个要求而迅速发展的,其功能也逐渐从单一的里程显示发展到速度、时间显示,甚至有的还具有测量骑车人的心跳、显示骑车人热量消耗等功能。
本文介绍的自行车里程表是由电源稳压系统供电,AT89C52单片机为中央处理器,结合高精度的控制电路,方便地实现了智能化、高精度、高可靠性、高效率的自行车里程表的设计,并且使用方便。
里程表以单片机AT89C52为核心,由系统输入、单片机部分和系统输出组成。
第1章绪论
单片机自从推出以来,以其超小型化、结构紧凑、可靠性高、成本低等优点被人们广泛接受,从而使用于工业、电讯、数据处理、仪器仪表等多方面。
自行车里程表是自行车的重要配件,在自行车仪表中占重要位置,但几十年来其发展变化并不大,现在国外很多车中使用了数字里程表,但在国内还并不多见。
1.1课题背景
里程表的原理很简单,车轮的圆周长是恒定不变的。
由此可以计算出每走一里路车轮要转多少圈,这个数也是恒定不变的。
因此只要能够自动把车轮的转数积累下来,然后除以每一里路对应的转数就可以得到行驶的里程了。
这样简单的原理古人就已经发现,并且开始使用了。
“记里鼓车”就是这样的装置,它是利用上述原理,再加上巧妙的机构使得车轮每转一定圈数就自动敲一下鼓,此时只要有专人把它记下了,就可以得到所走里程。
此装置十分巧妙无论白天、黑夜均可使用,而且盲人也可使用,体现出了我国古代劳动人民的聪明才智。
不过,如果车上没有人默记鼓声数目的话,单靠记里鼓车本身还不能累计一共走了多少里。
而且车停下来之后谁也不知道这车曾经走过多少里路,这是美中不足之处。
从保护环境和经济条件许可等因素综合来看,自行车目前乃至今后都有着广阔的发展空间。
目前市面上自行车的速度表和里程表都是机械的,看起来不够直观和方便。
如果能用LCD直接显示出来里程数或速度值,就可节省用户的时间及精力处理自行车行进过程中的突发事件。
1.2设计的主要内容及技术指标
单片机软件设计程序主要包括里程设计模块;存储历史里程数据设计模块;里程的显示设计模块;里程公里数的累计设计模块;里程公里数的清0设计模块。
里程计数时有一盏指示灯闪烁;用LCD1602进行显示公里数;用个开关实现对里程公里数的清0功能;用霍尔传感器实现对里程车轮圈数的累计功能。
主要技术指标:
一.完成里程的显示功能
二.能存贮历史里程数据
三.能够清除历史数据
四.有一盏指示灯
第2章 自行车里程表总体方案设计
2.1 任务分析和实现
本设计的任务是:
以STC89C52单片机为处理核心,用传感器将车轮的转数转换为电脉冲,进行处理后送入单片机。
里程及速度的测量,是经过STC89C52测出总的脉冲数和每一秒所转的圈数,再经过单片机的计算得出,其结果通过1602LCD显示屏显示出来。
本系统总体思路如下:
假定车轮的周长为L,在车轮上安装m个磁钢,则测得的里程值最大误差为L/m。
经综合分析,本设计中取m=1。
车轮每转一圈,开关型霍尔传感器就会采集到一个脉冲信号,并从引脚端输入,传感器每获取一个脉冲信号代表车轮转动一圈,即圈数qs加1,圈数qs和设置的自行车车轮的周长L的乘积即为当前所走里程。
同时可以从定时器TI知道在1秒内单片机收到的脉冲个数,即车轮所转的圈数,而自行车车轮周长和车轮所转圈数的乘积即为这1秒内自行车所走的距离,距离除以1秒的时间,即为瞬时速度。
平均速度的计算大体上和瞬时速度一样,从计数器T1知道在t秒内车轮所转的圈数后,和自行车车轮周长相乘得到t秒内自行车所走的距离,距离除以t即为平均速度。
另一个定时器T0则可以用来实现秒表的计时。
最后LCD显示屏显示内容的切换可以由键盘的输入来实现,而秒表计时的开始、暂停、清零及里程的清零也可以用键盘的输入来实现。
设计时,应综合考虑测速精度和系统反应时间。
本设计采用的脉冲计数方法,用来计算速度具有较高的测速精度。
在计算里程时取了自行车的理想状态。
实际中,误差控制在几米之内,相对于整个里程来说不是很大。
另外,还应尽量保证其他子模块在编程时的通用性和高效性。
最终实现目标:
采用单片机作控制,自行车里程表具有里程、速度和秒表计时显示功能。
通过不同按键的按下切换里程、速度、秒表三者之间的显示,也可以实现秒表计时的开始、暂停、清零及里程清零的功能,方便地实现了智能化、高精度、高可靠性、高效率的自行车里程表的设计,并且使用方便。
2.2 自行车里程表硬件方案设计
根据本设计的要求,经研究和分析,硬件部分主要分为信息采集、信息处理、键盘输入和信息显示四大模块,其中的核心是信息处理,所用芯片为STC89C52单片机。
系统硬件框图如图2-1所示:
外部信号
信息采集
STC89C52
显示信息
键盘输入
图2-1 系统硬件框图
2.3 自行车里程表软件方案设计
通过软件控制单片机的功能是单片机的主要特点和优点,程序的设计要考虑合理性和可读性,遵循模块化设计的原则,采用自顶向下的设计方法。
模块化设计使程序的可读性好、修改及完善方便。
软件设计包括显示子程序、数据处理子程序(分为里程子程序、速度子程序)、秒表计时子程序、脉冲接收子程序等等。
显示子程序是通过编程将数据处理的结果送给显示器显示。
数据处理子程序是将得到的车轮所转的圈数和实际要显示值之间有一定的对应关系,经过软件编程显示所需要的值。
秒表计时子程序是采用计数器T0通过编程实现秒表计时工作。
脉冲接收子程序是通过编程实现脉冲的计数,即对车轮所转的圈数计数。
系统软件框图如图2-2所示:
图2-2 系统软件框图
第3章自行车里程表硬件模块设计
3.1里程表的硬件设计
本次里程表的设计,硬件电路主要由霍尔传感器电路,按键电路,电源电路,时钟电路,LCD显示电路,串口下载电路,复位电路,晶振电路构成。
3.1.1霍尔传感器电路模块设计
A44E集成霍尔开关由稳压器A、霍尔电势发生器(即硅霍尔片)B、差分放大器C、施密特触发器D和OC门输出E五个基本部分组成,如图3-1所示。
(1)、
(2)、(3)代表集成霍尔开关的三个引出端点。
在电源端加电压Vcc,经稳压器稳压后加在霍尔电势发生器的两端,根据霍尔效应原理,当霍尔片处在磁场中时,在垂直于磁场的方向通以电流,则和这二者相垂直的方向上将会产生霍尔电势差VH输出,该VH信号经放大器放大后送至施密特触发器整形,使其成为方波输送到OC门输出。
当施加的磁场达到工作点时,触发器输出高电压(相对于地电位),使三极管导通,此时OC门输出端输出低电压,通常称这种状态为开。
当施加的磁场达到释放点时,触发器输出低电压,三极管截止,使OC门输出高电压,这种状态为关。
这样两次电压变换,使霍尔开关完成了一次开关动作。
工作点和释放点的差值一定,此差值称为磁滞,在此差值内,V0保持不变,因而使开关输出稳定可靠,这也就是集电成霍尔开关传感器优良特性之一。
传感器主要特性是它的输出特性,即输入磁感应强度B和输出电压V0之间的关系。
测量时,在1、2两端加5V直流电压,在输出端3和1之间接一个负载电阻,输出端3接单片机INT0/P3.2,如图3-2所示。
图3-1集成开关型霍尔传感器
图3-2霍尔传感电路
3.1.2按键电路模块设计
键盘在单片机使用系统中,实现输入数据、传送命令的功能,是人工干预的主要手段。
键盘是单片机系统设计中一种主要的信息输入接口,合理的设计,不仅可以节省系统的设计成本,更可使仪器设备的操作变得更为简单、方便,很大程度上提高系统综合性能。
本次设计中通过按键来更改自行车车轮半径,并控制显示自行的车里程和平均速度,s3刷屏,s1加数据,s2减数据。
图3-3按键电路
3.1.3电源电路模块设计
为整个电路提供电源。
电路由7805三端稳压集成电路、电容、LED灯、1千欧姆的电阻、开关和直流电源组成。
7805三端稳压集成电路内部还有过流、过热及调整管的保护电路,使用起来可靠、方便,而且价格便宜。
注意事项:
电源不要超过20V,3A,防止意外。
图3-4电源电路
3.1.4时钟电路模块设计
DS1302和单片机的连接也仅需要3条线:
RST引脚(高电平时启动数据传送)、SCLK串行时钟引脚、I/O串行数据引脚,Vcc2为备用电源,外接32.768kHz晶振,为芯片提供计时脉冲。
图3-5时钟电路
3.1.5LCD显示模块电路模块设计
LCD1602引脚介绍:
第1脚:
VSS为电源地
第2脚:
VDD接5V电源正极
第3脚:
VEE为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高。
第4脚:
RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。
第5脚:
RW为读写信号线,高电平
(1)时进行读操作,低电平(0)时进行写操作。
第6脚:
E(或EN)端为使能(enable)端,高电平
(1)时读取信息,负跳变时执行指令。
第7~14脚:
D0~D7为8位双向数据端。
第15~16脚:
空脚或背灯电源。
15脚背光正极,16脚背光负极。
图3-6显示电路
3.1.6串口下载电路模块设计
串行通信是指使用一条数据线,将数据一位一位地依次传输,每一位数据占据一个固定的时间长度。
其只需要少数几条线就可以在系统间交换信息,特别使用于计算机和计算机、计算机和外设之间的远距离通信。
单片机的串行通信可用于和计算机之间传送数据,一般采用RS232接口,但是由于TTL电平和RS232电平不兼容,所以两者对接时,必须进行电平转换,其原理图如图2-9。
RS232和电平转换最常用的芯片有MC1488、MC1489和MAX232,各厂家生产的此类芯片虽然不同,但原理都一样。
在本次设计选用的是美国MAXIM公司的MAX232芯片,由此构成程序下载电路,以便调试烧写程序。
它是RS232双工发送器/接收器接口电路芯片,由于芯片内部有自升压的电平倍增电路,将+5V转换成-10~+10V,满足RS232标准对逻辑1和逻辑0的电平要求,工作时仅需要单一的+5V电源。
图3-7串口下载电路
3.1.7复位电路模块设计
上电时,刚接通电源,电容C相当于瞬间短路,+5V立即加到RET/VPD端,该高电平使89C52全机自动复位,这就是上电复位;若运行过程中需要程序从头执行,只需按动按钮即可。
按下按钮,则直接把+5V加到了RET/VPD端从而复位称为手动复位。
电路图如图3-8所示。
图3-8复位电路
3.1.8晶振电路模块设计
晶振电路用于产生单片机工作时所需的时钟控制信号。
通过单片机的引脚XTAL1,XTAL2跨接石英晶体振荡器和微调电容,构成一个稳定的自激振荡器。
时钟频率直接影响单片机的速度,晶振电路的质量也直接影响单片机系统的稳定性。
晶振电路电路图如图3-9所示。
图3-9晶振电路
第4章软件的设计
4.1里程表的软件设计
本自行车里程表软件采用模块化设计方法。
整个系统由初始化模块、频率测量模块、LCD显示模块、速度计算和显示模块、里程计算和和显示模块、数据存储、读取模块、定时器中断服务模块、时钟模块以及其他功能模块组成。
本设计的主要内容是自行车里程速度表,日历时钟为附加功能,在此进行简单介绍。
4.1.1里程速度功能模块实现
里程速度功能程序流程图如图4-1所示。
开始
读取EEPROM数据
检测按钮处理直径设置
初始化设置特殊功能寄存器、置定时常数、开中断、清屏等
等待中断
刷新累计
行驶时间
刷新里程、速度存储里程数据等
切换屏幕显示内容
INT0
INT1
图4-1里程速度功能程序流程图
程序代码如下:
voidmain()
{
EEPROM_LXRD(0x43,0,3,number);
qs=number[0];
as=number[1];
bs=number[2];
init_LCD();初始化LCD
dispmore(1,1,"-DigitalMeter-",16);
for(i=0;i<25000;i++);
dispmore(2,1,"Welcome",16); 显示欢迎信息
for(i=0;i<25000;i++);
dispmore(2,1,"Welcome.",16);
for(i=0;i<25000;i++);
dispmore(2,1,"Welcome..",16);
for(i=0;i<25000;i++);
dispmore(2,1,"Welcome...",16);
for(i=0;i<25000;i++);
dispmore(2,1,"Welcome....",16);
for(i=0;i<25000;i++);
dispmore(2,1,"Welcome.....",16);
for(i=0;i<30000;i++);
W1302(0x90,0xa5);//打开充电二级管一个二级管串联一个2K电阻
W1302(0x8e,0x80);//写保护,禁止写操作
wrcom(0x01);
MODE=0;
P2=0xff;
qs2=0;
tr1=5;
tr2=5;
wrcom(0x01);
dispmore(1,1,"SetBikeTireL=",16);
wrcom(0xc9);
dispone('c');
wrcom(0xca);
dispone('m');
P2=0xff;
wrcom(0xc6);dispone(tr1+0x30);
wrcom(0xc7);dispone(tr2+0x30);
while
(1){
if(K1==0){for(i=0;i<4000;i++);if(K1==0){if(++tr1>9)tr1=0;wrcom(0xc6);dispone(tr1+0x30);for(i=0;i<32000;i++);}}
if(K2==0){for(i=0;i<4000;i++);if(K2==0){if(++tr2>9)tr2=0;wrcom(0xc7);dispone(tr2+0x30);for(i=0;i<32000;i++);}}
if(K3==0){for(i=0;i<4000;i++);if(K3==0)break;}
}
tc=3.14*(10*tr1+tr2);
TMOD=0x11;
TH0=0x3c; 置定时常数
TL0=0xb0;
TH1=0xb1;
TL1=0xdf;
IT0=1; 外部中断触发方式均是边缘触发
IT1=1;
IE=0x9f; 开中断
IP=0x02;
TR0=1; T0和T1开始计时
TR1=1;
P33=1;
IE0=0;
wrcom(0x01);
4.1.2日历时钟模块功能
时钟显示模块可以通过按键来校准时间。
当K3按键按下时,电子日历停止走时,此时可以进行年的校准,年调好之后,再按一下校准时间便可以调整月,同理可以对日、小时、分、秒进行设置。
对应有K1、K2键,可以加和减的操作。
都调整好之后就将按照新时间开始走时。
具体流程图如下。
开始
始终开始工作
是否显示时间
设置键是否按下
选中要修改的
加键是否按下
减键是否按下
修改时间和日期
返回
是
是
图4-2校准时间流程图
程序代码如下:
while
(1)
{if(ag==1)
{if((K1|K2)==0)//初始化
{Delay5Ms();
if((K1|K2)==0)
Set1302(inittime);
}
if(K3==0)//设置和选择项目键
{Delay5Ms();
if(K3==0)
{
id++;
if(id>7)
id=0;}
while(K3==0);}
switch(id)
{
case0:
sec=0;
Disp_line1();
Disp_line2();
break;
case1:
//年
year=1;
Disp_line1();
Disp_line2();
id_case1_key();
break;
case2:
//月
year=0;
mon=1;
Disp_line1();
Disp_line2();
id_case1_key();
break;
case3:
//日
mon=0;
day=1;
Disp_line1();
Disp_line2();
id_case1_key();
break;
case4:
//星期
day=0;
weekk=1;
Disp_line1();
Disp_line2();
id_case1_key();
4.1.3LCD1602液晶显示模块
LCD1602液晶显示器属于字符型液晶显示器,其内部自带有字符库,所以只要向显示器输送字符的ASCII码,就可以显示该字符了。
对于1602显示程序的编写最主要的是掌握好1602的读写操作的时序。
1602显示器的控制端分别为RS、RW和E,当写指令时RS为低电平,RW为低电平,E首先为高电平,然后将数据送出,在延时一定时间后E变为低电平。
这样就把命令写到了1602中。
当写数据时RS为高电平,RW为低电平,E首先为高电平,然后将数据送出,在延时一定的时间后E变为低电平。
这样就把数据写到了1602中。
在实际使用1602时,要先将显示器初始化,初始化的内容包括清屏、设置显示模式,首字符的位置、光标的有无和闪烁等,然后才能显示具体内容。
开始
进行LCD的初始化
进行数据的处理
调用写指令子函数
调用写数据子函数
显示
图4-3LCD显示程序流程图
该函数的作用是对LCD进行检测,看LCD是否处于忙的状态.当bflag=1时表示忙,此时不可以向LCD进行读写操作.而当busy=0时,表示可以向它读写数据.
程序代码:
voidwait()
{P2=0xff;
RW=1;RS=0;
do{E=0;E=1;}while(busy==1);
}
voiddispone(dat) 写数据,并显示出来
{P2=dat;
RW=0;RS=1;
E=0;E=1;
wait();
}
voidwrcom(com) 向LCD写入控制字
{P2=com;
RW=0;RS=0;
E=0;E=1;
wait();
}
voidinit_LCD()初始化LCD
{wrcom(0x01);显示清零,数据指针清零
wrcom(0x06);写一个字后指针加一
wrcom(0x38);设置16*2显示,5*7点阵,8位数据接口
wrcom(0x0c);设置开显示,不显示光标
}
voiddispmore(line,row,uchardat[],i)//格式为dispmore(第几行,第几列,开始要显示的字符地址,显示几个字符);
{ucharcom;
s=dat;
if(line==1)
{com=0x80+row-1;//第一行第一列