自行车里程表研究与设计毕业论文.doc
自行车里程表的研究与设计 The Research and Design of Bicycle Odometer2011 届 电气工程 系专 业 电子信息工程 学 号 学生姓名 指导教师 完成日期 2011年5月25日毕业设计成绩单学生姓名学号班级专业电子信息工程毕业设计题目自行车里程表的研究与设计指导教师姓名指导教师职称评 定 成 绩指导教师得分评阅人得分答辩小组组长得分成绩:院长(主任) 签字:年 月 日毕业设计任务书题 目自行车里程表的研究与设计学生姓名学号班级专业电子信息工程承担指导任务单位导师姓名导师职称讲师一、 主要内容单片机stc89系列实现自行车里程表的功能,可显示速度,距离以及秒表等功能。二、基本要求1单片机完成速度检测,距离计算,秒表计时,lcd屏幕驱动等工作。2、使用磁铁与霍尔传感器进行无接触式计数。3使用Keil C编程。实现相关逻辑控制。4. 电路原理图设计,protel印刷电路图设计。5. 提出系统设计框图,提出相应的解决方案。6. 需单片机与芯片,开发电路板以相关传感器,价格<200元。三、主要技术指标1、完成主要功能2. 电路原理图3. 使用说明书撰写4. 论文正文不少于1.5万字,查阅文献资料不少于15篇,其中外文文献2篇以上,翻译与课题有关的外文资料不少于3000汉字。四、应收集的资料及参考文献 C语言开发关于STC89系列相关单片机开发文档。相关传感与显示器件使用手册与接口电路五、进度计划第1 周第2周 开题报告与任务分配第3周第7 周 需求分析,概要设计第8 周第12 周 详细设计,中期考核第13 周第16 周 写论文,答辩教研室主任签字时间年 月 日毕业设计开题报告题目自行车里程表的研究与设计学生姓名学号班级专业电子信息工程(铁道信号方向)一、研究背景 我国是自行车大国,随着人们生活水平的不断提高,自行车已经不仅仅是运输、代步的工具,其辅助功能也变得越来越重要。因此,人们希望自行车的娱乐、休 闲、锻炼的功能越来越多,能带来大家更多的健康与快乐。在这个背景下,自行车里程表作为自行车的一大辅助工具迅速发展起来.科学、美观、合理设计自行车里程表有一定的实用价值.它能合理计算出速度及公里数,使运动者运动适量,达到健康运动与代步的最佳效果。随着自行车里程表的发展,其功能也逐渐从单一的里程显示发展到速度、时间显示,甚至有的还具有测量骑车人的心跳、显示骑车人热量消耗等功能,让人能清楚地知道当前的速度、时间、里程等物理量二、预期达到的目标本系统可以实现自行车在行驶过程中速度,里程数与时间的显示功能。系统元件简单,实用性强。霍尔传感器是利用霍尔效应把磁输入信号转换成电信号的器件。把开关型霍尔传感器安装在自行车贴近车轮的支架上,磁钢安装在辐条上,当磁钢靠近霍尔传感器的时候,传感器输出一个无抖动的低电平,单片机根据此信号可计算里程、速度等。本系统是由数据采集,单片机控制系统,液晶显示与键盘输入四部分构成。其中数据的采集是由霍尔传感器来完成的,其中关键的处理由单片机系统来完成,输出的信号由液晶进行显示,显示当前的行驶里程情况。以上所诉就是整个系统的总体设计思想。三、研究方案(1)毕业设计目的:设计一个可显示速度,距离以及秒表等功能的自行车里程表,具体功能如下:使用LCD进行数据显示;能实时显示当前时间;能实时显示自行车当前速度、本次行车里程、本次行车平均速度。(2)毕业设计分析:在此设计中我的主要工作对里程表所要实现的功能编程,完成软件的调试运行。本系统共分为模块:数据采集模块、单片机控制模块、键盘输入模块、液晶显示模块。信息采集模块:采用开关型霍尔传感器,霍尔传感器是利用霍尔效应把磁输入信号转换成电信号的器件。把开关型霍尔传感器安装在自行车贴近车轮的支架上,磁钢安装在辐条上,当磁钢靠近霍尔传感器的时候,传感器输出一个无抖动的低电平,单片机根据此信号可计算里程、速度等。信息处理模块:主控制电路用的是STC89C52单片机,采用定时器刷新累计行驶时间及时钟,外部中断0改变自行车车轮周长、键盘输入改变屏幕显示内容。软件框图如下:外部信号脉冲接收键盘输入数据处理显示信息定时器1中断定时器0中断外部中断0信息显示模块采用1602液晶屏可以显示2行16个字符,有8位数据总线D0-D7,与RS、R/W、E三个控制端口,工作电压为5V,并且带有字符对比度调节与背光。1602LCD,有背光,接口为兼容的普通1602,驱动方便。尺寸:屏体70*26*8mm,基板84*44mm。键盘输入模块采用的是非编码键盘中矩阵式按键结构,只简单地提供键盘的行列与矩阵,其他操作如按键的识别,决定按键的读数等都靠软件完成。四、系统开发环境硬件配置:Intel(R) Core(TM)2 Duo CPU P7350 2.00Hz 2G内存操作系统:Microsoft Windows XP Professional Version 2002 Service Pack 3开发工具:QuartusII 7.2(32-bit)、EDA/SOPC实验开发系统五、进度计划第6周第7周:开题报告与任务分配第7周第8周:需求与可行性调研第8周第9周:概要设计第10周第13周:详细设计与代码设计第14周第16周:写论文与答辩指导教师签字时 间 年月日摘要随着人们生活水平的不断提高,自行车不再仅仅是普通的运输、代步的工具,而其辅助功能也变得越来越重要。因此,人们希望自行车的娱乐、休闲、锻炼的功能越来越多,能带给大家更多的健康与快乐。自行车里程表作为自行车的一大辅助工具迅速发展起来,科学、美观、合理设计自行车里程表有一定的实用价值。它能合理计算出速度及里程数,使运动者运动适量,达到健康运动与代步的最佳效果。自行车里程表能尽可能真实地反映骑行状况,便于车手及时调整自己的举动。本设计以STC89C52单片机为主控芯片,开关型霍尔传感器测转数,1602LCD为显示终端显示自行车时速、里程等信息。本设计主要包括自行车轮脉冲采集、键盘输入与数据显示等部分,主程序用C语言编写,完成各项功能及数据的处理,通过Keil uVision2与STC-ISP来完成程序的编写与仿真下载,通过单片机开发板具体实现自行车里程表各项功能。关键词:里程/速度STC89C52LCD霍尔传感器AbstactWith the developing of peoples life, the bicycle is not only the universal tool of transportation and substitute for walking, but also its auxiliary function become more and more import. Therefore, people hope that the function of amusement, leisure and exercise of bike become more and more, and bring more health and hapyy. As one import auxiliary function of bike milestones develops quickly. The design of milestones is scientific, reasonable and beautiful, and it also has its practical value. Milestones can calculate speed and distance, reflects true exercise state, based on this exerciser can adjusts exercise strength so that it can reach the best effect of healthy exercise.This project takes STC89C52 MCU as main control chip, using switch-type Hall sensor to measure revolution, and takes 1602 LCD as terminal display which displays speed per hour, distance and so on. This project mainly includes bicycle wheel pulse acquisition, keyboard input and data shows. The main program is compiled by C language which is to complete all functions and data processing, the compiler and simulation download of program are done by Keil uVision2 and STC-ISP, and the various functions of the bicycle are realized concretely by the SCM development board.Key words: Mileage/speedSTC89C52LCDHall sensor第 49 页目录第1章绪论11.1课题背景11.2国内外研究现状11.3设计的主要任务及内容2第2章自行车里程表总体方案设计32.1任务分析与实现32.2自行车里程表硬件方案设计32.3自行车里程表软件方案设计4第3章自行车里程表硬件模块设计53.1概述53.2信息采集模块的设计53.3信息处理模块的设计53.4键盘输入模块的设计63.5信息显示模块的设计6第4章自行车程表软件程序设计74.1概述74.2自行车里程表主程序的设计74.3脉冲接收子程序的设计94.4秒表计时子程序的设计114.5速度子程序的设计144.6里程子程序的设计164.7显示子程序的设计174.8键盘输入子程序的设计194.9车轮周长设置子程序的设计22第5章系统调试与分析245.1系统调试245.2调试故障及原因分析28第6章结论与展望296.1结论296.2展望29参考文献30致谢31附录32附录A外文资料32附录B硬件原理图39附录C程序清单40第1章绪论1.1课题背景自行车被发明及使用到现在已有两百多年的历史,这两百年间人类在不断的尝试与研发过程中,将玩具式的木马车转换到今日各式新颖休闲运动自行车。我国是自行车大国,随着人们生活水平的不断提高,自行车已经不仅仅是运输、代步的工具,其辅助功能也变得越来越重要。因此,人们希望自行车的娱乐、休闲、锻炼的功能越来越多,能带来大家更多的健康与快乐。在这个背景下,自行车里程表作为自行车的一大辅助工具迅速发展起来,其功能也逐渐从单一的里程显示发展到速度、时间显示,甚至有的还具有测量骑车人的心跳、显示骑车人热量消耗等功能,让人能清楚地知道当前的速度、时间、里程等物理量。自行车里程表一般由安装于前车圈钢条上的感应磁铁、前叉上的传感器、单片机及显示模块构成。当车圈旋转时传感器捕捉到感应磁铁带来的信息,通过连接线传输至单片机,单片机对此进行处理后计算出时速、里程等信息并显示。它能够让我们比较精确的知道自己的当前速度、骑行时间、单次里程、总里程、平均速度、瞬时速度等。如佛山高明华劲电子公司的自行车里程表MS-601,能动态显示行驶里程、骑车时间、实时车速等。1.2国内外研究现状自行车走过了200多年的发展历程,自行车里程表也在不断开发与发展之中。目前,在国内里程表普遍使用在汽车与摩托上,包括厂矿企业所使用的电机车,而在自行车上使用里程表的还很少见。随着集成电路技术、电子技术突飞猛进的发展,特别是计算机技术在里程表中的广泛应用,研制数字化与智能化的自行车里程表是非常必要的。在国外自行车里程表的开发与研制生产技术已经很成熟了,比如像德国的西格玛,国内知名度最高、适用率最广的自行车里程表品牌,外形含蓄、做工精细,高中低档产品均有,功能也比较强大。还有日本的猫眼、西马诺,尤其是西马诺,其制造的飞行甲板可以实现电子里程表与自行车机械零部件的合为一体,而手不离开车把就能操作里程表的方式比起西格玛等里程表必须腾出手来按按钮的方式也是差异极大。1.3设计的主要任务及内容本文介绍的自行车里程表是以STC89C52单片机为核心,用开关型霍尔传感器将到来的脉冲信号输入到单片机进行控制与计算,再采用1602LCD液晶屏进行显示,通过键盘输入切换显示内容,直观的显示给使用者,方便地实现了智能化、高精度、高可靠性、高效率的自行车里程表的设计,并且使用方便。本文主要介绍了自行车里程表的设计思想、方案论证等内容,整体上分为硬件部分设计与软件部分设计。在第1章扼要的叙述了自行车里程表的背景、国内外研究现状以及本论文的内容。第2章介绍了自行车里程表的总体方案设计,对本课题的任务进行方案论证,包括硬件方案与软件方案;在第3章介绍了自行车里程表硬件的设计;第4章详细地阐述了自行车里程表的软件设计,包括脉冲接收子程序的设计、数据处理子程序的设计、秒表计时子程序的设计以及显示子程序的设计等等;第5章介绍了系统的调试及分析,对软件编程过程中出现的问题进行分析与修改,最终完成调试与烧写,实现了本设计的目标;最后第6章为总结与展望,介绍了本设计实现的功能,阐述本课题的现实意义,以及对未来自行车里程表技术的展望。其中最重要的软件部分,采用C语言编写,软件设计的思想主要是自顶向下,模块化设计,各个子模块逐一设计。第2章自行车里程表总体方案设计2.1任务分析与实现本设计的任务是:以STC89C52单片机为处理核心,用传感器将车轮的转数转换为电脉冲,进行处理后送入单片机。里程及速度的测量,是经过STC89C52测出总的脉冲数与每一秒所转的圈数,再经过单片机的计算得出,其结果通过1602LCD显示屏显示出来。本系统总体思路如下:假定车轮的周长为L,在车轮上安装m个磁钢,则测得的里程值最大误差为L/m。经综合分析,本设计中取m=1。车轮每转一圈,开关型霍尔传感器就会采集到一个脉冲信号,并从引脚P1.0端输入,传感器每获取一个脉冲信号代表车轮转动一圈,即圈数qs加1,圈数qs与设置的自行车车轮的周长L的乘积即为当前所走里程。同时可以从定时器TI知道在1秒内单片机收到的脉冲个数,即车轮所转的圈数,而自行车车轮周长与车轮所转圈数的乘积即为这1秒内自行车所走的距离,距离除以1秒的时间,即为瞬时速度。平均速度的计算大体上与瞬时速度一样,从计数器T1知道在t秒内车轮所转的圈数后,与自行车车轮周长相乘得到t秒内自行车所走的距离,距离除以t即为平均速度。另一个定时器T0则可以用来实现秒表的计时。最后LCD显示屏显示内容的切换可以由键盘的输入来实现,而秒表计时的开始、暂停、清零及里程的清零也可以用键盘的输入来实现。设计时,应综合考虑测速精度与系统反应时间。本设计采用的脉冲计数方法,用来计算速度具有较高的测速精度。在计算里程时取了自行车的理想状态。实际中,误差控制在几米之内,相对于整个里程来说不是很大。另外,还应尽量保证其他子模块在编程时的通用性与高效性。最终实现目标:采用单片机作控制,自行车里程表具有里程、速度与秒表计时显示功能。通过不同按键的按下切换里程、速度、秒表三者之间的显示,也可以实现秒表计时的开始、暂停、清零及里程清零的功能,方便地实现了智能化、高精度、高可靠性、高效率的自行车里程表的设计,并且使用方便。2.2自行车里程表硬件方案设计根据本设计的要求,经研究与分析,硬件部分主要分为信息采集、信息处理、键盘输入与信息显示四大模块,其中的核心是信息处理,所用芯片为STC89C52单片机。系统硬件框图如图2-1所示:外部信号信息采集STC89C52显示信息键盘输入图2-1系统硬件框图2.3自行车里程表软件方案设计通过软件控制单片机的功能是单片机的主要特点与优点,程序的设计要考虑合理性与可读性,遵循模块化设计的原则,采用自顶向下的设计方法。模块化设计使程序的可读性好、修改及完善方便。软件设计包括显示子程序、数据处理子程序(分为里程子程序、速度子程序)、秒表计时子程序、脉冲接收子程序等等。显示子程序是通过编程将数据处理的结果送给显示器显示。数据处理子程序是将得到的车轮所转的圈数与实际要显示值之间有一定的对应关系,经过软件编程显示所需要的值。秒表计时子程序是采用计数器T0通过编程实现秒表计时工作。脉冲接收子程序是通过编程实现脉冲的计数,即对车轮所转的圈数计数。系统软件框图如图2-2所示:外部信号脉冲接收键盘输入数据处理显示信息定时器1中断定时器0中断外部中断0图2-2系统软件框图第3章自行车里程表硬件模块设计3.1概述硬件模块的设计是自行车里程表的基础部分,主要对信息采集、信息处理、键盘输入与信息显示四大模块所需要的元器件进行了分析与设计。其中信息采集模块所需要的传感器是获取自然或生产领域中信息的关键器件,是现代信息系统与各种设备不可缺少的信息采集工具。而本设计中最为核心的就是对信息的处理。3.2信息采集模块的设计使用单片机进行测速、计算里程,可以使用简单的脉冲计数法。只要转轴每旋转一周,产生一个或固定的多个脉冲,将脉冲送入单片机中进行计算,即可获得转速与里程的信息。常用的脉冲接收元件有霍尔传感器、光敏电阻与光电编码器。其中光敏电阻对光特别敏感,当白天行驶时,外界光源将导致光电传感器发出错误信号;光敏电阻对环境的要求相当高,如果光敏或发光二极管被泥沙或灰尘所覆盖,光敏电阻就不能再进行准确测量;而编码器必须安装在车轴上,安装较为复杂;由霍尔元件加整形电路构成的霍尔开关系统,具有输出响应快,数字脉冲性能好,安装方便,性能可靠,不受光线、泥水等因素影响,价格便宜的优点。所以本设计采用霍尔元件对里程与速度进行测量,既简单易行,又经济适用。使用霍尔传感器获得脉冲信号,其机械结构也可以做得较为简单,只要在转轴的齿轮盘上粘上一粒磁钢,霍尔元件固定在前叉上,当车子转动时霍尔元件靠近磁钢,就有信号输出,转轴旋转时,就会不断地产生脉冲信号输出。如果在齿轮盘上粘上多粒磁钢,可以实现旋转一周,获得多个脉冲输出。3.3信息处理模块的设计信息处理模块中用到的单片机是本次设计的核心部件,它是信号从采集到输出的桥梁,而且包括计算、计时、信息处理等功能。本设计采用的单片机是STC89C52,内置8位中央处理单元、512字节内部数据存储器RAM、8K片内程序存储器(ROM)与2K字节EEPROM存储空间,32个双向输入/输出(I/O)口、3个16位定时/计数器与5个两级中断结构,一个全双工串行通信口,片内时钟振荡电路。设计中用到了两个16为定时器(T1与T0)与一个外部中断,其中定时器主要的工作是实现秒表的计时与速度的计算,而外部中断则是做自行车车轮周长设置的工作。3.4键盘输入模块的设计键盘在单片机应用系统中,实现输入数据、传送命令的功能,是人工干预的主要手段。键盘分两大类:编码键盘与非编码键盘。本设计采用的是非编码键盘中矩阵式按键结构,只简单地提供键盘的行列与矩阵,其他操作如键的识别,决定按键的读数等仅靠软件完成,故硬件较为简单。键盘是单片机系统设计中一种主要的信息输入接口,合理的设计,不仅可以节省系统的设计成本,更可使仪器设备的操作变得更为简单、方便,很大程度上提高系统综合性能。设计中键盘输入模块所要做的工作主要就是切换显示内容与设置自行车车轮周长,还有秒表的开始、暂停、清零以及里程的清零。3.5信息显示模块的设计常用的显示元件有数码管与1602LCD液晶显示屏。用数码管显示信息,利用8个数码管显示数字信息,并用发光二极管分别指示显示量得内容与单位,例如数码管显示7.3,并且指示速度的发光二极管亮,它表示当前的速度为7.3千米/小时;用LCD液晶显示屏显示信息,在一屏上同时显示内容、数字、单位等,例如液晶屏显示:V =7.3km/h,它表示当前的平均速度为7.3千米/小时。用数码管显示信息所需电流比较大,这对用电池供电的系统来说是不堪负重的,而由1602LCD字符型液晶组成的显示系统具有显示内容多,人机界面友好,更省电等特点,因此本设计采用1602LCD液晶显示屏,能够实时的显示里程速度等信息。第4章自行车程表软件程序设计4.1概述软件部分设计是毕业设计中最核心与最为主要的。所谓软件设计就是把软件需求变换成软件的具体设计方案(即模块结构)的过程。模块化结构设计即是根据要求与硬件设计的结构,将整个系统的功能分成许多小的功能模块,再根据这些小的功能模块进行程序编写的过程。这样的设计方法,使得系统的整个功能与各部分的功能趋于明朗化。当系统出现问题,就可以根据功能设置找出问题的根源,从而更快地解决问题。所以说,在整个设计过程中,软件设计必须与硬件设计紧密地结合在一起。基于霍尔传感器自行车里程表的软件设计包括脉冲接收子程序、速度子程序、里程子程序、LCD显示子程序、秒表计时子程序等几大部分。由于要实现很多功能,所以采用模块化设计,下面就其主要部分分别加以分析。4.2自行车里程表主程序的设计本设计采用模块化设计,各个子模块均设计好之后,在主程序模块中调用这些子模块就行了,首先需要完成对LCD的初始化、定时器的初始化、开中断以及显示欢迎信息的工作。上电完成上述工作之后,首先按下按键切换显示内容到周长设置这一屏后设置车轮周长,如果没有设置周长的值,接收到脉冲的话里程速度等也无法计算。其次根据P1.0口(P1.0口用于接收脉冲)的高低电平变化来判定是否接收脉冲(高电平为接收,低电平不接收)。若接收的话,即P1.0口为高电平,开始计算总里程与瞬时速度,计时里程与平均速度的计算首先需要判断秒表是否开始计时,在这里设置一变量z,开始计时时令z为1,不计时时令z为0,则当z的值为1的时候计算计时里程与平均速度,而当z的值为0的时候则不计算计时里程与平均速度,通过按键的按下来切换显示里程速度等信息;若不接收的话,即P1.0口为低电平,则判断是否有键按下,有键按下的话切换显示内容,相反则不切换。秒表计时的开始、暂停、清零以及里程的清零,还有周长的设置都是通过按键的按下来实现的。其流程图如图4-1所示:开始LCD、定时器初始化开中断显示欢迎信息键盘输入?键盘扫描YN脉冲接收?NY数据处理结束显示信息图4-1主程序流程图程序如下:main() InitLcd(); /初始化LCD DelayMs(15); /延时保证信号稳定 Init_Timer0(); Init_Timer1();/定时器初始化 EA=1; EX0=1; /外部中断0开 IT0=1; /外部中断0触发,为边沿触发方式(下降沿有效) show_welcome(); /显示欢迎信息 while(1)pulse_recieve(); /脉冲接收 distance(); /执行里程模块key=keyscan(); /调用键盘扫描,keyinput();/键盘输入 choosed();/执行显示选择模块4.3脉冲接收子程序的设计本设计中最重要的部分就是脉冲接收子程序的设计,即信息采集部分的设计。具体的设计思路是:待测信号经开关型霍尔传感器处理后输出到单片机的P1.0引脚,单片机通过检测P1.0引脚电平来决定是否对脉冲信号计数。当P1.0引脚为低电平的时候,即IR的值为0时脉冲接收指示灯亮,脉冲接收参数sj1加1,持续接收脉冲的话则不计数;当引脚P1.0为高电平的时候,即IR的值为1时脉冲接收指示灯灭,无脉冲接收参数sj2加1,持续不接收脉冲的话则不计数。经过一次脉冲的接收与不接收则表示自行车车轮转了一圈,圈数变量qs(用于计算总里程)与qs1(用于计算瞬时速度)加1,然后判断秒表是否开始计时,开始计时即z的值为1,圈数变量qs2(用于计算平均速度)与qs3(用于计算计时里程)加1,相反则置qs2、qs3为0。程序如下:void pulse_recieve(void)LED1=IR; /脉冲接收指示灯if(IR=0) /开始接收脉冲sj1+; /接收脉冲判断参数if(sj1=2)sj1=0; /一直接收的话置sj1为0else /脉冲不接收sj2+; /脉冲不接收判断参数if(sj2=2)sj2=0;if(sj1&sj2) /脉冲一收一不收,车轮转一圈 sj1=0; sj2=0; qs+; /用于计算总里程 qs1+; /用于计算瞬时速度 if(z=1) /判断秒表是否开始计时,秒表开始计时时令z=1qs2+; /用于计算平均速度qs3+; /用于计算秒表计时里程 else qs2=0; qs3=0;流程图如4-2所示:开始P1.0=0?Y脉冲接收无脉冲接收N判断参数sj1加1判断参数sj2加1sj1=2?sj2=2?sj1=0sj2=0sj1&sj2=1?NYYsj1、sj2置零圈数变量加1结束NY图4-2脉冲接收子程序流程图4.4秒表计时子程序的设计在秒表计时子程序的设计中,使用单片机的定时器T0,50ms计数一次,其初值X经计算得出,X=3CB0H, 即应将3CH送入TH0中,B0送入TL0中。程序如下:void Init_Timer0(void) TMOD |=0x01; /使用模式0,16位定时器 TH0=0x3c; TL0=0xb0; EA=1; /总中断打开 ET0=1; /定时器中断打开void Timer0_isr(void) interrupt 1 using 1TH0=0x3c; /重新赋值TL0=0xb0;count+; if (count=20) /20x50ms=1S,大致延时时间 count=0; second+; /秒加1if(second=60) second=0; /60秒后秒置零 minute+; /分加1 if(minute=60) minute=0; /60分钟后分置零 hour+; /时加1 if(hour=24) hour=0; /24小时后时置零 hour_shiwei=hour/10; /小时十位显示值处理 hour_gewei=hour%10; /小时各位显示值处理 fen_shiwei=minute/10; /分十位显示值处理 fen_gewei=minute%10; /分个位显示值处理 miao_shiwei=second/10; /秒十位显示值处理 miao_gewei=second%10; /秒个位显示处理流程图如图4-3所示:开中断分置零YYYNNNN秒加1,秒=60?时加1,时=60?秒置0分加1,分=60?Y时置零每20ms中断次数加1,计数值为50?计数值置0开始结束图4-3秒表计时子程序流程图4.5速度子程序的设计在速度子程序的设计中,使用单片机的定时器T1,10ms计数一次,其初值X经计算得出,X=D8F0,即应将D8H送入TH0中,F0送入TL0中。具体的设计思路是:定时器T1每10ms中断一次,当中断次数达到100,即时间刚好为1秒的时候,调用脉冲接收子程序中当前的圈数变量,然后与设置好的自行车车轮周长相乘之后,再除以1s即为瞬时速度,每次计算完之后将此圈数变量置0。而平均速度的计算则需要设置一变量t,每当中断次数达到100即时间为1秒的时候t加1,调用脉冲接收子程序中的圈数变量与自行车车轮周长相乘之后,再除以t即为在t秒内的平均速度。程序如下:void Init_Timer1(void) TMOD |=0x10; /使用模式1,16位定时器 TH1=0xd8; TL1=0xf0; EA=1; /总中断打开 ET1=1; /定时器1中断打开 TR1=1; void Timer1_isr(void) interrupt 3 using 1 TH1=0xd8; /重新赋值 TL1=0xf0; count1+; if (count1=100) /100x10ms=1s,大致延时时间 count1=0; dis1=qs1*L; qs1=0; Vt=dis1*36/1; sssd_shiwei=Vt/10000; sssd_gewei=Vt%10000/1000; sssd_fenwei=Vt%1000/100; sssd_shifenwei=Vt%100/10; if(qs2!=0) t+; t1+; dis2=qs2*L; V=dis2*36/t; if(t1=5) t1=0;qs2=0; pjsd_shiwei=V/10000; pjsd_gewei=V%10000/1000; pjsd_fenwei=V%1000/100; pjsd_shifenwei=V%100/10; else t=0; dis2=0; qs2=0; V=0; pjsd_shiwei=0; pjsd_gewei=0; pjsd_fenwei=0; pjsd_shifenwei=0;流程图如图4-4所示:开中断每10ms中断次数加1,计数为100?Y计数值置0调用变量qs1计算瞬时速度秒表计时?开始YN计算平均速度结束图4-4 速度子程序流程图4.6里程子程序的设计调用脉冲接收子程序中一段时间内自行车车轮所转的圈数qs,qs与设置好的车轮周长L的乘积即为所行使的里程。设置一个变量z,在秒表开始计时按键按下的同时(此时给z置1)计算在秒表计时这段时间内的里程(即秒表里程),在秒表暂停计时的时候不计算秒表里程。程序如下:void distance(void) dis=qs*L; ZLc_qianwei=dis/100000; ZLc_baiwei=dis%100000/10000; ZLc_shiwei=dis%10000/1000; ZLc_gewei=dis%1000/100; ZLc_fenwei=dis%100/10; if(z=1) dis3=qs3*L; Lc_qianwei=dis3/100000; Lc_baiwei=dis3%100000/10000; Lc_shiwei=dis3%10000/1000; Lc_gewei=dis3%1000/100; Lc_fenwei=dis3%100/10;流程图如图4-5所示:调用变量qs计算总里程秒表计时?Y调用变量qs3计算总计时里程N开始结束图4-5里程子程序流程图4.7显示子程序的设计显示子程序的设计也比较重要了,之前的一些子程序的设计都是针对一些数据做处理,而这些经计算后得出的数据却需要通过显示子程序显示出来。本设计采用的是1602LCD液晶显示屏,显示容量为16×2个字符,共16个引脚,带背光。1602液晶模块内部的控制器共有11条控制指令,其读写操作、屏幕与光标的操作都是通过指令编程来实现的。液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符,首行第一个字符的地址是00H,第二行第一个字符的地址是40H,那么是否直接写入40H就可以将光标定位在第二行第一个字符的位置呢?这样不行,因为写入显示地址时要求最高位D7恒定为高电平1,所以实际写入的数据应该是01000000B(40H)+10000000B(80H)=11000000B(C0H)。部分程序如下:void WriteCommand(unsigned char c) /写入命令函数 DelayMs(2); /操作前短暂延时,保证信号