基于单片机的自行车里程速度计设计.docx
《基于单片机的自行车里程速度计设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的自行车里程速度计设计.docx(50页珍藏版)》请在冰豆网上搜索。
基于单片机的自行车里程速度计设计
学号:
中州大学毕业设计
设计题目:
基于单片机的自行车里程速度计设计
学院:
专业:
班级:
姓名:
指导教师:
日期:
年月日
摘要
目前自行车已成为人们娱乐、休闲、锻炼的首选,尤其是对于用来锻炼的人们,自行车速度里程计让他们清楚地知道当前的速度、里程等物理量,更好的用于锻炼。
本论文主要阐述一种基于霍尔元件的自行车速度里程计设计。
以AT89C51单片机为核心,A44E霍尔传感器测转数,实现对自行车速度里程计测量统计。
该速度里程计将传感器输入到单片机的脉冲信号的宽度实时地测量出来,然后通过单片机计算出速度和行程,再将所得的数据存储到串口数据存储器,采用CAT24WC32实现在系统掉电的时候保存速度和行程信息,并由串口液晶显示模块实时显示出所测速度和行程。
本设计介绍了自行车速度/里程测试仪的硬件电路和软件设计。
硬件部分利用霍尔元件将自行车每转一圈的脉冲数传入单片机系统,然后单片机系统将信号经过处理送显示。
软件部分用汇编语言进行编程,采用模块化设计思想。
该系统硬件电路简单,子程序具有通用性,完全符合设计要求。
关键词:
速度/里程;霍尔元件;单片机;LCD液晶显示
Abstract
Nowthebicyclehasbecomethefirstchoiceofentertainmentingandexercising.Especiallyforpeopletoexercise,Thebicyclespeed/tripcanfulfillthebasicneedofpeople’slife,sothattheycanlearnthespeedandthemileageofthebicycle.Inthesepaper,thebicyclespeed/tripdesignbasedontheHallelementiselaborated.ByAT89C51askernel,usingA44EHallelementtomeasurerevolution,themeasureandstatisticareachieved.TherangeinformationsaresavedbyCAT24WC32whenthepowerisoff,thebicyclespeedcanbedisplayedonLCD.Inthisarticle,thehardwarecircuitandsoftwaredesignofbicyclespeed/tripinstrumentareintroducedindetail.Aboutthehardware,thepulsenumberistransmittedofonecycleofthebicycleintoSingleChipMicrocomputersystem.ThenthesignalprocessedbySingleChipMicrocomputersystemissenttodisplayscream.Aboutthesoftware,inassemblelanguage,theprogramisdesignedinthemodeofmodules.Thesystemhassimplehardware,commonsub-program,andmeetthedemandofdesign.
Keywords:
speed/trip;Hallelement;SingleChipMicrocomputer;LCD
一、概述
1、设计目的……………………………………………………………1
2、课题简介……………………………………………………………1
二、系统设计
1、总体设计方案………………………………………………………2
2、硬件部分简介………………………………………………………3
(1)AT89c51芯片简介………………………………………………3
(2)硬件设计…………………………………………………………4
3、软件部分……………………………………………………………5
(1)初始化程序………………………………………………………6
(2)主程序……………………………………………………………8
(3)中断程序…………………………………………………………9
(4)里程、速度处理程序……………………………………………11
(5)显示子程序………………………………………………………14
(6)延时子程序………………………………………………………16
三、调试………………………………………………………………………17
1、硬件调试……………………………………………………………17
2、软件调试……………………………………………………………17
四、操作说明…………………………………………………………………19
五、参考文献…………………………………………………………………20
六、心得体会…………………………………………………………………21
七、附录………………………………………………………………………22
1、元器件清单…………………………………………………………22
2、整体原理图…………………………………………………………23
3、完整程序……………………………………………………………24
自行车里程计/速度计的设计
一、概述
1、设计目的
本设计采用AT89C51单片机作控制,利用霍尔元件等器件设计一个可用LED数码管显示当前自行车行驶的距离及速度并具有超速报警功能的自行车里程/速度表,使其作为自行车的一种辅助工具,让自行车的功用更强大,给人们带来更多的方便。
2、课题简介
自行车被发明及使用到现在已有两百多年的历史,在这两百年间人类在不断的尝试与研发过程中,自行车发展的目的也从最早的代步工具转换成休闲娱乐的用途,随着生活水平的提高,人们希望自行车的功能更强大,而里程计/速度计正满足了这个需求。
现在先进的里程/速度计不仅能显示实时的速度和里程,还显示时间,甚至具有测量骑车人的心跳、显示骑车人热量消耗等功能。
由于时间有限,本设计完成的功能减为两个,即测量并通过LED数码管进行动态显示当前的速度和里程,并在超速时发出警报。
要求达到的各项指标及实现方法如下:
1.利用霍尔传感器产生里程数的脉冲信号。
2.对脉冲信号进行计数。
实现:
利用单片机自带的计数器T1对霍尔传感器脉冲信号进行计数。
3.对数据进行处理,要求用LED显示里程总数和即时速度。
实现:
利用软件编程,对数据进行处理得到需要的数值。
最终实现目标:
自行车的速度里程表具有里程、速度测试与显示功能,采用单片机作控制,显示电路可显示里程及速度。
二、系统设计
1、总体设计方案
采用AT89C51芯片,用霍尔元件将车轮的转速转换成电脉冲,经过处理后送入单片机。
里程及速度的测量,是经过AT89C51的定时/计数器测出总的脉冲数和每转一圈的时间,再经过单片机的计算得出,计算结果通过LED显示器显示出来。
传感器是获取自然或生产领域中信息的关键器件,是现代信息系统和各种设备不可缺少的信息采集工具。
磁传感器是一种将磁学量信号转变为电信号的器件或装置。
随着信息产业、工业自动化、医疗仪器等的飞速发展和计算机应用的普及,需要大量的传感器将被测或被控的非电信号转换成可与计算机兼容的电信号。
作为输入信号,这就给磁传感器的快速发展提供了机遇,形成了磁传感器的产业。
其中最具代表的磁传感器就是霍尔传感器,在自动检测系统中,利用霍尔传感器测转数是一种最基本的测量工作。
单片机是本次设计的核心部件,它是信号从采集到输出的桥梁,而且包括计算、定时、信息处理等功能
当轮子每转一圈,通过开关型霍尔元件传感器采集到一个脉冲信号,并从引脚12即P3.2外部中断0端输入,传感器每获取一个脉冲信号即对系统提供一次计数中断。
每次中断代表车轮转动一圈,中断数n轮圈的周长为L的乘积为里程值。
计数器T1计算每转一圈所用的时间t,就可以计算出即时速度v。
当里程键按下时,里程指示灯亮,LED切换显示当前里程,与当速度键按下时,速度指示灯亮,LED切换显示当前速度,若自行车超速,系统发出报警信号,指示灯闪烁。
里程数据自动记忆,也可用于电动自行车、摩托车、汽车等机动车仪表上。
设计包括硬件、软件两部分,硬件电路包括AT89C51单片机的外围电路以及LED显示电路等,这里对硬件部分只做简单介绍,主要阐述的是软件部分的设计,包括数据初始化程序的设计、主程序的设计、处理子程序的设计、显示子程序的设计;最后针对仿真过程遇到的问题进行了具体说明与分析,对本次设计进行总结。
图2.1系统的原理框图
2、硬件部分介绍
(1)AT89C51芯片简介
AT89C51是一种带4K字节闪存可编程可擦除的只读存储器即为
(FPEROM—FlashProgrammableandErasableReadOnlyMemory)的低电压、高性能CMOS8位微处理器,俗称单片机。
图2-2单片机内部机构示意图
管脚说明:
VCC:
供电电压。
GND:
接地。
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89C51的一些特殊功能口,如下表所示:
口管脚备选功能
P3.0RXD(串行输入口)
P3.1TXD(串行输出口)
P3.2/INT0(外部中断0)
P3.3/INT1(外部中断1)
P3.4T0(记时器0外部输入)
P3.5T1(记时器1外部输入)
P3.6/WR(外部数据存储器写选通)
P3.7/RD(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
/PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA/VPP:
当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出。
振荡器特性:
XTAL1和XTAL2分别为反向放大器的输入和输出。
该反向放大器可以配置为片内振荡器。
石晶振荡和陶瓷振荡均可采用。
如采用外部时钟源驱动器件,XTAL2应不接。
有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。
(2)硬件设计
自行车里程计/速度计电路原理图见附录。
本次设计信号的捕获采用的是霍尔传感器。
霍尔器件具有许多优点,它们的结构牢固、体积小、重量轻、寿命长、安装方便、功耗小、频率高(可达1MHz)、耐震动、不怕灰尘、油污、水汽及烟雾等的污染或腐蚀。
霍尔线性器件的精度高、线性度好;霍尔开关器件无触点、无磨损、输出波形清晰、无抖动、无回跳、位置重复精度高。
取用各种补偿和保护措施的霍尔器件工作温度范围宽,可达-55℃~150℃。
XTAL1和XTAL2分别为反向放大器的输入和输出。
该反向放大器可以配置为片内振荡器。
石晶振荡和陶瓷振荡均可采用。
如采用外部时钟源驱动器件,XTAL2应不接。
由于输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。
P0口作为输出口用于显示历程状态和速度状态。
由于P0口没有上拉电阻,
因此作为输出口时要加上上拉电阻来驱动LED数码管的点亮。
接于引脚10即P3.2、RXD的开关用于控制改变显示的方式,当开关闭合时,显示速度;开关打开时显示里程。
第12脚即外部中断0用于对轮子圈数的计数输入,轮子每转一圈,霍尔传感器输出一个低电平脉冲。
第十三脚即外部中断1用于控制定时器T1的启停,当输入为0时关闭定时器。
此控制信号是将轮子圈数的计数脉冲经二分频后形成,这样,每次定时器T1的开启时间刚好为转一圈的时间,根据轮子的周长就可以计算出自行车的速度。
P1.4口和P1.5口用于EEPROM存储器24C01的存取控制。
11脚输出用于超速时的报警,此时蜂鸣器发出声音,同时LED灯闪烁。
LED数码管采用四位相连的共阴极数码管,片选信号分别通过三极管接
至21-24管脚即P2.0-P2.4口,从而实现里程和速度的动态显示。
自行车的速度里程表的硬件电路设计是基础部分,它包括信号的捕获、放大、整形,单片机的计算处理,数码管的实时显示和单片机外围基本电路的设计,两大主要器件就是传感器和单片机。
3.软件部分软件部分
模块化结构设计即是根据要求和硬件设计的结构,将整个系统的功能分成许多小的功能模块,再根据这些小的功能模块进行程序编写的过程。
这样的设计方法,使得系统的整个功能和各部分的功能趋于明朗化。
当系统出现问题,就可以根据功能设置找出问题的根源,从而更快地解决问题。
所以说,在整个设计过程中,软件设计必须与硬件设计紧密地结合在一起。
软件设计包括初始化程序、主程序、行车过程中里程和速度计算子程序、延时子程序、中断服务子程序、显示子程序等。
系统软件总体流程图如图3.1所示
总体设计思路:
首先进行初始化,选择车轮周长,P3.0是用于里程和速度切换的,低电平为显示速度,高电平为显示里程。
根据P3.0的状态来决定显示内容,P3.0=1时,转到计算速度子程序并进行显示;P3.0=0时,转到计算里程子程序并进行显示。
P1.0和P1.1口分别用于显示里程状态和速度状态。
P1.2、P1.3、P1.6和P1.7口分别用于设置轮圈的大小,低电平有效。
中断0用于对轮子圈数的计数输入,轮子每转一圈,霍尔传感器输出一个低电平脉冲。
将根据里程寄存器中的内容计算和判断出行驶里程数。
中断1用于控制定时器T1的启/停,当输入为0时关闭定时器。
此控制信号是将轮子圈数的计数经二分频后形成。
这样,每次定时器T1的开启时间刚好为转一圈的时间,根据轮子的周长就可以计算出自行车的速度。
图3.1系统整体流程图
主要内存单元及用处:
50H:
EEPROM器件寻址字节存放单元
51H:
EEPROM传送字节数存放单元
30H:
EEPROM发送数据缓冲单元
40H:
EEPROM读出数据存放单元
0A0H:
EEPROM寻址字节写入
0A1H:
EEPROM寻址字节读出
62H:
DPTR计数扩展高8位
6CH:
定时器T1计数扩展高8位
6DH:
定时器T1计数扩展高8—16位
60H、61H、62H:
里程计数单元
68H、69H、6AH、6BH:
存放自行车每圈时间数
70H、71H、72H、73H:
显示BCD码数据存放用
11H--15H:
存放被除数
16H—19H:
存放除
(1)初始化程序
初始化程序主要完成以下工作:
将T1设为外部控制定时器方式;外部中断0及外部中断1设为边沿触发方式;将部分内存单元清0;设置轮子周长;开中断及定时器;将EEPROM中的数据调入内存。
CLEARMEN:
MOVTMOD,#90H;T1为16位外部控制定时器
MOVSP,#75H;堆栈从75H开始
SETBPX0;外部中断0优先级为1
SETBIT0;外部中断0用边沿触发
SETBIT1;外部中断1用边沿触发
CLRA;清A
MOV20H,A;清内存中特定单元
MOV6CH,A;清内存中特定单元
MOV6DH,A;清内存中特定单元
MOV70H,A;清内存中特定单元
MOV71H,A;清内存中特定单元
MOV72H,A;清内存中特定单元
MOV73H,A;清内存中特定单元
MOV60H,A;清内存中特定单元
MOV61H,A;清内存中特定单元6
MOV62H,A;清内存中特定单元
MOV63H,A;清内存中特定单元
DECA;A为0FFH
MOV68H,A;内存置数据0FFH
MOV69H,A;内存置数据0FFH
MOV6AH,A;内存置数据0FFH
MOV6BH,A;内存置数据0FFH
MOVP1,A;P1口置1
CLEAR1:
JBP1.2,KEY1;根据P1.2设置状态
MOV21H,#0FH
LJMPCLEAR2;转CLEAR2
KEY1:
JBP1.3,KEY2;根据P1.3设置状态
MOV21H,#12H
LJMPCLEAR2
KEY2:
JBP1.6,KEY3;根据P1.6设置状态
MOV21H,#14H
LJMPCLEAR2
KEY3:
JBP1.7,ERR;根据P1.7设置状态
MOV21H,#19H
CLEAR2:
SETBTR1;开定时器T1
SETBEA;开中断允许
SETBEX0;开外中断0
SETBET1;开定时中断T1
SETBP3.1;关报警器
LCALLVIICREAD;将EEPROM中原里程数据调入内存
RET
ERR:
CPLP3.1;未设置车轮周长,开始报警
LCALLDL5S;延时5S
LJMPCLEAR1;重新初始化
初始化具体过程:
首先对P1.2口的内容进行查询,若P1.2=0,则说明P1.2口接的按钮被按下,即选择第一种车轮周长,同时将周长存入21H单元内;若P1.2=1,则第一个按钮没被按下,再对P1.3口的内容进行查询,内容为0则将其周长值存入21H中,不为0则扫描P1.6,内容为0则将其周长值存入21H中,不为0则扫描P1.7,若P1.7为0则将其周长值存入21H中,不为0则说明没有选择车轮直径,此时开始报警,并调用延时子程序。
接着再从P1.2口扫描,如此循环,直到有键按下后停止报警。
图3.2初始化程序流程图
(2)主程序
主程序根据P3.0口的开关状态选择里程速度显示。
START:
LCALLCLEARMEN;上电初始化
START1:
JBP3.0,DISPLAYS;P3.0=1,显示里程
LCALLDISPLAYV;P3.0=0,显示速度
START2:
SJMPSTART1;循环
图3.3主程序流程图
(3)用外部中断0实现的里程计数程序
定时中断是为满足定时或计数的需要而设置的。
在单片机内部有两个定时/计数器,以对其中的计数结构进行计数的方法,来实现定时或计数功能。
当结构发生计数溢出时,即表明定时时间或计数值已满,这时就以计数溢出信号作为中断请求,去置位一个溢出标志,作为单片机接受中断请求的标志。
这种中断请求是在单片机芯片内部发生的,因此无须在芯片上设置引入端。
定时/计数器控制寄存器TCON是8位寄存器,地址为88H,可以位寻址。
其高4位用于定时/计数器中断控制,低4位借给外部中断,用做中断标志和触发方式选择位。
本设计采用定时中断,对自行车的里程和速度进行计数。
INTEX0:
PUSHACC;累加器堆栈保护
PUSHPSW;状态字堆栈保护
INC60H;圈数加1
CLRA;清A
CJNEA,60H,INTEX0OUT;计数器没溢出转INTEX0OUT
INC61H;溢出进位(61H加1)
CJNEA,61H,INTEX0OUT;计数器没溢出转INTEX0OUT
INC62H;溢出进位(62H加1)
INTEX0OUT:
LCALLVIICWRITE;里程数据存入EEPROM
SETBEX1;开外部中断1
POPPSW;状态字恢复
POPACC;累加器恢复RETI;中断返回
;每转一圈时间计数处理程序,每圈时间放在68H—6BH单元中
INTEX1:
PUSHACC;累加器堆栈保护
PUSHPSW;状态字堆栈保护
CLREX1;关外部中断1
JNB00H,INTEX11;溢出标志为0转INTEX11
MOVTL1,#0FFH;溢出时计时单元赋#0FFH(显示速度为零)
MOVTH1,#0FFH
MOV6CH,#0FFH
MOV6DH,#0FFH
INTEX11:
MOV68H,TL1;将时间计数值移入暂存单元68H-6BH
MOV69H,TH1
MOV6AH,6CH
MOV6BH,6DH
CLRA;清A