51单片机速度里程表_第1页
51单片机速度里程表_第2页
51单片机速度里程表_第3页
51单片机速度里程表_第4页
51单片机速度里程表_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、防灾科技学院毕业设计防 灾 科 技 学 院毕 业 设 计题目基于单片机的智能速度里程表的设计学生姓名吴建胜学号 系 别防灾仪器系 专 业电气工程及其自动化 班级 开题时间2013年11月29 日答辩时间2014年6月8日指导教师杨敬松职 称副教授基于单片机的智能速度里程表的设计作 者 吴建胜指导教师 杨敬松 摘要 行车里程表广泛应用于各类机车,虽然以前的机械里程表稳定可靠,然而功能单一,且易受磨损。随着微电子技术的快速发展,数字行车里程表得到了广泛应用,现在不少轿车的仪表已经逐渐使用数字车速里程表。本文介绍一种基于单片机的智能里程表,该里程表是一种数字式仪表,不但可以显示机车的车速和行驶的总里

2、程,而且可以显示阶段里程,还能显示温度和时间,同时具有超速报警功能。本设计采用A3144e霍尔传感器,通过单片机处理数据计算出机车的车速和里程,再由LCD显示器显示出来。关键词:里程表;单片机;霍尔传感器;测速 Abstract: Odometer is widely applied in all kinds of motorcycle. The mechanical odometer is simple and reliable, butfunctionofasingle and vulnerabletowear. As theevolutionofelectronictechnology,

3、 electronicspeedometer widely used in the private car. This paper introduces a micro-controller basedsmartspeedometer. Thetableisadigitalmeter, thetotalmileageofthe vehiclespeedanddriving can not only real-time display can also display the speed alarm function. Using the Hall sensor A3144E, by micro

4、-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; tachometer49目 录引言11系统概述11.1 系统原理介绍11.2系统和按键的功能31.3相关参数和应用范围32硬件设计42.1单片机及时钟复位电路42.2测速传感器6 2.3温度传感器DS18B20.82.4存储器AT24C02.92.5键盘

5、单元.102.6显示单元.112.7报警电路.122.8时钟芯片DS1302.123软件设计133.1键盘扫描程序143.2数据处理程序153.3报警程序163.4显示程序163.5存储模块程序173.6温度模块程序183.7时钟程序184仿真过程介绍194.1软件编写和电路设计194.2系统调试20结束语22致谢23参考文献24附录25引言随着现代交通工具的普及,人们使用不同手段外出的机会逐渐增多,像单车,摩托,轿车,公共交通等。然而这些各不相同的交通工具由于应用场合和自身结构设计的不同产生了各种各样的车速里程表,即使同一种类的交通工具也因测速方法和生产厂家的不同产生了不同型号的车速里程表。

6、种类繁多的行车里程表,不仅减小了里程表的适用范围,降低了器件的通用性,更给这些交通工具的维护更换带来不小困难,而且由于量产规模的减小增加了单个里程表的价格。同时市场上销售的很多里程表功能单一,无法满足不同用户对单里程、总里程、超速报警等各种功能的需求。在这种背景下,这次毕设希望通过设计出一种精度高、可靠性高、价格合适、功能丰富且应用范围广的里程表,以此改善这种局面。在本毕设中,利用安装在汽车转轴上的磁铁,在汽车行驶中,磁铁随着车轮做圆周运动,从而使霍尔元件产生脉冲,这些脉冲可由单片机外中断INT0记录,再通过相关公式计算得到车速及里程信息,用一个LCD1602显示,从而得到车速和里程等信息。在

7、里程信息的存储功能上,采用了广泛使用的串行EEPROM芯片AT24C02,每隔0.1KM将芯片内的里程信息更新一次,掉电情况下也不会丢失数据。本作品可以安装于不同类型不同型号的交通工具上,通过按键调整周长值,就可以准确测量。通过按下相应按键,就可以实现显示单里程、总里程、温度时间、报警时速、车轮周长等功能。通过测试,本作品完全实现了设计要求,LCD1602显示出来的各值同理论值相比误差在1%以内。由于结构简单,并采用低价芯片,因此成本较低。如果合理开发使用该里程表,是有一定价值的。1. 系统概述1.1系统原理介绍 系统主要有七部分组成:霍尔A3144E传感器、STC89C52RC单片机、独立键

8、盘、LCD1602显示器、EEPROM芯片AT24C02、DS18B20温度传感器、DS1302时钟芯片。系统图如图1.1独立按键单片机AT89C52RCLCD显示器霍尔传感器温度传感器EEPROM报警时钟芯片图1.1 系统结构图霍尔A3144E本毕设测量时速及里程的原理如(图1.2)。P3.2AT89C52RC小磁铁车轮图1.2 测速原理图如图1.2所示,装在轮上的圆形磁铁在随车轮而做圆周运动,霍尔传感器便处于一个强弱变化的磁场中,当磁铁远离霍尔元件时,A3144第三脚输出5V电平,当磁铁南极靠近A3144时,输出0V电平,由此产生脉冲。 由上述分析可知,在车轮转动一圈中,霍尔电路只能导通一

9、次,即输出一个脉冲。如果知道车轮的周长,利用单片机记录若干时间内脉冲变化的次数,然后就可以算出汽车的车速和所行使的里程了,计算如下:设汽车单位时间车轮转动圈数为num汽车单位时间行驶路程为mile(m)汽车车速为speed(km/h)汽车车轮周长为cricle(m)mile=num*cricle; (式1.1) speed=num*cricle*3600/1000; (式1.2)用外中断INT0做为计数器,定时器T0定时一秒钟,当一秒钟到了以后,在相应程序中计算出车速送到LCD显示并将行驶0.1km的里程送到存储器中存储。1.2系统和按键的功能本设计可以实现如下功能:1 实时显示车速。每两秒钟

10、更新一次车速。2显示自安装使用以来车辆行驶的总里程。为车辆的定期保养维护和零部件更换提供依据。3显示自系统上电到任意时刻的单个路程的里程。用户可以了解单次行驶的里程。4可以显示驾驶环境的温度。5不同车速的报警。可以通过相关按钮调整报警速度值,范围是:0250km/h。6过相关按键改变车轮周长。调节范围是:0250厘米7显示时间,并且可以用按键调整时间值。这些不同的显示值和各值的调整是通过七独立按键来实现的,现将其叙述如下:Key1: 复位按钮。Key2:短按Key1键,单次里程清零;长按Key1键(约8秒),总里程清零。 Key3:按一次Key2键,显示速度和单次里程;按两下Key2键,显示时

11、间和温度; 按三次Key2键,显示车轮周长和报警速度值;按四下Key2键,返回初始 状态,显示速度和总里程,再按以此循环。Key4:显示时间和温度时,按一下Key3键,时间秒值可以调整,按两次Key3 键,时间分值可以调整,以此类推。当显示车轮周长和报警速度值,按一下 Key3键,可以调整车轮周长,按两下Key3键,可以调整报警速度值,再按 以此循环。Key5:当时间、车轮周长和报警速度值可以调整时,按一次Key4键,相应值加一。 Key6: 当时间、车轮周长和报警速度值可以调整时,按一次Key5键,相应值减一。 Key7: 按一次背光亮,按两次循环显示,按三次背光灭,按四次停止循环显示,再按

12、以此循环。1.3相关参数和应用范围各参数和测量范围如下: 总里程:0km; 单里程:0999km; 温度:-55125摄氏度 车速:3.50999.99km/h本产品对于不同对象需使用不同的安装方法,实际应用时,还需要进一步的开发。考虑到本产品造价低,测速环境要求稍高,在健身设备、自行车、摩托车等震动小且系统结构简单的设备上安装较有前景。2 硬件设计2.1单片机及时钟复位电路2.1.1STC89C52RC单片机介绍在这次设计使用的单片机芯片是STC公司的STC89C52RC 40I-PDIP40 1022C1G222.90C型单片机,其中字符表示的意义如下:STC前缀,表示STC公司的产品;8

13、表示芯片是8051内核芯片;9表示内部含Flash EEPROM存储器;C表示器件是COMS产品;5固定不变值;2表示能存储8KB的程序。RCSTC单片机内部RAM为512B;40表示支持最高为40MHz的晶振;I表示工业级产品,温度范围:-40+85;PDIP产品封装类型,双列直插,间距2.54mm;1412表示芯片生产日期是14年第12周;C1G22.9C此标号为芯片制造或处理工艺。其芯片引脚和实际图像如图2.1: 图2.1芯片引脚图STC89C52RC引脚(见图2.2)主要分为三类: 1.电源和晶振引脚,如VCC、GND、XTAL1、XTAL22. 功能控制引脚,如RST、PSEN、AL

14、E/PROG、EA/Vpp3. 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变为高电平,只要高电平持续两个时钟周期以上,即可使

15、单片机复位。构建复位电路时要合理选择电容电阻的大小。时钟电路由一个12MHz的晶振和两个33PF的电容组成,晶振要尽可能靠近18、19引脚,并且连接线要尽可能短,详细接法(见图2.3及2.4)。 图2.3复位电路 图2.4晶振电路2.2测速传感器2.2.1传感器的选择1. 红外对管。红外对管需要分别安装在车轮两侧,当车轮转动时,辐条会阻挡红外对管的光路,接收管输出低电平,单片机根据此信号可计算里程、速度等。红外对管的优点是测量精度高,缺点是安装比较复杂和容易受外来光线、灰尘等的影响。2. 开关型霍尔传感器。霍尔3144是利用霍尔效应把强弱交替的磁信号转换为电平脉冲信号的器件。把霍尔3144安装

16、在靠近车轮的固定支架上,磁铁安装在随车轮转动的地方,当磁铁靠近3144时,霍尔第三脚输出0V电平,单片机通过相关公式算出里程、速度等各值。霍尔3144的优点是稳定可靠和安装简易,缺点不详。3. 干簧管。干簧管相比霍尔元件来说是比较原始的,它利用磁铁的吸力使其闭合或断开。因此存在机械接触,检测频率不能过高,且容易损坏。干簧管的优点是安装简易,缺点是比较脆弱和不够稳定。综合比较三种器件的性能和价格,本次设计选择价格适中、测量稳定且安装简易的霍尔传感器。2.2.2霍尔3144原理霍尔3144属于开关型传感器,1脚接5V电平即电源VCC端,2脚接0V电平即电源GND端,3脚接STC89C52RC单片机

17、的P32口,此外第三脚还需接一个5K左右的上拉电阻。辨别霍尔管脚的方法是:把霍尔元件印有文字的一面面对自己,从左到右为1、2、3脚。霍尔3144工作电压为(4.518V),范围很宽,方便不同场合应用。输出的是TTL电平,不需要放大可以直接驱动单片机,而且可以检测高达1MHz频率。霍尔3144传感器的内部结构和工作原理如(图2.5),由模块A电源稳压器,模块B电势触发装置,模块C差分放大器,模块D施密特触发器,模块E输出装置。当磁铁南极靠近霍尔3144时,施加的磁场强度达到工作点,模块D施密特触发器输出高电平,三极管导通,模块E输出低电平,此时为开状态。反之霍尔3144为高电平5V。施密特触发器

18、整形之后就变成方波脉冲输出。 图2.5霍尔3144E原理图在本设计protues仿真中,用时钟激励源代替霍尔传感器,演示在不同车速情况下,里程表的车速测量、里程显示及报警情况。将激励源接到P32口,定时器T0记录一秒钟脉冲次数,从而计算车速及里程信息。(见图2.6) 图2.6模拟霍尔脉冲2.3温度传感器DS18B20DS18B20是数字式温度传感器,该器件有GND、DQ、VDD三个引脚。GND是信号地引脚,接0V电平,即电源GND引脚。DQ为数据输入和输出引脚,接STC89C52RC单片机P36口,外加5.1K左右上拉电阻 。VDD为电源5V引脚。DS18B20温度传感器只有一个数据接口,使用

19、起来方便快捷,连接的线路也很简单,测量温度范围宽,从零下50度到125度的范围,测量误差很小,小于0.5,而且该器件体积很小,不会影响整个电路的体积。故用它来测温是很好的选择。DS18B20引脚图及引脚功能介绍(如图2.7) 图2 .7 DS18B20引脚编号序号名称引脚功能描述1GND地信号2DQ数据输入/输出引脚。3VDD可选择的VDD引脚。接电源5V电平,电源VCC引脚在本设计protues仿真中,与单片机的连接(如图2.8) 图2.8温度传感器接法2.4存储器AT24C02AT24C02是断电不丢失数据的串行EEPROM芯片,该芯片的存储容量为2KB(256*8Bit)。可以反复擦写十

20、万次以上,芯片里的数据可保存100年。 AT24C02的引脚(如图2.9)功能简绍如下:A0A2为可编程地址输入端,可在同一系统中接8块该芯片,芯片地址由A0A2的值决定,即从000111。VSS为电源地引脚,接0V电平GND。SDA串行数据输入/输出端。里程表系统中接STC89C52RC单片机P31口。SCL串行时钟输入端。里程表系统中接STC89C52RC单片机P30口。WP写保护端口。作用是保护硬件数据。该引脚接高电平表示只能对该芯片进行读操作而不能改变芯片里的数据,接低电平表示可以对该芯片进行读和写的操作。本系统需要对该芯片进行读和写的操作,因此在里程表系统中接0V电平GND。VCC电

21、源正端。接5V电平VCC引脚。在里程表系统中,SDA和SCL两个引脚需要接一个5K左右的上拉电阻,以保证不会出现数据的错误读写。A0A2和WP引脚直接接GND引脚,即该芯片在本系统中的地址为000,而且可以对该芯片进行读和写操作。 图2.9 AT24C02引脚图在本设计protues仿真中,与单片机的连接(如图2.10) 图2.10存储器接法2.5键盘单元因为本系统中要调节的信息不多,故只设计了七个独立键盘。(见图2.11)单片机上电后各IO口为高电平,当键按下后,与按键相连的IO口电平被拉低。各键的功能如1.2中所述 图2.11按键电路2.6显示单元在本系统中所用的显示器为LCD1602,而

22、非数码管。因为如果用几个数码管显示速度和里程等信息,并用其它方式得内容和单位,例如数码管显示35.26,并且指示速度的发光二极管亮,它表示当前的速度为35.26千米/小时;但是用LCD1602显示该信息的话,在一屏上可以同时显示出数字、内容和单位等,例如显示:Speed =35.26km/h,它表示当前的时速为35.26km。此外数码管所需供电电流比LCD1602大,这对使用电池提供电能的系统来说是很不利的,而由LCD1602显示器组成的显示单元具有显示内容多,人机界面友好、更省电,具有控制简单,使用单片机接口少等优点,因此本设计采用LCD1602液晶显示屏,能够实时的显示里程速度等信息。其中

23、LCD显示器的段选码都由单片机的P1口连接控制,与单片机的连接(如图 2.12)。 图2.12显示器接法2.7报警电路报警电路有有源蜂鸣器和LED灯构成,其中报警时速可通过按键调节,当时速大于报警值时,蜂鸣器长鸣,LED灯亮起。此外P27引脚需接一个2K上拉电阻,才能使单片机输出高电平时导通NPN三极管,电路(如图2.13)。 图2.13报警电路2.8时钟芯片DS1302DS1302是一种实时时钟芯片,引脚结构如图(2.14),与单片机连接(如图2.15)。VCC1引脚是备用电源正引脚,VCC2是主电源正引脚,当备用电源大于主电源0.2V时使用VCC1供电。X1和X2引脚外接32.678KHz

24、晶振。 图2.14时钟芯片引脚图 图2.15 时钟芯片电路3软件设计系统的主程序流程(如图3.1)本系统设计好硬件电路后,就需要设计系统程序了。程序按不同的功能可以分为六部分,分别是:显示程序、时钟程序、存储程序、温度程序、按键程序、数据处理程序。首先在主程序部分对报警接口进行初始化,使其上电后不会报警,再打开外中断、定时器溢出中断等并给定时器赋初始值,之后进入循环,分别循环扫描显示程序、按键程序、温度程序、时钟程序、里程计算程序、速度计算程序等等。系统程序的难点在于LCD1602读写字节程序,由于对延时时长要求很高,很容易出现不显示或不能正确显示。其次是速度计算程序,虽然计算公式符合理论,但

25、总是不能正确显示出速度值,只有加中间变量和一定延时时间才能解决该问题。最后是总里程和单里程计算出的值要相一致,并且都要求很小的误差,该处程序容易忽略丢失小数位造成的误差。 Y开始初始化数据处理是否到两秒是否超速显示相关内容二极管和蜂鸣器报警NNY 键盘扫描显示不同内容图3.1系统流程图3.1键盘扫描程序键盘采用循环扫描的方式,放在主程序无限循环中,当有检测到有按键按下的时,就执行相关程序。在程序中设不同的标志位,使其显示不同的内容,相关按键可定义一个中间变量,用于记录按键按下的次数,之后再执行按下不同次数的程序,使按键尽可能少。该处程序用到了许多的if嵌套,对逻辑能力稍有要求。由于该处程序较繁

26、杂,仿真时不能很好地体现出程序的功能。流程如(图3.2)所示。开始键1按下显示车速键2按下显示总里程显示单里程键3按下报警显示温度键4按下报警取消Y Y Y Y NNNN图3.2按键流程图按键一为复位按键,按下可使单片机复位。按键二为里程清零按钮,可对总里程和单次里程清零。按键三为显示选择按钮,可选择显示速度/总里程,速度/单里程,时间/温度,车轮周长/报警速度。按键四为数据修改选择按钮,可以选定需要修改的数值。按键五为数值修改时的加按钮。按键六为数值修改时的减按钮。按键七为LCD背光和循环显示切换按钮。这些按钮通过程序进行控制,相关程序见附录D。3.2数据处理程序利用单片机的外中断INT0记

27、录霍尔脉冲量Number1Number3,速度计算为每两秒计算一次速度值,公式为:Speed=L*Number1*1.8,每计算一次速度值就对Number1清零。单里程计算公式为:Cur_dis=Number2*L,单里程每计满100米就对Number2清零。总里程计算和单里程相差不大,只不过每计满100米就写入AT24C02,对EEPROM的数据进行更新。流程图如(图3.3)。显示相关数据LCD1602显示器P3.2处理数据,计算各值STC89C52RC霍尔脉冲温度传感器存储器AT24C02写入数据读出数据时钟芯片图3.3数据处理流程 3.3报警程序报警程序比较简单,在超速时,只要在软件中使

28、与二极管相连的单片机IO口置零就可以了。当对与蜂鸣器相连的单片机IO口置高电平时,蜂鸣器发声。在软件设计用if语句实现了报警功能。3.4显示程序显示子程序的设计也比较重要了,之前的一些子程序的设计都是针对一些数据做处理,而这些经计算后得出的数据却需要通过显示子程序显示出来。本设计采用的是LCD1602液晶显示屏,能分2行显示32个字符,共16个引脚,带背光。LCD1602液晶模块内部的控制器共有11条控制指令,其读写操作、屏幕和光标的操作都是通过对这些指令来高低电平变化的控制来实现的。液晶显示模块执行指令的时间较长,不能很快更随指令的变化,因此在执行指令前需要延时一定的时间,以确保指令能被执行

29、,或者对其进行忙状态检测,忙状态下的其他指令时不能执行的。要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符,首行第一个字符的地址是00H,第二行第一个字符的地址是40H,那么是否直接写入40H就可以将光标定位在第二行第一个字符的位置呢?这样不行,因为写入显示地址时要求最高位D7恒定为高电平1,所以实际写入的数据应该是B(40H)+B(80H)=B(C0H)。流程图如图3.3所示: 开始调用写入字节函数调用命令函数调用写入数据函数显示信息结束 图3.3显示器流程3.5存储模块程序AT24C02存储器用来保存总里程数据、车轮周长和报警速度值,因此要处理好该芯片的字节读写问题。由于AT

30、24C02的可擦写次数是有限的,所以不能太过频繁地对其进行擦写操作,要不然很可能会大大缩短里程表的使用寿命。本系统每100米更新一次总里程数据,虽然这样做可能会丢失部分里程值,但相比于每转一圈就擦写一次能大大提高里程表的使用寿命。存储程序含有开始读写操作和停止读写操作部分,因此能很好地控制什么时候进行读写操作。对于总里程、车轮周长和报警速度值只需要开机时读出来即可,而不需要反复地进行读操作,这样做也能提高里程表的使用寿命。AT24C02一次只能传输8位数据,第九位为数据认可位,即应答位,并采用I2C通信模式,而对于总的传送多少数据是没有任何限制的。实际上对于该芯片的操作还是很容易实现的,只要时

31、序正确,正常情况下都能正确传输数据。AT24C02的开始信号,应答信号和结束信号都是通过STC89C52RC单片机模拟I2C通信产生的。AT24C02芯片的读写子程序见附录D。3.6温度模块程序本模块包含如下子程序:(1)读写一个字节程序;(2)温度转换程序;(3)显示温度值程序;DS18B20是一种很常见的温度传感器,对于该器件的操作难点主要在于温度值的转换,要分别提取出温度值的百位、十位、个位和小数位。此外还有区分温度是正值还是负值。由于DS18B20存在一定的误差,所以还要适当地修正误差。相关程序见附录D。3.7时钟程序DS1302是一种实时时钟芯片,可以计算时分秒、日月年和星期,这种芯

32、片使用起来简单方便。该芯片单片机的控制程序分为读出时间值和按钮修改时间值,其中读出时间值较为简单,下面就修改时间的程序介绍一下。修改DS1302芯片的时间值需要用到三个按键,第一个为选定修改选项按键,第二个为调整加键,第三个为调整减键。当显示屏显示时间温度时,按下不同次数的选定按钮可以使年月日星期时分秒的值处于可调整状态。该处程序主要用到了switch-case语句。Switch用于记录第一个按钮按下的次数,case为从第一次到第八次的情况。当按一下选定按钮时,为case1,此时可以调整秒值,按两次选定按钮时,为case2,此时分值可以调整,以此类推。按八下选定为case8,此时推出可调整状态

33、,LCD1602显示屏停止闪烁。流程图如(图3.4),相关程序见附录D。开始变量初始化使DS1302不具备写保护复位端产生一个高电平写1302地址延时一段时间向该地址写数据地址增加数据是否写完复位端产生一个高电平写1302地址延时一段时间将该地址的数据读出地址增加数据是否读完YYNN显示数据图3.4时钟流程图4仿真过程介绍4.1软件编写和电路设计本系统程序是用C语言编写的,编写及编译软件是keil C51,并用该软件生成的hex可执行文件,添加到仿真软件中进行仿真。keil软件的使用方法可分为如下三步:(1)项目工程的建立。具体操作是:新建一个工程,命名后选择一个符合自己选定的单片机型号,最后

34、点确定即可。(2) 源文件的建立并添加到项目中。具体操作是:新建一个源文件,命名并保存。然后在项目中点右键并将新建立的C源文件添加到项目中去。(3)程序编写和编译。程序写完后点击编译所有文件选项,如有错误,需修改程序,直到无错误提示为止。最后在项目输出选项页面中,选择生成hex文件。重新编译便可生成hex可执行文件。本系统仿真是用protues软件实现的。因为系统的功能丰富,故设计时不是完成全部的软硬件设计后再进行调试的。而是逐步添加的,这样做有效降低了调试时的困难,有利于找出错误。可以分为如下五个阶段:(1) 车速表。只显示车速,并通过调节脉冲发生器测试车速是否准确。(2) 车速和单里程。可

35、以显示车速,同时也能显示单次行驶的里程。(3) 车速和总里程。在电路中加入掉电存储芯片,用来存储行驶的总里程。(4) 加入报警功能。(5) 加入温度显示模块。(6) 加入时钟模块。4.2系统调试在系统调试阶段,发现如下几个问题:(1)车速表调试过程中,发现无论如何修改相关程序,LCD显示器都不能正确显示。起初以为是显示程序的问题,经过仔细分析仿真结果,发现显示器经常处于忙状态,这说明显示器相关指令延时时间不够。修改相关延时时间后,问题得到改善。(2)加入总里程功能后,在调试时,发现系统掉电后无法保存总里程数据。反复调试后发现是存储器读写太快的原因造成的,程序如下: dist0=ReadByte

36、ByAddress(0);/读取存储器中里程的各位 dist1=ReadByteByAddress(1); dist2=ReadByteByAddress(2); dist3=ReadByteByAddress(3);加入5ms的延时时间后,存储器就可以正常读写了,程序如下:dist0=ReadByteByAddress(0);/读取存储器中里程的各位 delay(5); dist1=ReadByteByAddress(1); delay(5); dist2=ReadByteByAddress(2); delay(5); dist3=ReadByteByAddress(3); delay(5)

37、;(3)报警功能调试时,发现蜂鸣器不能发声,仔细检查报警程序并确定没有问题后,开始检查硬件,发现蜂鸣器的工作电压、电阻及频率三个参数值没有正确设置。更改参数后,该问题得到解决。(4)速度值调试时,起初LCD1602显示的速度值很小,显然是错误值。经过再三检查,发现计算速度的公式并没有错误,而是由于缺少中间变量,即现用中间变量计算出速度值,然后再赋给显示速度所用的值,在程序中用speed表示。此外计算出速度后需延时一定时间,否则高速时显示值跳变很厉害。(5)测试按键是否能正确调整时间值时,发现当时间值处于可调整状态时,DS1302芯片没有停止走时,经查阅该芯片相关资料后发现这是由于在主程序中没有

38、加入停止走时的相关指令的缘故,加入该指令后问题得到解决。 结束语毕设的题目为基于单片机的智能里程表,按系统所能实现的功能来讲,称其为基于单片机的数字里程表更合适。本系统实现了用LCD1602显示速度、超速提示、总里程、单里程、时间、温度、车轮周长和报警速度值。这些不同值的显示通过相关按钮的切换来实现。除了显示功能,还有超速报警功能。另外可通过按钮修改车轮周长值,报警值和时间日期值等。虽然功能丰富,但谈不上智能。本系统的缺陷在于不能根据车辆所在位置自主设定报警值,也不能提示驾驶者不同路段的限速值和前方是否有违规拍摄等等。无奈作者水平有限且时间仓促,这些缺陷在本设计中是不能够解决的了。若以后还有机

39、会接触里程表的相关设计,必要克服上述缺点,从而实现智能功能。 致谢在毕设中,我学到了很多以往没有学习过的软硬件知识。毕业之前,通过毕设对几年前学习过的知识进行了梳理和复习,并且通过自主学习和请教师友也学到了很多课本上没有的知识。其中最大的收获是编程逻辑能力得到了不小的提高。以前连一个简单的程序都很难独自完成,经过毕业设计的考验后,现在却能写出具有一定功能的程序,而且也喜欢上编程了。这次毕设也使我认识到电子电路知识的重要性。刚开始仿真时,由于忽略了上拉电阻,程序修改多次LCD显示器也不能正确显示。在设计报警电路时,因为没注意有源和无源蜂鸣器的区别,多次修改电路也不能实现报警功能。这让我我认识到,

40、在以后的学习或工作中,不仅要知道各种电子元器件如何接,更要明白为什么这样接,同时也要注意细节。做到刨根问底,从头学习电路知识。总而言之,通过这次毕设,我不仅学到了很多新的知识,更是认识到了自己的不足之处,也平静了浮躁之心,明确了将来的方向,尤其是培养了做事仔细认真,吃苦耐劳的精神和与之对应的工程意识。最后,借此次机会感谢学校给了我一次独立完成一个工程设计的机会,使得在大学期间所学的专业知识有了一次应用和总结。同时非常感谢杨敬松老师的细心指导,她那认真负责的工作态度、严谨治学的风格,使我深受启发。杨老师不但在理论上给了我很多的指导,同时也给予了精神上的帮助,使我能够克服重重困难。在设计过程中遇到

41、的种种错误和不足之处,杨老师都耐心地为我一一解答并且提出不少指导性的意见。杨老师也为我提供了很多有价值的资料,使我受益菲浅。最后还要感谢其他的师友,他们也给予了我各种帮助。 参考文献1谭浩强.C程序设计M.北京:清华大学出版社,2005.07.2华成英,童诗白.模拟电子技术基础M.北京:高等教育出版社,1980.09.3蔡振江,刘志红.单片机原理及应用M.北京:电子工业出版社,2011.08.4宋雪臣,单振清,郭永欣. 传感器与检测技术M.北京:人民邮电出版社,2011.11.5徐寒,徐健健.智能速度里程表设计J.电子测量技术,2005,16,(2):7-9.6佚名.智能速度里程表设计J. h

42、ttp:/ /.html,2006.03.7董春兰. 智能车速里程表的设计J./p-.html,2006.07.8佚名.基于AT89C51单片机的转速测量系统设计J. ,2010.05.9赵建领,薛园园. 零基础学单片机C语言程序设计M.北京:机械工业出版社,2009.04.10宋宥文.霍尔传感器测速原理J. /.html,2012.01.11佚名.自行车测速仪J./p-.html,2011.07

43、.12张秀关.单片机与计算机串口通信实践M.北京:电子工业出版社,2013.01. 附录A系统原理图附录B PCB图 附录C实物图附录D源程序#include #include #define uchar unsigned char#define uint unsigned int#define BUSY 0x80 /常量定义#define DATAPORT P1 /LCD数据接口#define yh 0x80 /LCD第一行的初始位置#define er 0x80+0x40 /LCD第二行初始位置/*单片机引脚定义*/sbit LCM_RS=P34;/LCD1602 RS接口sbit LCM

44、_RW=P35;/LCD1602 RW接口 sbit LCM_EN=P37;/LCD1602 EN接口sbit DQ =P36;/温度传感器接口sbit SCL =P30;/AT24C02 SCL接口sbit SDA =P31;/AT24C02 SDA接口sbit SIGN =P32;/霍尔脉冲输入接口sbit key1 =P33;/按下5S,总里程清零sbit key2 =P20;/切换显示当前里程日期时间温度车轮周长报警速度sbit key3 =P21;/LCD背光按钮sbit P22 =P22;/LCD背光信号sbit key5 =P23;/时间日期车轮周长报警速度设置键sbit key

45、6 =P24;/时间日期车轮周长报警速度加键sbit key7 =P25;/时间日期车轮周长报警速度减键sbit P26 =P26;/报警灯接口sbit P27 =P27;/蜂鸣器接口sbit IO =P01;/IO为DS1302的I/O数据线sbit SCLK =P02;/sclk为DS1302的时钟信号线sbit RST =P03;/RST为DS1302的RST信号线bit ReadRTC_Flag;/设定时间时停止走时标志位uchar xdata str016,str116,str216,str316;uchar xdata str416,str516,str616,str716;uch

46、ar clbj2=0,dist4=0;unsigned long Cur_dis,Dis,speed;uint tvalue,Number1,Number2,Number3;uchar count,num,num1,miao,shi,fen,ri,yue,nian,week;uchar key2n,key3n,key5n,key8n,baojing,chelun,tflag;void delay(uint);void time0_isr(void);void int0_isr(void);void main(void);bit lcd_wait(void);void display(); vo

47、id initLCM();void WriteDataLCM(uchar WDLCM);void WriteCommandLCM(uchar WCLCM);void DisplayOneChar(uchar X,uchar Y,uchar DData);void DisplayListChar(uchar X,uchar Y,uchar *DData);void STR_0();void STR_1();void STR_2();void STR_3();void STR_4();void STR_5();void STR_6();void STR_7();void account();voi

48、d mileage();void mile_show();void keyscan();void WriteByteToAddress(uchar address,uchar writedata);uchar ReadByteByAddress(uchar address);read_temp();uchar read_1302();void write_1302(uchar add,uchar dat);void keyscan_1();void keyscan_2();void keyscan_3();void mile_read();void ds1302_init();void shi

49、jian();void delay(uint k) /延时K*1ms,12Mhz uint i,j; for(i=k;i0;i-) for(j=60;j0;j-) ; void time0_isr(void) interrupt 1 /遥控使用定时计数器1 TH0 = 0x3C; /定时50000微秒 TL0 = 0xB0; count+; void rimer1_isr(void) interrupt 3 TH1 = 0x3C; /定时50000微秒 TL1 = 0xB0; num+;num1+;void int0_isr(void) interrupt 0 /遥控使用外部中断0,接P3.2

50、口Number1+;Number2+;Number3+; void main(void)P26=1;P27=0; P22=0;mile_read();/读出EEPROM数据mile_show();/将读出的数据转换成十进制 TMOD=0x11; /*TMOD T0,T1选用方式1(16位定时器) */ IT0=1; /*INT0下降沿触发中断*/EX0=1; /*允许外中断INT0中断*/EA=1; /*开总中断*/ET0=1; /*允许定时器、计数器T0中断*/ET1=1; /*允许定时器、计数器T1中断*/IP =0x01;/*PX0=1 INT0外中断优先*/TH0 =0x3C; TL0 =0xB0;TH1 =0x3C; TL1 =0xB0;initLCM();ds1302_init();/DS1302时钟初始化 WriteCommandLCM(0x01);/清显示屏 while(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论