里程表设计论文附程序
- 格式:doc
- 大小:117.50 KB
- 文档页数:22
自行车里程表的设计毕业论文前言 (1)第1章绪论 (2)1.1 课题背景 (2)1.2 设计的主要容及技术指标 (2)第2章自行车里程表总体方案设计 (3)2.1 任务分析与实现 (3)2.2 自行车里程表硬件方案设计 (3)2.3 自行车里程表软件方案设计 (4)第3章自行车里程表硬件模块设计 (5)3.1 里程表的硬件设计 (5)3.1.1 霍尔传感器电路模块设计 (5)3.1.2 按键电路模块设计 (6)3.1.3 电源电路模块设计 (6)3.1.4 时钟电路模块设计 (7)3.1.5 LCD显示模块电路模块设计 (7)3.1.6 串口下载电路模块设计 (8)3.1.7 复位电路模块设计 (9)3.1.8 晶振电路模块设计 (10)第4章软件的设计 (11)4.1 里程表的软件设计 (11)4.1.1 里程速度功能模块实现 (11)4.1.2 日历时钟模块功能 (14)4.1.3 LCD1602液晶显示模块 (17)第5章软件调试 (21)5.1 程序的检测与调试 (21)5.1.1 Keil软件简介 (21)5.1.2 编制单片机应用程序的步骤和难点 (21)5.2 系统仿真调试 (24)5.2.1 程序的查错手段 (25)第6章结论 (27)第7章谢辞 (28)参考文献 (29)附录1 硬件设计原理图 (30)附录2 硬件电路仿真图 (31)附录3 软件程序 (32)译文 (69)C语言 (69)第1章绪论单片机自从推出以来,以其超小型化、结构紧凑、可靠性高、成本低等优点被人们广泛接受,从而应用于工业、电讯、数据处理、仪器仪表等多方面。
自行车里程表是自行车的重要配件,在自行车仪表中占重要位置,但几十年来其发展变化并不大,现在国外很多车中使用了数字里程表,但在国还并不多见。
1.1 课题背景里程表的原理很简单,车轮的圆周长是恒定不变的。
由此可以计算出每走一里路车轮要转多少圈,这个数也是恒定不变的。
【关键字】设计编号:____________审定成绩:____________毕业设计(论文)设计(论文)题目:基于单片机的电子车速里程表的设计单位(系别):自动化系学生姓名:专业:电气工程及其自动化班级:学号:指导教师:答辩组负责人:填表时间:20 15 年 6 月重庆邮电大学移通学院教务处制重庆邮电大学移通学院毕业设计(论文)任务书设计(论文)题目基于单片机的电子车速里程表的设计学生姓名系别自动化系专业电气工程及其自动化班级七班指导教师职称副教授联系电话备注:此任务书由指导教师填写,并于毕业设计(论文)开始前下达给学生。
摘要自行车自1868年引入我国已有一百多个年头。
随着国内人均GDP的增长,自行车从普通的运输、代步工具发展成为人们休闲娱乐与锻炼的首选。
自行车凭借着高科技带来的高配置和它自身的优势,逐渐的又吸引了大家的眼球。
随着周边环境的破坏污染,自行车必然会有着大好的发展空间。
人们可以通过一些简单的仪器仪表了解实时里程、速度。
可是现在的汽车或者摩托车的仪表片都是机械式的,不方便驾驶员直接捕捉信息。
所以在此次设计中我们将想办法把速度时间等数据通过LED显示出来。
本论文主要阐述一种基于单片机的自行车速度/里程计的设计。
以AT89C51单片机为核心,采用ITR-9707光电传感器测转,A T24C02 实现在系统掉电的时候保存里程信息。
通过频率测量模块和转换模块将数据递给MCS,再通过数据存取模块与LED 模块显示速度和里程。
完成此次的测量显示。
文章详细介绍了自行车速度/里程计的硬件电路和软件设计。
在设计硬件电路的时候,将光电传感器采集的脉冲信号给单片机处理并显示出来。
在此还增加了时间显示功能和超速报警功能。
软件系统设计部分采用C++软件对每一个模块进行编程。
最终达到设计目的。
【关键词】:里程速度光电传感器单片机ABSTRACTBicycle has been introduced to our country more than one hundred years since 1868. As the growth of the domestic per capital the GDP, the bicycle is not only the universal tool of transportation and substitute for walking, but becomes the first choice of entertainment and exercising. Bicycle with high-tech brings high configuration and its own advantages, gradually attracted everybody's eyes again. With the destruction of the surrounding environment, bicycle is bound to have good development space. But now the car or motorcycle instrument are mechanical, the driver could not directly capture information. So we will think of some way to put speed in the design time, such as data displayed by LED.In these paper, the bicycle speed/mileage design based on the Hall element is Single Chip Microcomputer. By AT89C51 as kernel, using ITR-9707 Photoelectric sensor to measure revolution, the measure and statistic are achieved. The range information are saved by AT24C02 when the power is off. The date through frequency measurement module and data conversion module be passed to the MCS, and then the speed and mileage were displayed by access module and LED module. Complete the measurement display.In this article, the hardware circuit and software design of bicycle mileage/speed instrument are introduced in detail. About the hardware, the pulse number is transmitted of one second of the bicycle into Single Chip Microcomputer system. Then the signal processed by Single Chip Microcomputer system is sent to display scream. And an increase of time display and speed alarm. Software system design part adopts C++ software for programming each module. Finally, we can achieve the design purpose.【Key words】: Mileage speed Photoelectric sensor Single Chip Microcomputer目录第四节数据存取模块..................................................................................... - 16 -一、AT24C02简要介绍................................................................................. - 16 -二、工作方式.................................................................................................. - 16 - 第五节显示模块............................................................................................. - 16 -一、外界芯片74LS245/74HC138 ................................................................. - 16 -二、工作原理.................................................................................................. - 17 -第六节超速报警电路模块............................................................................. - 17 - 第七节其他模块............................................................................................. - 17 -一、时钟电路的设计...................................................................................... - 17 -二、工作电源的设计...................................................................................... - 18 -三、开关电路的设计...................................................................................... - 18 - 第四章系统的软件设计..................................................................................... - 19 - 第一节测量算法概述..................................................................................... - 19 - 第二节中断子程序的设计............................................................................. - 19 - 第三节数据处理程序设计............................................................................. - 20 -一、里程计算服务程序.................................................................................. - 20 -二、速度计算服务程序.................................................................................. - 22 - 第四节显示服务程序的设计......................................................................... - 22 - 第五章系统可靠性设计和功能实现................................................................. - 24 - 第一节硬件系统的可靠性设计方法............................................................. - 24 - 第二节软件系统的可靠性设计..................................................................... - 24 - 第三节功能实现............................................................................................. - 26 - 结论..................................................................................................................... - 26 - 致谢..................................................................................................................... - 27 - 参考文献................................................................................................................. - 28 - 附录..................................................................................................................... - 29 -一、英文原文..................................................................................................... - 29 -二、英文翻译..................................................................................................... - 33 -三、电路图......................................................................................................... - 36 -四、PCB图 ........................................................................................................ - 37 -五、源程序.................................................................................错误!未定义书签。
基于单片机的自行车里程表设计一、引言二、系统总体设计方案(一)功能需求分析自行车里程表需要实现以下主要功能:1、准确测量自行车行驶的里程。
2、实时显示里程数据。
3、具备低功耗特性,以保证长时间使用。
(二)系统组成本系统主要由传感器模块、单片机控制模块、显示模块和电源模块组成。
1、传感器模块用于采集车轮转动的信息。
2、单片机控制模块负责对采集到的数据进行处理和计算。
3、显示模块用于向用户展示里程等相关信息。
4、电源模块为整个系统提供稳定的工作电压。
三、硬件设计(一)传感器选择常见的用于测量自行车车轮转动的传感器有霍尔传感器和光电传感器。
霍尔传感器通过感应磁场变化来检测车轮转动,具有精度高、稳定性好的优点;光电传感器则通过检测光的遮挡来判断车轮转动,成本相对较低。
综合考虑,本设计选用霍尔传感器。
(二)单片机选型单片机作为系统的控制核心,需要具备一定的运算能力和接口资源。
考虑到成本和性能要求,选用 STC89C52 单片机。
(三)显示模块为了使里程表的显示清晰直观,选用液晶显示屏(LCD)。
LCD 具有低功耗、显示内容丰富等优点。
(四)电源模块由于自行车在行驶过程中震动较大,选用可充电的锂电池作为电源,并通过稳压芯片将电压稳定在系统所需的工作电压范围内。
四、软件设计(一)主程序流程系统上电后,首先进行初始化操作,包括单片机内部资源的初始化、传感器的初始化和显示模块的初始化。
然后进入主循环,不断采集传感器的数据,并进行计算和处理,将里程数据实时显示在显示屏上。
(二)里程计算算法根据传感器检测到的车轮转动信号,结合车轮的周长,通过累积计算得出行驶里程。
(三)显示程序设计合理的显示界面,将里程数据以清晰易读的方式呈现给用户。
五、系统调试与测试(一)硬件调试在焊接完成后,首先检查电路是否存在短路、断路等问题。
然后使用万用表等工具对各个模块的电源电压、信号电平进行测量,确保硬件工作正常。
(二)软件调试通过单片机的在线调试功能,逐步调试各个功能模块的程序,查看变量的值和程序的执行流程,排除软件中的错误。
摘要摘要随着居民生活水平的不断提高,自行车不再仅仅是普通的运输、代步的工具,而是成为人们娱乐、休闲、锻炼的首选。
自行车的速度里程表能够满足人们最基本的需求,让人们能清楚地知道当前的速度、里程等物理量。
本论文主要阐述一种基于霍尔元件的自行车的速度里程表的设计。
以AT89C52 单片机为核心,A44E 霍尔传感器测转数,实现对自行车里程/速度的测量统计,采用24C02 实现在系统掉电的时候保存里程信息,并能将自行车的里程数及速度用LED实时显示。
文章详细介绍了自行车的速度里程表的硬件电路和软件设计。
硬件部分利用霍尔元件将自行车每转一圈的脉冲数传入单片机系统,然后单片机系统将信号经过处理送显示。
软件部分用汇编语言进行编程,采用模块化设计思想。
该系统硬件电路简单,子程序具有通用性,完全符合设计要求。
关键词:里程/速度;霍尔元件;单片机;LED显示I目录1 绪言 (1)1.1 课题背景 (1)1.2 课题的主要任务及内容 (1)2 自行车的速度里程表总体方案设计 (2)2.1 任务分析与实现 (2)2.2 自行车的速度里程表硬件方案设计 (2)2.3 自行车的速度里程表软件方案设计 (4)3 自行车的速度里程表硬件电路设计 (5)3.1 概述 (5)3.2 传感器及其测量系统 (5)3.2.1 霍尔传感器的测量原理 (5)3.2.2 集成开关型霍尔传感器 (6)3.3 单片机的原理及应用 (7)3.3.1 单片机原理简介 (7)3.3.2 单片机的引脚功能介绍 (8)3.3.3 单片机中断系统介绍 (10)3.3.4 单片机定时/计数功能介绍 (11)3.4 其他器件的介绍 (12)3.4.1 存储器的介绍 (12)3.4.2 74LS74芯片的介绍 (13)3.4.3 74LS244芯片的介绍 (14)3.5 单片机外围电路的设计 (14)3.5.1 时钟电路的设计 (14)3.5.2 复位电路的设计 (15)3.5.3 显示电路的设计 (16)3.5.4 报警电路的设计 (17)4 自行车的速度里程表软件程序设计 (18)4.1 概述 (18)4.2 自行车的速度里程表总体程序设计 (18)4.3 中断子程序的设计 (20)II目录4.4 数据处理子程序的设计 (20)4.5 显示子程序的设计 (22)5 系统调试与分析 (24)5.1 系统仿真调试 (24)5.2 调试故障及原因分析 (24)6 结论与展望 (26)6.1结论 (26)6.2 展望 (26)致谢 (27)参考文献 (28)附录 (29)III1 绪言1.1 课题背景自行车被发明及使用到现在已有两百多年的历史,这两百年间人类在不断的尝试与研发过程中,将玩具式的木马车转换到今日各式新颖休闲运动自行车,自行车发展的目的也从最早的交通代步的工具转换成休闲娱乐运动的用途。
济南铁道职业技术学院毕业设计题目:电动自行车速度里程表系别:电气系专业:电气自动化班级:电气0431学生姓名:付小明指导教师:贾俊刚完成日期:2007.5.10济南铁道职业技术学院毕业设计任务书摘要给出了以AT89C51单片机和光电传感器为核心,利用单片机的运算和控制功能以及传感器可以将不同车速转变成的不同频率的脉冲信号输入到单片机进行控制与计算的特点,采用串口LED显示模块实时显示所测速度和里程的速度里程。
该方案由于使用了串口LED显示模块和E2PROM以及高效快速的算法,因而可在节约系统资源和简化程序设计的基础上保证测量精度和系统实时性。
关键词:脉冲发生;数据采集;串行数据存储;实时数据处理;速度及里程测量;串行LED显示;单片机的选择;软件设计目录第一章.引言 (5)第二章系统概述 (6)2.1系统工作原理 (6)2.2 系统硬件设计 (8)2.2.1单片机系统 (8)2.2.2 LED显示电路 (9)2.2.3 外部晶振输入及复位电路 (11)2.2.4供电电路 (12)第三章.系统的软件设计 (13)3.1系统软件设计框图 (13)3.2数据的采集及处理 (13)总结 (15)致谢 (16)参考文献 (17)附录(一) (18)元器件清单 (18)电路工作原理图 (19)光电传感器的参数特性 (19)附录(二)系统编程软件 (21)第一章引言当今社会,以电力作为主要动力的电动自行车正逐步取代自行车,摩托车而成为代步的主要交通工具。
行驶过程中不产生污染,利于环境保护。
考虑其改善人们的出行方式、保护环境和经济节约等综合因素,电动自行车目前乃至今后都有着广阔的发展空间。
目前市面上电动自行车的速度里程表都是机械式结构的,看起来不够直观,如果能够采用LED屏幕直接将里程数或速度值显示出来,则会给用户带来极大的方便!本设计以AT89C51单片机为核心,通过光电传感器来检测自行车的运转情况进而实现电动自行车的速度、里程的计算及里程的累计、存储,最后用8位的LED直观的将速度与里程值显示给用户,并且能够在速度高于用户的设定值时自动向用户发出声光报警,从而实现仪表的智能化。
自行车里程碑一,摘要:自行车的技术性能随着行驶里程的增加以及各种因素的影响而发生变化。
在使用自行车的过程中,控制车辆速度,可以减少隐患,并防止故障的发生提高车辆的完好率,有效地延长自行车的使用寿命。
因此,骑车中应时常关注里程表显示的数字,一旦超过一定速度,应及时减速,防止事故的发生。
针对机械式里程表的缺点,开发研制了数字式自行车里程表。
该里程表系统主要由CD4040和CD40110为核心、光电传感器调理,并由LED显示器显示出来的速度里程表设计方案。
该方案由于使用了CD4040和CD4011等比较低级芯片,因而可在节约系统资源和简化程序设计的基础上保证测量精度和系统实时性。
关键词:里程表;光电传感器;芯片;LED显示器二,概论:这自行车里程表设计的实现方式是,通过安装在自行车转轴上的测量盘,用光电式转速传感器检测转速的脉冲信息,在脉冲状态下,将转速的变化转换成光通量的变化,再通过光电转换元件将光通量的变化转换成电量的变化,接着通过频率测量电路将脉冲信号依次传入到各个芯片中,然后依据电量与转速的函数关系实现转速测量,再通过计算,从而得出里程的信息,并由LED显示器显示出来。
这设计要求是两个数码显示,单位百米,直径在0.99cm,即在设计电路中应采取32进制计数。
电源应该有稳定的9V输出。
三,方案流程图:电源电路图220v的交流电经过变压器降压至9v交流电,通过桥式整流后,波形都变为正的。
再经滤波,LM7809的整流,再滤波,最后得到稳定的电压+9 v。
轮胎转速检测电路图由红外线发射端到红外线接收端中间有测量牌进行格挡,产生脉冲,经过芯片LM358进行扩大信号。
CD4040-----12位二进制串行计数器简要说明:CD4040 是12 位二进制串行计数器。
所有的计数器为主从触发器。
计数器在时钟下降沿进行计数。
CR 为高电平时,对计数器进行清零。
由于在时钟输入端使用斯密特触发器,对脉冲上升和下降时间无限制,所有输入和输出均经过缓冲。
汽车车速里程表电子技术论文(全文)1电子式车速里程表的安装一般情况下,如果车辆的行驶里程数在15万公里与20万公里之间,那么汽车的各种操作技术的性能就可以很明显的看出已经有所降低了。
在这种情况下,如果不进行下一步处理,就会使汽车在使用性能等方面受到影响,在汽车的安全性、操作性、经济性、平顺性等标准上也会出现质量下降。
有些人为了确保各种参数的准确性,自己进行电子式车速里程表的安装,结果因为不熟悉安装程序,对机器造成破坏,在运行时出现故障,仪表盘所显示的读数不能够准确的反映出实际的行驶的里程,只能依靠司机进行估计来计算车辆的养护日期。
这样的做法是十分不可取的:仅仅依靠司机估计的数据与实际情况还是有差距的。
更重要的是如果在安装时漏掉了重要的零部件,不仅在行驶中读取不到正确数值,还更有可能在这过程中形成安全隐患,对司机的安全构成威胁。
为此,在进行电子式车速里程表的安装时,需要在说明书的指导下进行安装,必要时可以由专业人员在旁进行指导与帮助,保证安装后可以最大限度的发挥其作用。
2电子式车速里程表的电子设备的问题及解决方案相比于传统的车速里程表,电子式车速里程表选用了具有时代特色的科技产品为人们服务:它们主要是由具有一对或几对触点的舌簧开关和转子组成的。
在这种车速里程表中,它们的传感器是安装在组合仪表内部的,由变速器经过软轴驱动,在汽车行驶过程中产生了正比于汽车行驶速度的信号。
2.1电压汽车里程表都是有一定的定额的工作电压,在使用过程中需要注意电压的控制。
特别是在冬季,有一些使用柴油机的车辆在进行启动时会遇到不能启动或是无法启动的问题,会选用强制启动的方法:跨接法高电压强制启动。
如果经常采用这种方法,会造成车速里程表内部电压不稳定,严重的会烧坏原本稳定的电路。
多次断开仪表电源,导致断丝等现象产生,使得车速里程表不能准确的显示车辆行驶路程及速度,车主无法准确的掌握车辆情况,最终会因为养护不及时导致车辆使用寿命缩短。
汽车里程表课程设计论文班级:学号:姓名:指导老师:摘要:在车辆高速行驶的过程中,车速里程表是为驾驶员及时提供动态驾驶信息的重要仪表,它的好坏直接影响到车辆行驶安全。
而传统的车速里程表存在两大缺陷:一是用软轴驱动的传统车速里程表在车辆高速行驶状态下,软轴高速旋转,由于软轴钢丝应力极限的限制,常常造成钢丝软轴的疲劳断裂,从而使车速里程表失效;二是由于软轴布线过长,出现形变过大和运动迟滞现象,导致动态指示迟钝或指示错误。
为了更加及时可靠的为驾驶员提供动态驾驶信息,保证车辆行驶安全,客服传统软轴驱动车速里程表故障率高、动态指示迟钝等问题,运用先进的电子技术、传感器测量技术和计算机智能技术,改进传统的里程表是非常必要的。
关键字:单片机,霍尔传感器,车速里程表目录前言 (2)一任务设计 (3)二功能扩展 (4)三设计电路 (6)3.1 转速测量原理 (6)3.2 实验电路设计 (7)四控制方法 (9)4.1 汽车速度控制 (9)4.2 速度、里程记录控制 (11)4.3 速度、里程显示控制 (12)五程序代码 (13)六设计中的问题 (24)七设计总结 (24)前言汽车是现代生活中不可或缺的一种重要交通工具,传统的指针式里程表伴随着汽车的诞生就一直为人们喜爱,不过,新生事物不会因传统的存在而停止它前进的步伐。
数码科技在今天已渗透到工业,农业,民用等产品的点点滴滴。
新概念的车速里程表最直观的变化就是用大屏幕的液晶取代指针式表盘,直接用数字显示速度和里程,以及其他一些诸如油耗、时钟、环境温度等参数,直观的呈现给使用者。
同时,它还具有成本低廉,显示清晰,稳定可靠等优点。
由于微处理机体积小,可以把它做到产品的内部,取代老式机械零件,缩小产品体积,增强功能,实现智能化。
因此被广泛地用在智能产品中。
Intel公司的MCS-51系列单片机近年来得到了广泛流行。
本文即介绍一种基于ES8086芯片的汽车速度与里程表的设计和实现。
基于单片机的多功能自行车里程表的设计摘要本文设计了一种基于霍尔元件的自行车的速度和里程测量系统。
以A T89C52单片机为核心,A44E霍尔传感器测转数,从而实现对自行车里程、速度的测量统计,采用AT24C02实现在系统掉电的时候保存里程信息,并可以将自行车的里程和速度的物理量用LED显示出来。
硬件部分是利用霍尔元件将自行车每转一圈的脉冲数传入单片机系统,然后单片机系统将信号经过处理送往显示装置;软件部分用汇编语言进行编程,采用模块化设计思想。
关键词:速度;里程;霍尔元件;A T89C52单片机AbstractI am based on the design of a Holzer element to the bicycle's speed and mileage measurement system in this thesis. The main content is take A T89C52 single chip as the core, A44E Holzer sensor in measuring speed, thus realizing the bicycle mileage and speed measurement statistics, the use of AT24C02 realize in save mileage information when the system power off, and can be displaying the bicycle mileage and speed of the physical quantity in the LED. The hardware part of the Holzer element will take the pulse number of every turn to bike transfer to SCM system, then SCM system will signal is processed to display device; use the assembly language programming in the software part,啊pplication the idea of modularization.Keywords: Speed; course; Holzerelement; A T89C52 SCM目录第一章前言 .................................................................................................................... 11.1课题背景.................................................................................................................. 11.2课题设计的任务和要求.......................................................................................... 11.3课题设计的内容...................................................................................................... 1第二章自行车里程表的总体设计方案 .. (2)2.1霍尔传感器 (2)2.2设计思路 (2)2.3硬件设计 (2)2.4软件设计 (3)第三章自行车里程表的电路设计 (5)3.1测量系统 (5)3.2数据处理系统 (6)3.3时钟电路的设计 (8)3.4显示电路设计 (8)第四章软件部分设计 (9)4.1系统总程序设计 (9)4.2数据处理程序设计 (9)第五章总结 (11)参考文献 (12)附表 (13)第一章前言1.1 课题背景自行车是一种普遍的交通工具。
自行车里程表设计论文【摘要】以AT89S52型单片机为核心,实时测量并显示自行车行驶过程中的各项参数。
【关键词】单片机LCD干簧管累计里程速度【作品要求】设计一个可以适用自行车的轻便、省电、全天候野外使用的自行车里程表。
(1)基计要求总里程〈999.99km;可以轮流显示或选择显示(用十进制数):里程——当前行驶里程;速度——当前平均速度km/h;最大速度——本次行驶中的最大速度;时间——当前行驶累计时间,时、分、秒;电源不高于5V,体积小、结构可靠,便于安装及使用。
(2)发挥部分可以显示最大加速度;用可编程器件实现;用单片机实现【方案设计与讨论】1.速度测量原理测量自行车的速度的原理有两种:1)测量一定时间间隔t1里自行车车轮转过的圈数qs。
假设车轮周长为tc,则速度V=tc*qs/t12)测量自行车车轮转过一圈的时间t2,则速度V=tc/t2本里程表是根据原理2计算速度的。
2.传感器的选择1)红外对管。
把红外对管分别安装在自行车车轮的两侧,当车轮转动时,辐条会阻挡红外对管的光路,接收管输出低电平,单片机根据此信号可计算里程、速度等。
红外对管的优点是测量精度高,缺点是安装比较复杂和容易受外来光线、灰尘等的影响。
2)开关型霍尔传感器。
霍尔传感器是利用霍尔效应把磁输入信号转换成电信号的器件。
把开关型霍尔传感器安装在自行车贴近车轮的支架上,磁钢安装在辐条上,当磁钢靠近霍尔传感器的时候,传感器输出一个无抖动的低电平,单片机根据此信号可计算里程、速度等。
霍尔传感器的优点是稳定和安装简易,缺点是成本较高。
3)干簧管。
干簧管是一种磁敏的有触点无源电子开关元件,应用在里程表上的原理与开关型霍尔传感器类似,把干簧管安装在自行车贴近车轮的支架上,磁钢安装在辐条上,当磁钢靠近霍尔传感器的时候,干簧管闭合,单片机根据此信号可计算里程、速度等。
干簧管的优点是成本低廉和安装简易,缺点是比较脆弱和不够稳定。
本里程表选用干簧管作为传感器。
给干簧管套上废弃笔杆,可克服其脆弱的缺点;软件防抖可克服其不够稳定的缺点。
3.显示模块的选择1)动态扫描LED数码管显示。
里程表的显示内容以数字为主,利用LED数码管可基本满足使用要求,且成本较低。
但是用动态扫描的方式驱动数码管,亮度太低,在阳光下几乎看不见显示内容,失去使用价值。
2)串行静态LED数码管显示。
把单片机的串行口设置为方式0(同步移位寄存器),输出显示信息,可实现LED数码管的静态显示,其亮度令人满意。
但由于要使用74HC164/74LS164串并转换芯片驱动LED数码管,因此会带来体积大、成本高、功耗高等的缺点。
3)LCD液晶显示模块。
液晶显示模块具有体积小、功耗低、显示内容丰富等特点,现在字符型液晶显示模块已经是单片机应用设计中最常用的信息显示器件了。
本里程表使用1602 LCD作为显示模块。
【功能描述】以AT89S52型单片机为核心,实时测量并显示自行车行驶过程中的各项参数,包括当前行驶累计时间、当前行驶累计里程(m/km自动调整)、当前速度(km/h)、最大速度(km/h)、平均速度(km/h)、加速度(m/s2)、当前时间等,各参数分屏显示。
可更改自行车轮胎直径,适应不同的自行车,通用性好。
本里程表具有时钟功能,不安装在自行车上时也可作为时钟使用,实用性高。
【操作说明】里程表板面如上图所示,包括电源2pin排针、干簧管3pin排针、液晶显示器、液晶背光开关、电源开关、电源LED指示灯、功能按钮SW1-SW5、Reset 按钮。
接通电源或按Reset后,显示欢迎画面:DigitalBikeMeterWelcome….2秒后进入时钟设置画面:Set Time00:00:00按SW1-SW3调整时钟后,按SW4确认。
接着进入自行车轮胎半径设置画面:Set Bike Tire L=55cm默认设置为55cm,对应22英寸自行车轮胎半径。
按SW1、SW2调整轮胎直径后,按SW4确认,里程表开始工作。
各项参数分成四屏选择显示,按动SW5(Disp)按以下次序进行切换:【结构框图】系统由干簧管、设置选择模块、显示模块、蜂鸣器模块、供电模块和单片机小系统构成。
由设置选择模块选择显示模式后,单片机实时采集、处理后显示。
【具体硬件电路及工作原理】S::当前行驶累计里程(单位自动调整) S<1000m,格式xxx.x m, S>1000m,格式xxx.xx km ) Time :当前行驶累计时间V: 当前速度(km/h ) Vm: 最大速度(km/h )Va: 平均速度(km/h ) a: 加速度(m/s2)Time Now 当前时间里程、速度、加速度等都是由干簧管测量。
已知自行车轮胎的直径tl,轮子每转动一圈,安装在车轮辐条上的磁钢接近干簧管一次,干簧管闭合,送一个下降沿信号给单片机的外部中断0,产生一次中断,圈数qs加1。
两个相邻的下降沿信号的时间由单片机定时器1计时(设为ssj),那么计算累计里程S和当前速度V的公式为:S=tl*3.14*qs V=tl*3.14/ssj若速度大于28.8km/h(8m/s)则P2.4输出低电平,蜂鸣器报警,提示速度过大。
处理速度数据时同时刷新最大速度及计算Vm、平均速度Va、加速度a。
单片机定时器0定时时间为50ms,每20次刷新系统时钟及计算累计行驶时间。
【相关元器件及其简介】(1)AT89S52单片机简介AT89S52是一种低功耗、高性能CMOS 8位微控制器,具有8K 在系统可编程Flash 存储器。
使用Atmel 公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。
片上Flash允许程序存储器在系统可编程,亦适于常规编程器。
在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
AT89S52具有以下标准功能: 8k字节Flash,256字节RAM,32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。
另外,AT89S52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。
空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。
掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
(2)1602LCD液晶显示模块液晶显示模块具有体积小、功耗低、显示内容丰富等特点,现在字符型液晶显示模块已经是单片机应用设计中最常用的信息显示器件了。
本里程表使用常见的1602字符型LCD模块。
1602可以显示2行16个字符,有8位数据总线D0-D7,和RS、R/W、E三个控制端口,工作电压为5V,并且带有字符对比度调节和背光。
(3)干簧管干式舌簧管简称干簧管,是利用磁场信号来控制的一种线路开关元件。
干式舌簧管以其结构固有的特点,目前已被广泛应用到各种自动化和微型化的自动控制零件及通讯检测设备中,作为灵敏而快速的开闭及转换电路的执行工件。
在本里程表中,干簧管安装在自行车贴近辐条的支架上,磁钢安装在辐条上。
当磁钢远离干簧管时,干簧管断开,单片机外部中断0(P3.2)保持高电平。
当磁钢靠近干簧管时,干簧管闭合,送一个下降沿信号给单片机的外部中断0,产生一次中断。
【系统调试过程简述】自行车里程表的原理比较简单,我编好一个比较简单但是核心的程序(只计算里程和速度)在Keil C上仿真,经过短暂的调试就成功了,这证明我关于里程表的最核心的想法是正确的,这给了我后面的制作和调试很大的信心。
紧接着是在单片机上搭建硬件,重点是按键防抖动。
我的模式选择按钮是接到单片机的外部中断的,一开始我按照普通按钮的防抖动的方法测试,没有成功。
于是在中断服务程序的开始关闭中断,末尾再开中断,还是不行。
后来在中断服务程序的末尾加了这样一句:IE1=0;其作用就是清除中断标志。
因为即使单片机的外部中断是关闭的,但只要在中断服务程序执行期间按键抖动,中断标志又会置1,若没有清除中断标志,退出中断服务程序后又会执行一次服务程序,这样按一次按键就会执行两次中断服务程序。
我的里程表的最初版本是利用串行LED数码管显示作为显示模块的(简介请参阅附录二)。
但制成后发现体积太大,而且功耗比较高,不适合用于要求小巧、坚固、耐用的自行车里程表上。
后来改用1602LCD,里程表体积大幅度减小,经测试,背光开启时电流为45mA左右,背光关闭时为25mA左右,2500mah AA×4的电池组供电最多可达100小时,可以满足使用要求。
附录程序流程图及程序代码程序代码#include<reg52.h>#define uchar unsigned char/****************************************************************引脚定义:P20=SW1时钟设置时更改“时”,直径设置时更改十位P21=SW2 时钟设置时更改“分”的十位,直径设置时更改个位P22=SW3 时钟设置时更改“分”的个位P23=Enter确认更改设置P32=Disp 正常工作时更改显示模式********************************************************************* *******/sbit P20=P2^0;sbit P21=P2^1;sbit P22=P2^2;sbit P23=P2^3;sbit P32=P3^2;sbit RS=P3^7;sbit RW=P3^6;sbit E=P3^5;sbit busy=P1^7;/****************************************************************变量定义:i 延时变量qsls 圈数临时变量,用于判断里程显示选用m还是km作为单位qs 圈数sj 累计行驶时间,单位为秒totallc 累计里程pjsd 平均速度ssji 定时器T120ms中断次数,用于计算速度等sji 本次速度对应的20ms中断次数sjiold 上次速度对应的20ms中断次数aa 加速度sd2 当前速度mxsd 用于更新最大速度mxsd2 最大速度对应的20ms次数tc 轮胎周长*s 字符串显示子程序字符指针line 字符串显示子程序列数row 字符串显示子程序行数com 写控制字dat 显示码字gw 累计里程、当前速度、累计时间、最大速度、平均速度、加速度的个位sw 累计里程、当前速度、累计时间、最大速度、平均速度、加速度的十位bw 累计里程、当前速度、累计时间、最大速度、平均速度、加速度的百位qw 累计里程、当前速度、累计时间、最大速度、平均速度、加速度的千位ww 累计里程、累计时间的万位sww 累计里程、累计时间的十万位ssj 定时器T0 50ms中断次数,每20次sj加1cgw 当前时间(时钟)的个位csw 当前时间(时钟)的十位cbw 当前时间(时钟)的百位cqw 当前时间(时钟)的千位cww 当前时间(时钟)的万位csww 当前时间(时钟)的十万位cww2 当前时间(时钟)的辅助万位MODE 显示模式tr1 轮胎设置变量1(十位)tr2 轮胎设置变量2(个位)********************************************************************* *******/unsigned int i,qsls;unsigned long qs,sj,totallc,pjsd,ssji,sji,sjiold,aa,sd2,mxsd,mxsd2,tc;uchar*s,line,row,com,dat,gw,sw,bw,qw,ww,sww,ssj,cgw,csw,cbw,cqw,cww,csww,cww2,M ODE,tr1,tr2;/***********************************voidwait()*****************************该函数的作用是对LCD进行检测,看LCD是否处于忙的状态.当bflag=1时表示忙,此时不可以向LCD进行读写操作.而当busy=0时,表示可以向它读写数据.********************************************************************* *******/void wait(){P1=0xff;RW=1; RS=0;do{E=0;E=1;}while(busy==1);}/**************************************voiddispone()*******************************该函数的作用是向LCD写入数据并显示出来.********************************************************************* **************/void dispone(dat){P1=dat;RW=0; RS=1;E=0; E=1;wait();}/**********************************voidwrcom()*******************************该函数的作用是向LCD写入控制字.********************************************************************* *********/void wrcom(com){P1=com;RW=0; RS=0;E=0; E=1;wait();}/***************************************voidinit_LCD()*******************************该函数的作用是初始化LCD.********************************************************************* ********************/void init_LCD(){wrcom(0x01);wrcom(0x06);wrcom(0x38);wrcom(0x0c);}/****************************************voiddispmore()********************************该函数的作用是向LCD写入一串数据,并把数据串显示出来.********************************************************************* *********************/void dispmore(line,row,uchar dat[],i) //格式为dispmore(第几行,第几列,开始要显示的字符地址,显示几个字符);{uchar com;s=dat;if(line==1){com=0x80+row-1;wrcom(com);while((i--)!=0&&com<=0x8f){dispone(*s);com++;s++;}}else{com=0xc0+row-1;wrcom(com);while((i--)!=0&&com<=0xcf){dispone(*s);com++;s++;}}}/****************************************voidttimep()********************************累计行驶时间数据处理及显示子程序********************************************************************* *********************/void ttimep(){sww=sj/36000;ww=sj%36000/3600;qw=sj%3600/600;bw=sj%600/60;sw=sj%60/10;gw=sj%10;wrcom(0xc1);dispone('T');dispone('i');dispone('m');dispone('e');dispone(' ');dispone(' ');dispone(sww+0x30);dispone(':');dispone(qw+0x30);dispone(bw+0x30);dispone(':');dispone(sw+0x30);dispone(gw+0x30);}/****************************************voidtimer1()********************************T1中断服务子程序,每20ms中断一次,ssji加1,根据公式S=tc*qs和V=tc/ssj 计算累计里程和********************************************************************* *********************/void timer1() interrupt 3{ssji++;TH1=0xb1;TL1=0xdf;}/****************************************voidlcp()********************************累计里程数据处理和显示子程序,若<999m则单位为m,若>999m则单位为km ********************************************************************* *********************/void lcp(){qsls=100000/tc;if(qs>qsls){sww=qs*tc/10000000;ww=qs*tc%10000000/1000000;qw=qs*tc%1000000/100000;bw=qs*tc%10000000/10000;sw=qs*tc%10000/1000;wrcom(0x81);dispone('S');dispone(' ');dispone(' ');dispone(' ');dispone(' ');dispone(sww+0x30);dispone(ww+0x30);dispone('.');dispone(bw+0x30);dispone(sw+0x30);dispone(' ');dispone('k');dispone('m');}else{qw=qs*tc%100000/10000;bw=qs*tc%10000/1000;sw=qs*tc%1000/100;gw=qs*tc%100/10;wrcom(0x81);dispone('S');dispone(' ');dispone(' ');dispone(' ');dispone(' ');dispone(' ');dispone(' ');dispone(qw+0x30);dispone(bw+0x30);dispone(sw+0x30);dispone('.');dispone(gw+0x30);dispone(' ');dispone('m');}}/****************************************voidpjsdp()********************************平均速度数据处理及显示子程序********************************************************************* *********************/void pjsdp(){pjsd=qs*tc*36/sj;qw=pjsd%100000/10000;bw=pjsd%10000/1000;sw=pjsd%1000/100;gw=pjsd%100/10;wrcom(0x82);dispone('a');dispone(' ');dispone(' ');dispone(qw+0x30);dispone(bw+0x30);dispone('.');dispone(sw+0x30);dispone(gw+0x30);dispone(' ');dispone('k');dispone('m');dispone('/');dispone('h');}/****************************************voidsdp()********************************当前速度数据处理及显示子程序********************************************************************* *********************/void sdp(){if(sji!=0)sd2=tc*1800/sji;else sd2=0;qw=sd2%100000/10000;bw=sd2%10000/1000;sw=sd2%1000/100;gw=sd2%100/10;wrcom(0x82);dispone('V');dispone(' ');dispone(' ');dispone(' ');dispone(qw+0x30);dispone(bw+0x30);dispone('.');dispone(sw+0x30);dispone(gw+0x30);dispone(' ');dispone('k');dispone('m');dispone('/');}/****************************************voidmxsdp()********************************最大速度数据处理及显示子程序********************************************************************* *********************/void mxsdp(){if(mxsd!=0)mxsd2=tc*1800/mxsd;else mxsd2=0;qw=mxsd2%100000/10000;bw=mxsd2%10000/1000;sw=mxsd2%1000/100;gw=mxsd2%100/10;wrcom(0xc2);dispone('V');dispone('m');dispone(' ');dispone(' ');dispone(qw+0x30);dispone(bw+0x30);dispone('.');dispone(sw+0x30);dispone(gw+0x30);dispone(' ');dispone('k');dispone('m');dispone('/');dispone('h');}/****************************************voidclkp()********************************当前时间(时钟)数据处理及显示子程序********************************************************************* *********************/void clkp(){wrcom(0xc4);dispone(csww+0x30);dispone(cww+0x30);dispone(cqw+0x30);dispone(cbw+0x30);dispone(':');dispone(csw+0x30);dispone(cgw+0x30);}/****************************************voidapfz()********************************加速度数据处理及显示子程序辅助程序********************************************************************* *********************/void apfz(){wrcom(0xc2);dispone('a');wrcom(0xc6);dispone(qw+0x30);dispone(bw+0x30);dispone('.');dispone(sw+0x30);dispone(gw+0x30);dispone(' ');dispone('m');dispone('/');dispone('s');dispone('2');}/****************************************voidap()********************************加速度数据处理及显示子程序********************************************************************* *********************/void ap(){if (sjiold==sji){gw=sw=bw=qw=0;apfz();}else if(sjiold<sji){aa=360*tc*(sji-sjiold)/sji/sjiold/(sji+sjiold);qw=aa/1000;bw=aa%1000/100;sw=aa%100/10;gw=aa%10;wrcom(0xc5);dispone('-');apfz();}else if(sjiold>sji){aa=360*tc*(sjiold-sji)/sji/sjiold/(sji+sjiold);qw=aa/1000;bw=aa%1000/100;sw=aa%100/10;gw=aa%10;wrcom(0xc5);dispone(' ');apfz();}}/****************************************voidint0()********************************外部中断0(干簧管)中断服务程序********************************************************************* ********************/void int0() interrupt 0{EX0=0;qs++; //圈数+1TR1=0;sjiold=sji; //停止T1计时sji=ssji;if (mxsd!=0) //更新最大速度{if (sji<mxsd) mxsd=sji;}else mxsd=sji;TH1=0xb1; //重置T1定时常数TL1=0xdf;ssji=0;TR1=1; //T1重新开始计时switch(MODE){case 0:wrcom(0x01);lcp();ttimep();break;case 1:wrcom(0x01);sdp();mxsdp();break;case 2:wrcom(0x01);pjsdp();ap();break;case 3:wrcom(0x01);dispmore(1,5,"Time Now",8);clkp();break;default:break;}for(i=0;i<32000;i++);IE0=0;EX0=1;}/****************************************voidint1()********************************显示模式选择按钮(Disp)中断服务子程序********************************************************************* *********************/void int1() interrupt 2{EX1=0;if(++MODE>3) MODE=0;switch(MODE){case 0:wrcom(0x01);lcp();ttimep();break;case 1:wrcom(0x01);sdp();mxsdp();break;case 2:wrcom(0x01);pjsdp();ap();break;case 3:wrcom(0x01);dispmore(1,5,"Time Now",8);clkp();break;default:break;}for(i=0;i<32000;i++);IE1=0;EX1=1;}/****************************************vvoidtimer0()********************************T0中断服务子程序,主要用于计算累计行驶时间,50ms一次中断,每20次sj++,更新累计行驶时间(单位秒)********************************************************************* **********************/void timer0() interrupt 1{TH0=0x3c;TL0=0xb0;if(++ssj>19){sj++;ssj=0;cgw++;if(cgw>9){cgw=0;csw++;if(csw>5){csw=0;++cbw;if(cbw>9){cbw=0;++cqw;if(cqw>5){cqw=0;cww2++;if(cww2>23)cww2=0;csww=cww2/10;cww=cww2%10;}}}}if (MODE==0) {lcp();ttimep();}if (MODE==3) clkp();}}/****************************************voidmain()********************************主程序,初始化LCD,显示欢迎信息,更改时钟、直径设置,开中断、计时器等********************************************************************* *********************/void main(){init_LCD();dispmore(1,1,"-Digital Meter-",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++);wrcom(0x01);MODE=0;qs=0;P2=0xff;cgw=csw=cbw=cqw=cww=csww=cww2=0;wrcom(0x01);dispmore(1,5,"Set Time",8);clkp();while(1){if(P23==0){for(i=0;i<4000;i++);if(P23==0)break;}if(P20==0){for(i=0;i<4000;i++);if(P20==0){cww2++;if(cww2>23)cww2=0;csww=c ww2/10;cww=cww2%10;clkp();for(i=0;i<32000;i++);}}if(P21==0){for(i=0;i<4000;i++);if(P21==0){if(++cqw>5)cqw=0;clkp();for(i=0;i<320 00;i++);}}if(P22==0){for(i=0;i<4000;i++);if(P22==0){if(++cbw>9)cbw=0;clkp();for(i=0;i<320 00;i++);}}}for(i=0;i<30000;i++);tr1=5;tr2=5;wrcom(0x01);dispmore(1,1,"Set Bike Tire L=",16);wrcom(0xc9);dispone('c');wrcom(0xca);dispone('m');P2=0xff;wrcom(0xc6);dispone(tr1+0x30);wrcom(0xc7);dispone(tr2+0x30);while(1){if(P20==0){for(i=0;i<4000;i++);if(P20==0){if(++tr1>9)tr1=0;wrcom(0xc6);dispone(t r1+0x30);for(i=0;i<32000;i++);}}if(P21==0){for(i=0;i<4000;i++);if(P21==0){if(++tr2>9)tr2=0;wrcom(0xc7);dispone(t r2+0x30);for(i=0;i<32000;i++);}}if(P23==0){for(i=0;i<4000;i++);if(P23==0)break;}}tc=3.14*(10*tr1+tr2);TMOD=0x11; //T0和T1均是定时器方式TH0=0x3c; //置定时常数TL0=0xb0;TH1=0xb1;TL1=0xdf;IT0=1; //外部中断触发方式均是边缘触发IT1=1;IE=0x9f; //开中断IP=0x02;TR0=1; //T0和T1开始计时TR1=1;P32=1;IE0=0;wrcom(0x01);for (;;);}。