51单片机速度里程表 - 图文

更新时间:2023-11-02 18:10:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

防 灾 科 技 学 院

毕 业 设 计

题 目 学生姓名 系 别 班 级 开题时间 指导教师

基于单片机的智能速度里程表的设计

吴建胜 防灾仪器系 1050313 2013年11月29 日

杨敬松

学 号

专 业

答辩时间 职 称

105031305 电气工程及其自动化

2014年6月8日

副教授

基于单片机的智能速度里程表的设计

防灾科技学院毕业设计

作 者 吴建胜 指导教师 杨敬松

摘要 行车里程表广泛应用于各类机车,虽然以前的机械里程表稳定可靠,然而功能单一,

且易受磨损。随着微电子技术的快速发展,数字行车里程表得到了广泛应用,现在不少轿车的仪表已经逐渐使用数字车速里程表。本文介绍一种基于单片机的智能里程表,该里程表是一种数字式仪表,不但可以显示机车的车速和行驶的总里程,而且可以显示阶段里程,还能显示温度和时间,同时具有超速报警功能。本设计采用A3144e霍尔传感器,通过单片机处理数据计算出机车的车速和里程,再由LCD显示器显示出来。

关键词:里程表;单片机;霍尔传感器;测速

Abstract: Odometer is widely applied in all kinds of motorcycle. The mechanical odometer is simple and reliable, but function of a single and vulnerable to wear. As the evolution of electronic technology, electronic speedometer widely used in the private car. This paper introduces a micro-controller based smart speedometer. The table is a digital meter, the total mileage of the vehicle speed and driving can not only real-time display can also display the speed alarm function. Using the Hall sensor A3144E, by micro-controller record and deal with this level the amount of change we can know the speed and mileage, these data will display by LCD.

Keywords: speedometer; SCM; Hall sensor; tachometer

1

目 录

引言 ....................................................................................................................... 1 1系统概述 ............................................................................................................ 1

1.1 系统原理介绍 ............................................................................................................ 1 1.2系统和按键的功能 ..................................................................................................... 3 1.3相关参数和应用范围 ................................................................................................. 3

2硬件设计 ............................................................................................................ 4

2.1单片机及时钟复位电路 ............................................................................................. 4 2.2测速传感器 ................................................................................................................. 6 2.3温度传感器DS18B20 ................................................................................................8 2.4存储器AT24C02 .........................................................................................................9 2.5键盘单元....................................................................................................................10 2.6显示单元....................................................................................................................11 2.7报警电路....................................................................................................................12 2.8时钟芯片DS1302......................................................................................................12

3软件设计 .......................................................................................................... 13

3.1键盘扫描程序 ........................................................................................................... 14 3.2数据处理程序 ........................................................................................................... 15 3.3报警程序 ................................................................................................................... 16 3.4显示程序 ................................................................................................................... 16 3.5存储模块程序 ........................................................................................................... 17 3.6温度模块程序 ........................................................................................................... 18 3.7时钟程序 ................................................................................................................... 18

4仿真过程介绍 .................................................................................................. 19

4.1软件编写和电路设计 ............................................................................................... 19 4.2系统调试 ................................................................................................................... 20

结束语 ................................................................................................................. 22 致谢 ..................................................................................................................... 23 参考文献 ............................................................................................................. 24 附录 ..................................................................................................................... 25

防灾科技学院毕业设计

引言

随着现代交通工具的普及,人们使用不同手段外出的机会逐渐增多,像单车,摩托,轿车,公共交通等。然而这些各不相同的交通工具由于应用场合和自身结构设计的不同产生了各种各样的车速里程表,即使同一种类的交通工具也因测速方法和生产厂家的不同产生了不同型号的车速里程表。种类繁多的行车里程表,不仅减小了里程表的适用范围,降低了器件的通用性,更给这些交通工具的维护更换带来不小困难,而且由于量产规模的减小增加了单个里程表的价格。同时市场上销售的很多里程表功能单一,无法满足不同用户对单里程、总里程、超速报警等各种功能的需求。

在这种背景下,这次毕设希望通过设计出一种精度高、可靠性高、价格合适、功能丰富且应用范围广的里程表,以此改善这种局面。

在本毕设中,利用安装在汽车转轴上的磁铁,在汽车行驶中,磁铁随着车轮做圆周运动,从而使霍尔元件产生脉冲,这些脉冲可由单片机外中断INT0记录,再通过相关公式计算得到车速及里程信息,用一个LCD1602显示,从而得到车速和里程等信息。在里程信息的存储功能上,采用了广泛使用的串行EEPROM芯片AT24C02,每隔0.1KM将芯片内的里程信息更新一次,掉电情况下也不会丢失数据。

本作品可以安装于不同类型不同型号的交通工具上,通过按键调整周长值,就可以准确测量。通过按下相应按键,就可以实现显示单里程、总里程、温度时间、报警时速、车轮周长等功能。

通过测试,本作品完全实现了设计要求,LCD1602显示出来的各值同理论值相比误差在1%以内。由于结构简单,并采用低价芯片,因此成本较低。如果合理开发使用该里程表,是有一定价值的。

1. 系统概述

1.1系统原理介绍

系统主要有七部分组成:霍尔A3144E传感器、STC89C52RC单片机、独立键盘、LCD1602显示器、EEPROM芯片AT24C02、DS18B20温度传感器、DS1302时钟芯片。系统图如图1.1

1

防灾科技学院毕业设计

独立按键 霍尔传感器 温度传感器 时钟芯片 图1.1 系统结构图

单 片 机 AT89C52RC 报警 LCD显示器 EEPROM 本毕设测量时速及里程的原理如(图1.2)。 霍尔A3144E 车轮 图1.2 测速原理图

P3.2 小磁铁 AT89C52RC 如图1.2所示,装在轮上的圆形磁铁在随车轮而做圆周运动,霍尔传感器便处于一个强弱变化的磁场中,当磁铁远离霍尔元件时,A3144第三脚输出5V电平,当磁铁南极靠近A3144时,输出0V电平,由此产生脉冲。

由上述分析可知,在车轮转动一圈中,霍尔电路只能导通一次,即输出一个脉冲。如果知道车轮的周长,利用单片机记录若干时间内脉冲变化的次数,然后就可以算出汽车的车速和所行使的里程了,计算如下:

设汽车单位时间车轮转动圈数为num 汽车单位时间行驶路程为mile(m) 汽车车速为speed(km/h) 汽车车轮周长为cricle(m)

mile=num*cricle; (式1.1) speed=num*cricle*3600/1000; (式1.2)

2

防灾科技学院毕业设计

用外中断INT0做为计数器,定时器T0定时一秒钟,当一秒钟到了以后,在相应程序中计算出车速送到LCD显示并将行驶0.1km的里程送到存储器中存储。

1.2系统和按键的功能 本设计可以实现如下功能:

1 实时显示车速。每两秒钟更新一次车速。

2显示自安装使用以来车辆行驶的总里程。为车辆的定期保养维护和零部件更换提供依据。

3显示自系统上电到任意时刻的单个路程的里程。用户可以了解单次行驶的里程。 4可以显示驾驶环境的温度。

5不同车速的报警。可以通过相关按钮调整报警速度值,范围是:0~250km/h。 6过相关按键改变车轮周长。调节范围是:0~250厘米 7显示时间,并且可以用按键调整时间值。

这些不同的显示值和各值的调整是通过七独立按键来实现的,现将其叙述如下: Key1: 复位按钮。

Key2:短按Key1键,单次里程清零;长按Key1键(约8秒),总里程清零。 Key3:按一次Key2键,显示速度和单次里程;按两下Key2键,显示时间和温度; 按三次Key2键,显示车轮周长和报警速度值;按四下Key2键,返回初始 状态,显示速度和总里程,再按以此循环。

Key4:显示时间和温度时,按一下Key3键,时间秒值可以调整,按两次Key3 键,时间分值可以调整,以此类推。当显示车轮周长和报警速度值,按一下 Key3键,可以调整车轮周长,按两下Key3键,可以调整报警速度值,再按 以此循环。

Key5:当时间、车轮周长和报警速度值可以调整时,按一次Key4键,相应值加一。 Key6: 当时间、车轮周长和报警速度值可以调整时,按一次Key5键,相应值减一。 Key7: 按一次背光亮,按两次循环显示,按三次背光灭,按四次停止循环显示,再

按以此循环。 1.3相关参数和应用范围 各参数和测量范围如下: 总里程:0~999999km;

3

防灾科技学院毕业设计

单里程:0~999km; 温度:-55~125摄氏度 车速:3.50~999.99km/h

本产品对于不同对象需使用不同的安装方法,实际应用时,还需要进一步的开发。考虑到本产品造价低,测速环境要求稍高,在健身设备、自行车、摩托车等震动小且系统结构简单的设备上安装较有前景。

2 硬件设计

2.1单片机及时钟复位电路 2.1.1STC89C52RC单片机介绍

在这次设计使用的单片机芯片是STC公司的STC89C52RC 40I-PDIP40 1022C1G222.90C型单片机,其中字符表示的意义如下:

STC—前缀,表示STC公司的产品; 8—表示芯片是8051内核芯片; 9—表示内部含Flash EEPROM存储器; C—表示器件是COMS产品; 5—固定不变值;

2—表示能存储8KB的程序。 RC—STC单片机内部RAM为512B; 40—表示支持最高为40MHz的晶振; I—表示工业级产品,温度范围:-40~+85℃; PDIP—产品封装类型,双列直插,间距2.54mm; 1412—表示芯片生产日期是14年第12周; C1G22.9C—此标号为芯片制造或处理工艺。 其芯片引脚和实际图像如图2.1:

4

防灾科技学院毕业设计 图2.1芯片引脚图

STC89C52RC引脚(见图2.2)主要分为三类: 1.电源和晶振引脚,如VCC、GND、XTAL1、XTAL2 2. 功能控制引脚,如RST、PSEN、ALE/PROG、EA/Vpp 3. I/O口,如P0、P1、P2、P3,四组八位I/O口 XTAL1(19脚)、XTAL2(18脚)外接晶振引脚。 RST(9脚)复位引脚。

PSEN(29脚)默认即可,不需要接器件或电源。 EA/Vpp(31脚)一般接2K上拉电阻即可。 P0,P1,P2,P3为I/O口,功能各有其别。

STC89C52RC功能强大,价格低廉,可靠耐用,拥有很强的保密功能。这为其应用于各行业设记带来方便。

图2.2 单片机引脚编号

2.1.2时钟复位电路

复位电路由两个电阻一个电容和一个点动按钮构成,当按下该按钮时,STC89C52RC第九脚RST变为高电平,只要高电平持续两个时钟周期以上,即可使单片机复位。构建复位电路时要合理选择电容电阻的大小。时钟电路由一个12MHz的晶振和两个33PF的电容组成,晶振要尽可能靠近18、19引脚,并且连接线要尽可能短,详细接法(见图2.3及2.4)。

5

防灾科技学院毕业设计

图2.3复位电路

图2.4晶振电路

2.2测速传感器 2.2.1传感器的选择

1. 红外对管。红外对管需要分别安装在车轮两侧,当车轮转动时,辐条会阻挡红外对管的光路,接收管输出低电平,单片机根据此信号可计算里程、速度等。红外对管的优点是测量精度高,缺点是安装比较复杂和容易受外来光线、灰尘等的影响。

2. 开关型霍尔传感器。霍尔3144是利用霍尔效应把强弱交替的磁信号转换为电平脉冲信号的器件。把霍尔3144安装在靠近车轮的固定支架上,磁铁安装在随车轮转动的地方,当磁铁靠近3144时,霍尔第三脚输出0V电平,单片机通过相关公式算出里程、速度等各值。霍尔3144的优点是稳定可靠和安装简易,缺点不详。

3. 干簧管。干簧管相比霍尔元件来说是比较原始的,它利用磁铁的吸力使其闭合或断开。因此存在机械接触,检测频率不能过高,且容易损坏。干簧管的优点是安装简易,缺点是比较脆弱和不够稳定。

6

防灾科技学院毕业设计

综合比较三种器件的性能和价格,本次设计选择价格适中、测量稳定且安装简易的霍尔传感器。

2.2.2霍尔3144原理

霍尔3144属于开关型传感器,1脚接5V电平即电源VCC端,2脚接0V电平即电源GND端,3脚接STC89C52RC单片机的P3^2口,此外第三脚还需接一个5K左右的上拉电阻。辨别霍尔管脚的方法是:把霍尔元件印有文字的一面面对自己,从左到右为1、2、3脚。霍尔3144工作电压为(4.5—18V),范围很宽,方便不同场合应用。输出的是TTL电平,不需要放大可以直接驱动单片机,而且可以检测高达1MHz频率。

霍尔3144传感器的内部结构和工作原理如(图2.5),由模块A电源稳压器,模块B电势触发装置,模块C差分放大器,模块D施密特触发器,模块E输出装置。

当磁铁南极靠近霍尔3144时,施加的磁场强度达到工作点,模块D施密特触发器输出高电平,三极管导通,模块E输出低电平,此时为开状态。反之霍尔3144为高电平5V。施密特触发器整形之后就变成方波脉冲输出。

图2.5霍尔3144E原理图

在本设计protues仿真中,用时钟激励源代替霍尔传感器,演示在不同车速情况下,里程表的车速测量、里程显示及报警情况。将激励源接到P3^2口,定时器T0记录一秒钟脉冲次数,从而计算车速及里程信息。(见图2.6)

7

防灾科技学院毕业设计

delayus(40); }

/* * 18B20写1个字节函数 向1-WIRE总线上写一个字节 */ void write18b20_byte(uchar dat) {

uchar i = 0 ; for (i=8;i>0;i--) {

DQ = 0 ;

DQ = dat&0x01 ; delayus(6) ; DQ = 1 ; dat>>=1 ; } }

/* * 18B20读1个字节函数 从1-WIRE总线上读取一个字节*/ uchar read18b20_byte() {

uchar i = 0 ; uchar dat = 0 ; for (i=8;i>0;i--) {

DQ = 0 ; // 给脉冲信号 dat >>= 1 ;

DQ = 1 ; // 给脉冲信号 if(DQ)

dat |= 0x80 ; delayus(6) ; }

return (dat) ; }

/** 读出温度*/ read_temp() {

uchar a,b;

DS1802_reset();

write18b20_byte(0xcc); // 发Skip ROM命令 write18b20_byte(0x44); // 发转换命令 DS1802_reset(); // 复位

write18b20_byte(0xcc); // 发Skip ROM命令 write18b20_byte(0xbe); // 发读命令 a=read18b20_byte(); //温度低8位 b=read18b20_byte(); //温度高8位 tvalue=b; tvalue<<=8;

tvalue=tvalue|a; //temp>>=4; //右移四位,相当于除以16(1/16=0.0625) if(tvalue<0xfff) tflag=0; else {tvalue=~tvalue+1; tflag=1; }

tvalue=tvalue*(0.625); return (tvalue); }

/***************DS1302有关子函数********************/ void write_byte(uchar dat)//写一个字节

43

防灾科技学院毕业设计

{ uchar i; for (i=0;i<8;i++)//循环8次 写入数据 { SCLK=0; IO=(bit)(dat&0x01); _nop_(); //每次传输低字节 dat>>=1; //右移一位 SCLK=1; } }

void write_1302(uchar add,uchar dat)//向1302芯片写函数,指定写入地址,数据 { RST=0; _nop_();_nop_(); _nop_();_nop_(); SCLK=0; _nop_();_nop_(); _nop_();_nop_(); RST=1;

_nop_();_nop_(); //启动 _nop_();_nop_(); write_byte(add); write_byte(dat); SCLK=1; RST=0; }

uchar read_byte()//读一个字节 { uchar dat,i; for(i=0;i<8;i++) { if(IO==1) {

dat = dat|0x80; }

SCLK = 1; dat >>= 1; SCLK = 0; }

IO = 0;//将读1个字节函数最后加上I/O=0即可消除85显示 _nop_();_nop_(); _nop_();_nop_(); return dat; }

uchar read_1302(uchar add)//从1302读数据函数,指定读取数据来源地址 { uchar temp; RST=0; SCLK=0; RST=1; write_byte(add); temp=read_byte(); SCLK=1; RST=0; return temp;}

uchar BCD_Decimal(uchar bcd)//BCD码转十进制函数,输入BCD,返回十进制 { uchar Decimal; Decimal=bcd>>4;

return(Decimal=Decimal*10+(bcd&=0x0F));}

44

防灾科技学院毕业设计

void ds1302_init() //1302芯片初始化子函数(2014-06-01,12:00:00,week7) {

RST=0; SCLK=0;

write_1302(0x8e,0x00); //允许写,禁止写保护

write_1302(0x80,0x00); //向DS1302内写秒寄存器80H写入初始秒数据00 write_1302(0x82,0x00);//向DS1302内写分寄存器82H写入初始分数据00 write_1302(0x84,0x12);//向DS1302内写小时寄存器84H写入初始小时数据12 write_1302(0x8a,0x07);//向DS1302内写周寄存器8aH写入初始周数据星期日 write_1302(0x86,0x01);//向DS1302内写日期寄存器86H写入初始日期数据01 write_1302(0x88,0x06);//向DS1302内写月份寄存器88H写入初始月份数据06 write_1302(0x8c,0x14);//向DS1302内写年份寄存器8cH写入初始年份数据14 write_1302(0x8e,0x80); //打开写保护} void shijian() {

miao = BCD_Decimal(read_1302(0x81)); fen = BCD_Decimal(read_1302(0x83)); shi = BCD_Decimal(read_1302(0x85)); ri = BCD_Decimal(read_1302(0x87)); yue = BCD_Decimal(read_1302(0x89)); nian =BCD_Decimal(read_1302(0x8d)); week =BCD_Decimal(read_1302(0x8b));} void STR_0() //显示速度 { str0[0]='S'; str0[1]='p'; str0[2]='e'; str0[3]='e'; str0[4]='d'; str0[5]='='; str0[6]=speed/10000+0x30; str0[7]=(speed000)/1000+0x30; str0[8]=(speed00)/100+0x30; str0[9]='.'; str0[10]=(speed0)/10+0x30; str0[11]=speed+0x30; str0[12]='k'; str0[13]='m'; str0[14]='/'; str0[15]='h';}

void STR_1() //显示总里程 { str1[0]='M'; str1[1]='i'; str1[2]='l'; str1[3]='e'; str1[4]=' '; str1[5]='='; str1[6]=Dis/1000000+0x30;

str1[7]=(Dis00000)/100000+0x30; str1[8]=(Dis0000)/10000+0x30; str1[9]=(Dis000)/1000+0x30; str1[10]=(Dis00)/100+0x30; str1[11]=(Dis0)/10+0x30; str1[12]='.';

str1[13]=Dis+0x30; str1[14]='k'; str1[15]='m';}

45

防灾科技学院毕业设计

void STR_2()//显示速度值超出最大量程999.99km/h { str2[0]='!'; str2[1]='!'; str2[2]='N'; str2[3]='o'; str2[4]=' '; str2[5]='T'; str2[6]='o'; str2[7]=' '; str2[8]='S'; str2[9]='c'; str2[10]='a'; str2[11]='l'; str2[12]='e'; str2[13]='!'; str2[14]='!'; str2[15]='!';}

void STR_3()//显示当前里程 { str3[0]='C'; str3[1]='u'; str3[2]='r'; str3[3]=' '; str3[4]='M'; str3[5]='i'; str3[6]='l'; str3[7]='e'; str3[8]='='; str3[9]=Cur_dis/10000000+0x30; str3[10]=(Cur_dis000000)/1000000+0x30; str3[11]=(Cur_dis00000)/100000+0x30; str3[12]='.'; str3[13]=(Cur_dis0000)/10000+0x30; str3[14]='k'; str3[15]='m';}

void STR_4()//显示时间温度 { uint wendu;

wendu=tvalue-18; //修正温度误差,约2℃ //显示秒、时、分数据: str4[0]=shi/10+0x30; str4[1]=shi+0x30; str4[2]=':'; str4[3]=fen/10+0x30; str4[4]=fen+0x30; str4[5]=':'; str4[6]=miao/10+0x30; str4[7]=miao+0x30; str4[8]=' ';

if(tflag==0) //显示温度

{ if(wendu/1000==0) //百位数 {str4[9]=' '; } else {str4[9]=wendu/1000+0x30;} if(wendu00/100==0&&wendu/1000==0)//十位 {str4[10]=' ';} else {str4[10]=wendu00/100+0x30;} str4[11]=wendu0/10+0x30;//个位 str4[12]='.';

46

防灾科技学院毕业设计

str4[13]=wendu+0x30; str4[14]=0Xdf; str4[15]='C'; } else

{ str4[9]='-'; if(wendu00/100==0)//十位 {str4[10]=' ';} else {str4[10]=wendu00/100+0x30;} str4[11]=wendu0/10+0x30; //个位 str4[12]='.'; str4[13]=wendu+0x30; str4[14]=0Xdf; str4[15]='C';}}

void STR_5() //取得并显示日历和星期{ //显示日、月、年数据: str5[0]='2'; str5[1]='0'; str5[2]=nian/10+0x30; str5[3]=nian+0x30; str5[4]='-'; str5[5]=yue/10+0x30; str5[6]=yue+0x30; str5[7]='-'; str5[8]=ri/10+0x30; str5[9]=ri+0x30; str5[10]=' '; str5[11]=' '; switch(week) { case 1: {str5[12]='M'; str5[13]='O'; str5[14]='N';} break; case 2: {str5[12]='T'; str5[13]='U'; str5[14]='E';} break; case 3: {str5[12]='W'; str5[13]='E'; str5[14]='D';} break; case 4: {str5[12]='T'; str5[13]='H'; str5[14]='U';} break; case 5: {str5[12]='F'; str5[13]='R'; str5[14]='I';} break; case 6:

47

本文来源:https://www.bwwdw.com/article/ae52.html

Top