基于单片机智能速度里程表的设计.docx
《基于单片机智能速度里程表的设计.docx》由会员分享,可在线阅读,更多相关《基于单片机智能速度里程表的设计.docx(22页珍藏版)》请在冰豆网上搜索。
基于单片机智能速度里程表的设计
前言
汽车是现代生活中不可或缺的一种重要交通工具,传统的指针式的里程表伴随着汽车的诞生就一直为人们接受,不过,新生事物不会因传统的存在而停止它前进的步伐,数码科技在今天已渗透到工业,农业,民用等产品的点点滴滴。
新概念的车速里程表最直观的变化就是用大屏幕的液晶取代指针式表盘,直接用数字显示时速,里程,以及其他一些诸如油耗、时钟、环境温度等参数。
直观的呈现给使用者。
由于单片机体积小,可以把它做到产品的内部,取代老式机械零件,缩小产品体积,增强功能,实现智能化。
因此广泛的被用在智能产品中。
Intel公司的MCS-51系列单片机在近年来广泛流行。
本文即介绍一种基于MCS-51单片机的里程表的设计与实现。
霍尔传感器与AT89C51结合实现最简测速系统,该系统结构简单,抗干扰能力强,适合于恶劣环境下进行速度里程测量,有广泛的应用前景。
本文先对里程表设计中所需设备作了详细介绍,对设计中存在的问题进行了说明;对硬件和软件部分的设计和实现作了认真的分析;给出了系统的建模过程及相应的系统模型,在Proteus仿真实验系统上进行了仿真,并对仿真结果进行了分析。
关键词:
AT89C51;速度里程表。
(1)里程、速度采集的模拟;
(2)单片机处理、计算;
(3)LED显示。
1.设计背景ﻩ1
1.2设计内容1
3.系统概述2
4.基本原理ﻩ2
4.1霍尔传感器简介2
4.2AT89C51芯片简介ﻩ4
4.3 51单片机定时器/计数器的基本结构及工作原理5
4.4频率测量10
5.设计方案11
5.1 元器件介绍ﻩ11
5.1.1 LED显示模块11
5.1.2 74HC138简介ﻩ12
5.1.374HC573简介13
5.3仿真结果15
5.4 源程序ﻩ16
6.课程设计总结ﻩ19
7.参考文献ﻩ19
1.设计背景
1.1课题背景
在出租车是城市交通的重要组成部分,行业健康和发展也获得越来越多的关注。
汽车计价器是乘客与司机双方的交易准则,它是出租车行业发展的重要标志,是出租车中最重要的工具。
它关系着交易双方的利益。
具有良好性能的计价器无论是对广大出租车司机朋友还是乘客来说都是很必要的。
因此,汽车计价器的研究也是十分有一个应用价值的。
1.2设计内容
本设计主要是介绍了单片机控制下的出租车计价器设计,详细介绍了其硬件和软件设计,并对其各功能模块做了详细介绍,其主要功能和指标如下:
(1)里程、速度采集的模拟;
(2)单片机进行处理、计算;
(3)将里程数和速度进行LED显示。
2.系统概述
系统软件包括单片机和频率测量模块、速度里程计算模块、速度和里程显示数据LCD显示模块等。
图2.1系统原理框图
3.基本原理
3.1霍尔传感器简介
霍尔转速传感器:
霍尔转速传感器的外形图和与磁场的作用关系如2图所示。
磁场由磁钢提供,所以霍尔传感器和磁钢需要配对使用。
霍尔传感器检测转速示意图如图3。
在非磁材料的圆盘边上粘贴一块磁钢,霍尔传感器固定在圆盘外缘附近。
圆盘每转动一圈,霍尔传感器便输出一个脉冲。
通过单片机测量产生脉冲的频率就可以得出圆盘的转速。
霍尔电流传感器本身已经存在滤波电路,输出无须再加装滤波,可直接供单片机的0~5V的 AD采集或直接送到单片机的中断输入引脚,信号非常稳定,而且抗干扰能力很强。
霍尔电流传感器反应速度一般在7微妙,不用考虑单片机循环判断的时间.
若在圆盘上贴上多块磁钢,则圆盘每转一圈,输出的脉冲信号将相应增加,单位时间内测到的脉冲数将增多,测出的转速也将更加精细。
本设计建模时采用一个圆盘上贴一个磁钢进行模拟。
实际制作中可以贴上多块磁钢,即可以克服因车轮转速太慢而在设定时间内测不到脉冲的问题。
图3.1 霍尔转速传感器的外形图
图3.2霍尔传感器检测转速示意图
3.2AT89C51芯片简介
AT89C51是一个低电压,高性能CMOS8位单片机,片内含4k bytes的可反复擦写的Flash只读程序存储器和128 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,内置功能强大的微型计算机的AT89C51提供了高性价比的解决方案。
AT89C51是一个低功耗高性能单片机,40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,2个16位可编程定时计数器,2个全双工串行通信口,AT89C51可以按照常规方法进行编程,也可以在线编程。
其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。
AT89C51具有如下功能特性:
(1)兼容MCS—51指令系统;
(2)32个双向I/O口;
(3)两个16位可编程定时/计数器;
(4)1个串行中断;
(5)两个外部中断源;
(6)4k可反复擦写(>1000次)FlashROM;
(7)128x8bit内部RAM;
(8)6个中断源;
(9)低功耗空闲和掉电模式;
(10)软件设置睡眠和唤醒功能。
3.351单片机定时器/计数器的基本结构及工作原理
MCS-51单片机内部设有两个16位的可编程定时器/计数器。
可编程的意思是指其功能(如工作方式、定时时间、启动方式等)均可由指令来确定和改变。
在定时器/计数器中除了有两个16位的计数器之外,还有两个特殊功能寄存器(控制寄存器和方式寄存器)。
(1)定时器/计数器的结构如下。
从上面定时器/计数器的结构图中我们可以看出,16位的定时/计数器分别由两个8位专用寄存器组成,即:
T0由TH0和TL0构成;T1由TH1和TL1构成。
其访问地址依次为8AH-8DH。
每个寄存器均可单独访问。
这些寄存器是用于存放定时或计数初值的。
此外,其内部还有一个8位的定时器方式寄存器TMOD和一个8位的定时控制寄存器TCON。
这些寄存器之间是通过内部总线和控制逻辑电路连接起来的。
TMOD主要是用于选定定时器的工作方式;TCON主要是用于控制定时器的启动停止,此外TCON还可以保存T0、T1的溢出和中断标志。
当定时器工作在计数方式时,外部事件通过引脚T0(P3.4)和T1(P3.5)输入。
(2)定时计数器的原理
16位的定时器/计数器实质上就是一个加1计数器,其控制电路受软件控制、切换。
当定时器/计数器为定时工作方式时,计数器的加1信号由振荡器的12分频信号产生,即每过一个机器周期,计数器加1,直至计满溢出为止。
显然,定时器的定时时间与系统的振荡频率有关。
因一个机器周期等于12个振荡周期,所以计数频率fcount=1/12osc。
如果晶振为12MHz,则计数周期为:
T=1/(12×106)Hz×1/12=1μs。
这是最短的定时周期。
若要延长定时时间,则需要改变定时器的初值,并要适当选择定时器的长度(如8位、13位、16位等)。
当定时器/计数器为计数工作方式时,通过引脚T0和T1对外部信号计数,外部脉冲的下降沿将触发计数。
计数器在每个机器周期的S5P2期间采样引脚输入电平。
若一个机器周期采样值为1,下一个机器周期采样值为0,则计数器加1。
此后的机器周期S3P1期间,新的计数值装入计数器。
所以检测一个由1至0的跳变需要两个机器周期,故外部事件的最高计数频率为振荡频率的1/24。
例如,如果选用12MHz晶振,则最高计数频率为0.5MHz。
虽然对外部输入信号的占空比无特殊要求,但为了确保某给定电平在变化前至少被采样一次,外部计数脉冲的高电平与低电平保持时间均需在一个机器周期以上。
当CPU用软件给定时器设置了某种工作方式之后,定时器就会按设定的工作方式独立运行,不再占用CPU的操作时间,除非定时器计满溢出,才可能中断CPU当前操作。
CPU也可以重新设置定时器工作方式,以改变定时器的操作。
由此可见,定时器是单片机中效率高而且工作灵活的部件。
(3)控制寄存器
定时器/计数器T0和T1有2个控制寄存器TMOD和TCON,它们分别用来设置各个定时器/计数器的工作方式,选择定时或计数功能,控制启动运行,以及作为运行状态的标志等。
其中,TCON寄存器中另有4位用于中断系统。
定时器/计数器方式寄存器TMOD
定时器方式控制寄存器TMOD在特殊功能寄存器中,字节地址为89H,无位地址。
TMOD的格式如下图所示。
D7D6 D5 D4 D3 D2 D1D0
GATE
C\T
M1
M0
GATE
C\T
M1
M0
控制定时器T1
控制定时器T0
GATE:
门控位。
GATE=0时,定时器由软件控制位TR0或TR1来控制启停。
TRi位为1时,定时器启动开始工作;为0时定时器停止工作。
GATE=1时,定时器的启动停止由外部中断引脚和TRi位共同控制。
只有当外部中断引脚INT0或INT1为高时,TR0或TR1置1才能启动定时器工作。
C\T:
功能选择位。
当C\T=0时设置为定时器工作模式;当C\T=1时设置为计数器工作模式。
M1、M0:
工作方式选择位。
定时器\计数器有4种工作方式,由M0、M1来定义:
M0
M1
操作方式
功能说明
0
0
方式0
13位定时器\计数器,TLi只用低5位
0
1
方式1
16位定时器\计数器
1
0
方式2
自动重装初值的8位定时器\计数器,THi的值在保持不变,TLi溢出时,THi的值自动装入TLi中。
1
1
方式3
仅适用于T0,T0分成2个独立的8位计数器;T1停止计数。
定时器/计数器方式控制寄存器TMOD不能进行位寻址,只能用字节传送指令设置定时器工作方式,低半字节定义为定时器0,高半字节定义为定时器1。
复时,TMOD所有位均为0。
定时器/计数器控制寄存器TCON
TCON在特殊功能寄存器中,字节地址为88H,位地址(由低位到高位)为88H一8FH,由于有位地址,十分便于进行位操作。
TCON的作用是控制定时器的启、停,标志定时器溢出和中断情况。
TCON的格式如下图所示。
其中,TFl,TRl,TF0和TR0位用于定时器/计数器;IEl,ITl,IE0和IT0位用于中断系统。
8FH 8EH8DH8CH 8BH 8AH89H 88H(位地址)
TF1
TR1
TF0
TR0
IE1
IT1
IE0
IT0
各位定义如下:
TF1和TF0:
分别为定时器1和定时器0溢出标志。
当计数器计满产生溢出时,由硬件自动置“1”,并可申请中断。
进入中断服务程序后,由硬件自动清零。
TR1和TR0:
定时器1和定时器0启动控制位。
IE1和IE0:
外部中断引脚INT0或INT1中断请求标志位。
当外部中断源有请求时其对应的中断标志位置“1”。
其复位方式由触发方式来设置。
IT1和IT0:
为外部中断1和外部中断0的触发方式选择位。
ITi设置为“0”时为电平触发;设置为“1”时为边沿触发方式。
TCON中低4位与中断有关。
由于TCON是可以位寻址的,因而如果只是清溢出或启动定时器工作,可以用位操作命令。
例如:
执行“CLRTF0”后则清定时器0的溢出;执行“SETB TR1”后可启动定时器1开始工作。
(4)定时器/计数器的初始化
由于定时器/计数器的功能是由软件编程确定的,所以一般在使用定时/计数器前都要对其进行初始化,使其按设定的功能工作。
初始化的步骤如下:
1、确定工作方式(即对TMOD赋值);
2、预置定时或计数的初值(可直接将初值写入TH0、TL0或TH1、TL1);
3、根据需要开放定时器/计数器的中断(直接对IE位赋值);
4、启动定时器/计数器(若已规定用软件启动,则可把TR0或TR1置“1”;若已规定由外中断引脚电平启动,则需给外引脚步加启动电平。
当实现了启动要求后,定时器即按规定的工作方式和初值开始计数或定时)。
(5)定时器/计数器的四种工作方式
定时器T0或T1无论用作定时器或计数器都有4种工作方式:
方式0、方式1、方式2和方式3。
除方式3外,T0和T1有完全相同的工作状态。
通过对方式寄存器TMOD中M1、M2位的设置,可选择四种工作方式。
工作方式0
工作方式0是一个13位的定时/计数器,16位计数器只用了高8位THi和低5位(TLi的D4~D0位),TLi的高3位未用。
工作方式1
16位的定时/计数器,原理同工作方式0
工作方式2
自动重装计数器。
16位计数器拆成两个8位计数器,低8位作计数器用,高8位用于保存计数初值。
当低8位计数产生溢出时,将TFi位置1,同时又将保存在高8位中的计数初值重新装入低8位计数器中,又继续计数,循环重复不止。
工作方式3
方式3只适用定时器T0,T0在该模式下被拆成两个独立的8位计数器TH0和TL0。
其中TL0使用原来T0的一些控制位和引脚,它们是:
C/T,GATE,TR0,TF0和T0(P3.4)引脚INT0((P3.2)引脚。
此方式下的TL0除作8位计数器外,其功能和操作与方式0,方式1完全相同,可作计数也可作定时用。
该方式下的TH0,此时只可作简单的内部定时器功能。
它借用原定时器1的控制位和溢出标志位TR1和TF1,同时占用了T1的中断源。
TH0的启动和关闭幕式仅受TR1的控制,TR1=1,TH0启动定时;TR1=0,TH0停止定时工作。
该方式下的T1仍可设置为方式0、方式1、方式2,用于任何不需要中断的场合。
3.4频率测量
本设计所采用的霍尔传感器由一个磁钢和一个霍尔器件组成。
磁钢被贴在非磁性圆盘上,随圆盘一起旋转,霍尔器件固定在圆盘附近,圆盘每转一圈,霍尔器件将产生一个脉冲,一个脉冲即代表了一个圆盘的周长。
本设计中霍尔传感器产生的脉冲将被送到单片机的内部定时计数器timer1的T1口。
Timer1工作在模式1。
Timer1将对加到T1脚的脉冲进行计数。
Timer0工作在定时方式,测量出一个脉冲的长度。
若是将磁钢贴于汽车的轮轴上,则汽车轮子每转一圈,霍尔器件产生一个脉冲。
对脉冲频率进行处理,即可转化为车速。
对脉冲数进行累加再乘以轮子的长度,即可得到里程数据。
4.设计方案
4.1元器件介绍
元件
库
件数
51单片机
AT89C51
1
电阻
RES
17
电解电容
CRYSTAL
3
开关
SWITCH
1
LED数码管
7SEG-MPX4-CA
2
译码器
74HC138
1
脉冲触发器
DCLOCK
1
4.1.1LED显示模块
图4.1.1LED管脚配置图
LED显示块是由发光二极管显示字段的显示器件。
在单片机应用系统中通常使用的是七段LED。
这种显示块有共阴极和共阳极两种,如上图所示,共阴极LED显示块的发光二极管阴极共地,如图中所示,当某个发光二极管的阳极为高电平时,发光二极管点亮。
共阳极LED显示块的发光二极管阳极并接,当某个二极管的阴极为低电平时,该二极管点亮。
通常的七段LED显示块中有八个发光二极管,故也称为八段显示器。
其中七个二极管构成七笔字型“8”,一个发光二极管构成小数点。
控制不同组合的二极管导通,就能显示各种字符。
设8位控制器按低到高的次序依次控制LED显示块的a~f和小数点dp,我们称控制器输出的控制LED显示块显示字符的8位字节数据为段选码。
共阳极与共阴极的段选码互为反码。
在单片机应用系统中使用LED还可构成任意位的LED显示器。
4.1.274HC138简介
74HC138是一款高速CMOS器件,74HC138引脚兼容低功耗肖特基TTL(LSTTL)系列。
图4.2.274HC138引脚图
74HC138译码器可接受3位二进制加权地址输入(A0,A1和A2),并当使能时,提供8个互斥的低有效输出(Y0至Y7)。
74HC138特有3个使能输入端:
两个低有效(E1和E2)和一个高有效(E3)。
除非E1和E2至低且E3至高,否则74HC138将保持所有输出为高。
利用这种复合使能特性,仅需4片74HC138芯片和1个反相器,即可轻松实现并行扩展,组合成为一个1-32(5线到32线)译码器。
任选一个低有效使能输入端作为数据输入,而把其余的使能输入端作为选通端,则74HC138亦可充当一个8输出多路分配器,未使用的使能输入端必须保持绑定在各自合适的高有效或低有效状态。
74HC138与74HC238逻辑功能一致,只不过74HC138为反相输出。
4.1.374HC573简介
74HC573包含八进制3态非反转透明锁存器,[span]是一种高性能硅门CMOS[span]器件。
SL74HC573跟LS/AL573的管脚一样。
器件的输入是和标准CMOS输出兼容的,加上拉电阻他们能和LS/ALSTTL输出兼容。
图5.1.374HC573引脚图
输入是和标准CMOS输出兼容的;加上拉电阻,他们能和LS/ALSTTL输出兼容。
当锁存使能端LE为高时,这些器件的锁存对于数据是透明的(也就是说输出同步)。
当锁存使能变低时,符合建立时间和保持时间的数据会被锁存。
×\u36755X出能直接接到 CMOS,NMOS和 TTL接口上
×\u25805X作电压范围:
2.0V~6.0V
×\u20302X输入电流:
1.0uA
×CMOS器件的高噪声抵抗特性
•三态总线驱动输出
•置数全并行存取
•缓冲控制输入
•使能输入有改善抗扰度的滞后作用
原理说明:
M54HC563/74HC563/M54HC573/74HC573的八个锁存器都是透明的D 型锁存器,当使能(G)为高时,Q输出
将随数据(D)输入而变。
当使能为低时,输出将锁存在已建立的数据电平上。
输出控制不影响锁存器的内部工作,即老数据可以保持,甚至当输出被关闭时,
新的数据也可以置入。
这种电路可以驱动大电容或低阻抗负载,可以直接与系统总线接口并驱动总线,而不需要外接口。
特别适用于缓冲寄存器,I/O通道,双向总线驱动器和工作寄存器。
4.2实验仿真电路图
图4.2仿真电路图
(1)P3.5,P3.2管脚做脉冲输入
(2)P0管脚做段选输出
(3)P2.0-P2.3做位选输出
4.3 仿真结果
图4.3仿真结果图
图4.4仿真结果图
4.4源程序
#include#definePI3.14159
#defineDIA1.0
sbitp3_2=P3^2;
unsignedcharcodeled_num[10]={0xc0,0xf9,0xa4,0xb0,0x99,
0x92,0x82,0xf8,0x80,0x90};
unsignedcharcodeled_bit[6]={0xf8,0xf9,0xfa,0xfb,0xfc,0xfd};
voiddelay(unsignedintdat)
{
unsignedintk,j;
for(k=0;k<dat;k++)
{
for(j=0;j<2000;j++);
}
}
voidinit_timer0(void)
{
TH0=0x00;
TL0=0x00;
TR0=1;
}
voidinit_timer1(void)
{
ﻩ TH1=0x00;
TL1=0x00;
ﻩTR1=1;ﻩ
}
voidmain(void)
{
unsignedchar i,j;
unsignedcharcnt=0;
ﻩunsignedinttemp=0,a;
unsigned inttab=0,wap=0;
doubleway=0,sudu=0;
unsignedcharled[6];
TMOD=0x51;
init_timer0();
while
(1)
{
TH0=0x00;
ﻩTL0=0x00;
while(p3_2==1);
TR0=1;
while(p3_2==0);
ﻩwhile(p3_2==1);
ﻩTR0=0;
a=TH0;
a=a<<8;
a=a||TL1;
a=a*0.001;
sudu=2*PI/a;
*10;
}
init_timer1();
while
(1)
{
if((TH1==0x25)&&(TL1>=0xed))
ﻩﻩ{
ﻩﻩ TH1=0x00;
ﻩﻩﻩTL1=0x00;
ﻩﻩﻩsudu=0;
ﻩﻩ}
temp=TH1;
temp=temp<<8;
temp=temp|TL1;
way=temp*PI*DIA/1000.0;
tab=way*10;
led[0]=;
led[1]=;
led[2]=;
led[3]=tab%10;
led[4]=tab%100/10;
led[5]=tab/100;
for(j=0;j<10;j++)
{
for(i=0; i<6;i++)
{
P2=led_bit[i];
ﻩﻩif((i==1)||(i==4))
ﻩ{
ﻩ P0=led_num[led[i]]&0x7f;
}
else
ﻩ{
P0=led_num[led[i]];
ﻩﻩﻩ}
delay
(1);
}
}
}
}
5.课程设计总结
经过近一个月的课程设计,在老师的多次细心指导下,磕磕绊绊最后也没能成功完成任务,倍受打击,深刻反省后努力做出了一些改进。
通过此次课程设计,使我更加扎实的掌握了单片机相关方面的知识。
同时也对Proteus和Keil及Office等软件的功能更加熟悉,但这些似乎都不是最主要的。
在完成课设的过程中,我想不仅仅是我,几乎每个同学都或多或少遇到了这样那样的问题和困难,为了解决这些困难我想了很多办法,问题得到解决的同时,我也意识到:
我们的生活中也经常出现让我们感到困惑的事,所以我们现在就要培养独立解决问题的能力。
对不同问题要找到多种解决方法,做到举一反三,触类旁通。
这次课设使我受益很多,不仅对单片机有了进一步的了解,也认识到了自身的不足,以后要更加虚心学习,多与他人沟通。
6.参考文献
[1]孙育才.《单片微型计算机及其应用》.南京:
东南大学出版社.2004
[2]潘新民王燕芳.《微型计算机控制技术》.北京:
电子工业出版社.2003
[3]李群芳.《单片机原理及