基于51单片机的自行车测速系统设计【毕业作品】

基于51单片机的自行车测速系统设计【毕业作品】


2024年2月6日发(作者:)

任务书

设计题目: 基于51单片机的自行车测速系统设计

1.设计的主要任务及目标

设计自行车测速系统,实现对速度、里程等的测量及显示,并具备超速报警功能;熟练掌握51单片机的应用;完成系统整体设计,硬件设计;完成程序编制及调试。

2.设计的基本要求和内容

(1) 查阅资料,完成开题报告;

(2) 熟悉51单片机开发工具,了解自行车测速系统相关知识;

(3) 系统整体方案设计;

(4) 硬件设计,完成系统硬件选择及相关电路绘制工作;

(5) 系统软件设计,完成程序的编制及调试;

(6)毕业设计说明书;

3.主要参考文献

[1] 李朝青. 单片机原理及接口技术. 北京: 北京航空航天大学出版社, 1994

[2] 张洪润, 张亚凡. 传感器技术与应用教程. 北京: 清华大学出版社, 2005

[3] 陈伟.基于单片机的测速仪[J].电子制作.2008(10)

4.进度安排

1

2

3

4

5

设计各阶段名称 起 止 日 期

查阅资料,学习基于单片机控制系统设计思路

2013.12-----2014.02

撰写开题报告,进行开题答辩

设计硬件电路,绘制电路原理图

系统软件设计,编写程序

修改毕业设计说明书,进行毕业答辩

2014.03-----2014.03

2014.04-----2014.04

2014.05-----2014.05

2014.05-----2014.06

基于51单片机的自行车测速系统设计

摘要:随着居民生活水平的不断提高,自行车不再仅仅是普通的运输、代步的工具,而是成为人们娱乐、休闲、锻炼的首选。因此,为了满足人们对自行车更强大功能的要求,给人们带来更多的方便,设计一种体积小、操作简单的便携式自行车里程速度器,它能自动地显示当前自行车行走的距离及运行的速度。本论文主要阐述一种基于霍尔元件的自行车里程速度器的设计。以 AT89C52 单片机为核心,A44E 霍尔传感器测转数,实现对自行车里程/速度的测量统计,采用 24C02 实现在系统掉电的时候保存里程信息,并能将自行车的里程数及速度用LED实时显示。

关键词:里程/速度,霍尔元件,AT89C52单片机,LED显示

Bicycle speed system design based on 51 single chip microcomputer

Abstract: With the continuous improvement of living standards, the bicycle is not only the

common transport, transport tool, but become entertainment, leisure, exercise of choice.

Therefore, in order to satisfy the people to the bicycle more powerful, brings more

convenience to people, the portable bicycle mileage speed sensor design of a small volume,

simple operation, it can automatically display the distance and the bicycle running speed.

This paper mainly expounds a kind of design speed bicycle mileage is based on Holzer

element. AT89C52 microcontroller as the core, measuring speed A44E Holzer sensor,

measuring the speed of the bicycle mileage / statistics, using 24C02 to realize saving

mileage information when the power is off, and the bicycle mileage and speed with the

LED real time display.

Keywords: mileage / speed, Holzer element, AT89C52 microcontroller, LED

目 录

1前言 .................................................................. 1

1.1课题产生的背景 ...................................................... 1

2总体方案设计 .......................................................... 3

2.1任务分析与实现 ...................................................... 3

2.2 硬件方案设计 ........................................................ 4

2.2.1里程/速度测量传感器的设计 ......................................... 4

2.2.2方案的确定 ........................................................ 5

2.3软件方案设计 ........................................................ 6

3系统硬件设计 .......................................................... 7

3.1概述 ................................................................ 7

3.2传感器及其测量系统 .................................................. 7

3.2.1霍尔传感器的测量原理 .............................................. 8

3.2.2集成开关型霍尔传感器 .............................................. 8

3.3单片机的选型 ....................................................... 10

3.3.1单片机概述 ....................................................... 10

3.3.2单片机中断系统 ................................................... 10

3.3.3单片机定时/计数功能 .............................................. 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 报警电路的设计 ................................................... 18

4系统软件设计 ......................................................... 19

4.1总体程序设计 ....................................................... 19

4.2中断子程序的设计 ................................................... 21

4.3数据处理子程序的设计 ............................................... 22

4.3.1里程计算子程序 ................................................... 22

4.3.2速度计算子程序 ................................................... 22

4.4显示子程序设计 ..................................................... 23

5系统调试与分析 ....................................................... 25

5.1 系统调试 ........................................................... 25

5.1.1 调试系统简介 ..................................................... 25

5.1.2 系统仿真 ......................................................... 25

5.2 调试故障及原因分析 ................................................. 26

总 结 ................................................................. 28

参考文献 ............................................................... 29

致 谢 ................................................................. 31

附录1 电路原理图 ...................................................... 32

附录2 程序清单 ........................................................ 33

1前言

单片机自20世纪70年代问世以来,作为微计算机一个很重要的分支,应用广泛,发展迅速,已对人类社会产生了巨大的影响。目前,单片机的应用已经渗透到国民经济与人们生活中的各个领域。各类导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的手机﹑充电器﹑电话﹑电风扇﹑录像机﹑摄像机﹑全自动化洗衣机的控制,以及遥控玩具﹑电子宠物等等,这些都离不开单片机。

随着居民生活水平的不断提高,自行车不再仅仅是普通的运输、代步的工具,而是成为人们娱乐、休闲、锻炼的首选。因此,人们希望自行车的功用更强大,能给人们带来更多的方便。自行车里程速度表作为自行车的一大辅助工具也正是随着这个要求而迅速发展的,其功能也逐渐从单一的里程显示发展到速度、时间显示,甚至有的还具有测量骑车人的心跳、显示骑车人热量消耗等功能。本设计采用了MCS-51系列单片机设计一种体积小、操作简单的便携式自行车里程速度器,它能自动地显示当前自行车行走的距离及运行的速度。

1.1课题产生的背景

自行车被发明及使用到现在已有两百多年的历史,这两百年间人类在不断的尝试与研发过程中,将玩具式的木马车转换到今日各式新颖休闲运动自行车,自行车发展的目的也从最早的交通代步的工具转换成休闲娱乐运动的用途。

1791年,法国人西弗拉克发明了最原始的自行车。它只有两个轮子而没有传动装置,人骑在上面,需用两脚蹬地驱车向前滚动。1801年,俄国人阿尔塔马诺夫设计出世界上第一辆用踏板踩动的自行车。1817年德国人德雷斯在自行车上装了方向舵,使其能改变行使方向。1839年,苏格兰人麦克米伦制造出木制车轮,装实心橡胶轮胎、前轮小、后轮大、坐垫较低、装有脚踏板和曲柄连杆装置,骑者可以双脚离开地面的自行车。同年,麦克米伦又将木制自行车改为铁制自行车。1867年,英国人麦迪逊设计出第一辆装有钢丝辐条的自行车。1869年德国斯图加特出现了由后轮导向和驱动的自行车,同时车上采用了滚动轴承、飞轮、脚刹、弹簧等部件。1886年英国人詹姆斯把自行车前后轮改为大小相同,并增加了链条,使其车型与现代自行

车基本相同。1887年,德国曼内斯公司将无缝钢管首先用于自行车生产。1888年英国人邓洛普用橡胶制造出内胎,用皮革制造出外胎,,以次作为自行车的充气轮胎。从此,基本奠定了现代自行车的雏形。时至今日,自行车已成为全世界人们使用最多,最简单,最实用的交通工具。

随着居民生活水平的不断提高,自行车不再仅仅是普通的运输、代步的工具,而是成为人们娱乐、休闲、锻炼的首选。因此,人们希望自行车的功用更强大,能给人们带来更多的方便。自行车里程速度表作为自行车的一大辅助工具也正是随着这个要求而迅速发展的,其功能也逐渐从单一的里程显示发展到速度、时间显示,甚至有的还具有测量骑车人的心跳、显示骑车人热量消耗等功能。本设计采用了MCS-51系列单片机设计一种体积小、操作简单的便携式自行车里程速度器,它能自动地显示当前自行车行走的距离及运行的速度。

单片微型计算机自1976年问世以来发展非常迅速,现在已成为微型计算机一个很重要的分支,在现实生活中应用越来越广泛,已经对人类产生了巨大的影响,尤其是美国Intel公司的MCS—51系列单片机,由于其集成度高、处理功能强、性能价格比高、可靠性高、系统结构简单,可以灵活的与其他芯片组成众多的测量电路用于速度、温度、深度、高度、湿度、光强等方面的测量和研究等特点,在我国现代化生活、生产中已经得到了广泛的应用,如在工业检测控制、仪器仪表、电子工业、机电一体化等众多领域取得了令人瞩目的成果。本设计利用MCS—51系列单片机扩展方便、可靠性能高、处理功能强、速度高等特点,实现对自行车里程和速度的测量[1]。

2总体方案设计

2.1任务分析与实现

设计的任务是:以通用MCS-51单片机为处理核心,用传感器将车轮的转数转换为电脉冲,进行处理后送入单片机。里程及速度的测量,是经过MCS-51的定时/计数器测出总的脉冲数和每转一圈的时间,再经过单片机的计算得出的,其结果通过LED显示器显示出来。

本系统总体思路如下:假定轮圈的周长为L,在轮圈上安装m个永久磁铁,则测得的里程值最大误差为L/m。经综合分析,本设计中取m=1。当轮子每转一圈,通过开关型霍尔元件传感器采集到一个脉冲信号,并从引脚P3.2口中断0端输入,传感器每获取一个脉冲信号即对系统提供一次计数中断。每次中断代表车轮转动一圈,中断数n轮圈的周长为L的乘积为里程值。计数器T1计算每转一圈所用的时间t,就可以计算出即时速度v。当里程键按下时,里程指示灯亮,LED切换显示当前里程,与当速度键按下时,速度指示灯亮,LED切换显示当前速度,若自行车超速,系统发出报警信号,指示灯闪烁。

要求达到的各项指标及实现方法如下:

(1) 利用霍尔传感器产生里程数的脉冲信号;

(2) 对脉冲信号进行计数;

实现:利用单片机自带的计数器T1对霍尔传感器脉冲信号进行计数。

(3) 对数据进行处理,要求用LED显示里程总数和即时速度。

实现:利用软件编程,对数据进行处理得到需要的数值。

最终实现目标:自行车里程速度器具有里程、速度测试与显示功能,采用单片机作控制,可根据车圈的不同设置常用的四种尺寸,显示电路可显示里程及速度。整个设计过程包括硬件电路的搭建,软件的编程,系统的调试,调试通过后,固化程序,脱离开发系统运行。

2.2 硬件方案设计

2.2.1里程/速度测量传感器的设计

(1)速度传感器的选用

测速是工农业生产中经常遇到的问题,学会使用单片机技术设计测速仪表具有很重要的意义。要测速,首先要解决是采样的问题。在使用模拟技术制作测速表时,常用测速发电机的方法,即将测速发电机的转轴与待测轴相连,测速发电机的电压高低反映了转速的高低。使用单片机进行测速,可以使用简单的脉冲计数法。只要转轴每旋转一周,产生一个或固定的多个脉冲,将脉冲送入单片机中进行计算,即可获得转速的信息。常用的测速元件有霍尔传感器、光电传感器和光电编码器[2]。

① 霍尔传感器

霍尔传感器是对磁敏感的传感元件,常用于信号采集的有A44E、CS3020、CS3040等,这类传感器是一个3端器件,外形与三极管相似,只要接上电源、地,即可工作,通常是集电极开路(OC门)输出,工作电压范围宽,使用非常方便。A44E的外形如图2.1所示。

A44E123

1-Vcc 2-GND 3-OUT

图2.1 A44E外形图

使用霍尔传感器获得脉冲信号,其机械结构也可以做得较为简单,只要在转轴的齿轮盘上粘上一粒磁钢,霍尔元件固定在前叉上,当车子转动时霍尔元件靠近磁钢,就有信号输出,转轴旋转时,就会不断地产生脉冲信号输出。如果在齿轮盘上粘上多粒磁钢,可以实现旋转一周,获得多个脉冲输出。在粘磁钢时要注意,霍尔传感器对磁场方向敏感,粘之前可以先手动接近一下传感器,如果没有信号输出,可以换一个方向再试。这种传感器不怕灰尘、油污,在工业现场应用广泛。

② 光电传感器

光电传感器是应用非常广泛的一种器件,有各种各样的形式,如透射式、反射式等,基本的原理就是当发射管光照射到接收管时,接收管导通,反之关断。以红外光

电传感器为例,当有物体挡在红外光电发光二极管和高灵敏度的光电晶体管之间时,传感器将会输出一个低电平,而当没有物体挡在中间时则输出为高电平,从而形成一个脉冲。该系统在自行车后轮的轴处保持着与轮子旋转切面平行的方向延伸附加一个铝盘,在这个铝盘的边沿处挖出若干个圆形过孔,把传感器的检测部分放在圆孔的圆心位置。每当铝盘随着后轮旋转的时候,传感器将向外输出若干个脉冲。

③ 光电编码器

光电编码器的工作原理与光电传感器一样,不过它已将光电传感器、电子电路、码盘等做成一个整体,只要用联轴器将光电传感器的轴与转轴相连,就能获得多种输出信号。它广泛应用于数控机床、回转台、伺服传动、机器人、雷达、军事目标测定等需要检测角度的装置和设备中。

(2) 里程测量传感器的设计

里程测量传感器的选择也有以下几种方案:使用光敏电阻对里程进行测量、利用编码器对车轮的圈数进行测量、利用霍尔传感器对里程进行测量、利用干簧管型传感器测量里程。这几种方案都是通过自行车车轮转动产生脉冲数,然后根据脉冲数计算里程。

2.2.2方案的确定

光敏电阻对光特别敏感,当白天行驶时,外界光源将导致光敏电阻发出错误信号;光敏电阻对环境的要求相当高,如果光敏或发光二极管被泥沙或灰尘所覆盖,光敏电阻就不能再进行准确测量;而编码器必须安装在车轴上,安装较为复杂;霍尔元件或干簧管不但不受天气的影响,即使被泥沙或灰尘覆盖也不会有影响,而且安装方便。所以本设计采用霍尔元件对里程与速度进行测量,既简单易行,又经济适用。

本系统的硬件系统原理框图如图2.2所示

图2.2 硬件系统原理框图

2.3软件方案设计

软件设计包括主程序、行车过程中里程和速度计算子程序、延时子程序、中断服务子程序、显示子程序等等。

中断子程序是将传感器产生的信号接入外部中断0,将经过74LS74分频后的信号接入外部中断1,利用中断和定时器对分别对里程进行累加、每转一周的时间进行测量。

数据处理子程序是将进入单片机的脉冲信号与实际要显示值之间有一定的对应关系,经过软件编程显示所需要的值。

显示子程序是将数据处理的结果送显示器显示。

本系统软件总体流程图如图2.3所示。

图2.3 软件总体流程图

3系统硬件设计

3.1概述

本章的两大主要器件就是传感器和单片机。

传感器在人们研究自然现象、规律以及生产实践活动中,起着非常重要的作用。特别是在当今,科学技术的发展使人类进入了一个信息时代,在利用信息的过程中,首先要解决的就是获取准确可靠的信息。传感器是获取自然或生产领域中信息的关键器件,是现代信息系统和各种设备不可缺少的信息采集工具。磁传感器是一种将磁学量信号转变为电信号的器件或装置。随着信息产业、工业自动化、医疗仪器等的飞速发展和计算机应用的普及,需要大量的传感器将被测或被控的非电信号转换成可与计算机兼容的电信号。作为输入信号,这就给磁传感器的快速发展提供了机遇,形成了磁传感器的产业。其中最具代表的磁传感器就是霍尔传感器,在自动检测系统中,利用霍尔传感器测转数是一种最基本的测量工作。

自从1971年微型计算机问世以来,随着大规模集成电路技术的不断进步,微型机主要向两个方向发展:一个向高速度,高性能的高档微型计算机方向发展。一个向稳定可靠,小而廉价的单片机方向发展。所谓的单片机,就是把中央处理器CPU、只读存储器ROM、定时/计数器以及I/O 接口电路等集成在一块集成电路芯片上的微型计算机,可见它的功能非常强大。单片机是本次设计的核心部件,它是信号从采集到输出的桥梁,而且肩负计算、定时、信息处理等功能。

3.2传感器及其测量系统

本次设计信号的捕获采用的是霍尔传感器,霍尔器件是一种磁传感器。用它们可以检测磁场及其变化,可在各种与磁场有关的场合中使用。霍尔器件以霍尔效应为其工作基础。 霍尔器件具有许多优点,它们的结构牢固、体积小、重量轻、寿命长、安装方便、功耗小、频率高(可达1MHz)、耐震动、不怕灰尘、油污、水汽及烟雾等的污染或腐蚀。霍尔线性器件的精度高、线性度好;霍尔开关器件无触点、无磨损、输出波形清晰、无抖动、无回跳、位置重复精度高(可达μm级)。取用了各种补偿和保护措施的霍尔器件工作温度范围宽,可达-55℃~150℃。按照霍尔器件的功能

可将它们分为:霍尔线性器件和霍尔开关器件,前者输出模拟量,后者输出数字量。

按被检测对象的性质可将它们的应用分为:直接应用和间接应用。前者是直接检测出受检测对象本身的磁场或磁特性,后者是检测受检对象上人为设置的磁场,用这个磁场来作被检测的信息的载体。通过它,将许多非电、非磁的物理量例如力、力矩、压力、应力、位置、位移、速度、加速度、角度、角速度、转数、转速以及工作状态发生变化的时间等,转变成电量来进行检测和控制[3]。

3.2.1霍尔传感器的测量原理

霍尔传感器是利用霍尔效应制成的一种磁敏传感器。在置于磁场中的导体或半导体通入电流I,若电流垂直磁场B,则在与磁场和电流都垂直的方向上会出现一个电势差Uh,这种现象称为霍尔效应[4]。利用霍尔效应制成的元件称为霍尔元件。因为它具有结构简单、频率响应宽、灵敏度高、测量线性范围大、抗干扰能力强以及体积小、使用寿命长等一系列特点,因此被广泛应用于测量、自动控制及信息处理等领域。霍尔效应原理图如图3.1所示。

ZYXLBdIbUh

图3.1 霍尔效应原理图

3.2.2集成开关型霍尔传感器

A44E集成霍尔开关由稳压器A、霍尔电势发生器(即硅霍尔片)B、差分放大器 C、施密特触发器D和OC门输出E五个基本部分组成,如图3.2(a)所示。(1)、(2)、(3)代表集成霍尔开关的三个引出端点。在电源端加电压Vcc,经稳压器稳压后加在霍尔电势发生器的两端,根据霍尔效应原理,当霍尔片处在磁场中时,在垂直于磁场的

方向通以电流,则与这二者相垂直的方向上将会产生霍尔电势差VH输出,该VH信号经放大器放大后送至施密特触发器整形,使其成为方波输送到OC门输出。当施加的磁场达到工作点时,触发器输出高电压(相对于地电位),使三极管导通,此时OC门输出端输出低电压,通常称这种状态为开。当施加的磁场达到释放点时,触发器输出低电压,三极管截止,使OC门输出高电压,这种状态为关。这样两次电压变换,使霍尔开关完成了一次开关动作[5]。工作点与释放点的差值一定,此差值称为磁滞,在此差值内,V0保持不变,因而使开关输出稳定可靠,这也就是集电成霍尔开关传感器优良特性之一。传感器主要特性是它的输出特性,即输入磁感应强度B与输出电压V0之间的关系。A44E集成霍尔开关是单稳态型,由测量数据作出的输出特性曲图

3.2(b)所示。

VO/VABCDEGND(a)(2)OUT(3)1296305(1)VCC工作点(ON)(V)释放点(OFF)101520B/mT(b)

图3.2 集成开关型霍尔传感器

测量时 在1、2两端加5V直流电压,在输出端3与1之间接一个2k的负载电阻,如图3.3所示。

图3.3 集成霍尔开关接线图

3.3单片机的选型

3.3.1单片机概述

本设计用89C52单片机设计自行车里程/速度计。AT89C52是51系列单片机的一个型号,它是ATMEL公司生产的。一个低电压,高性能CMOS 8位单片机,片内含8k bytes的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器(RAM),器件采用高密度、非易失性存储数据存储器(RAM),器件采用高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元。

AT89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,AT89C52可以按照常规方法进行编程,也可以在线编程。其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。AT89C52有PDIP、PQFP/TQFP及PLCC等三种封装形式,以适应不同产品的需求[6]。

单片机内部结构示意图如图3.4所示。

图3.4 单片机内部结构示意图

3.3.2单片机中断系统

在本次设计当中,中断部分的设计尤为重要,所谓中断,是当计算机执行正常程序时,系统中出现某些急需处理的事件,CPU暂时中止当前的程序,转去执行服务程

序,以对发生的更紧迫的事件进行处理,待处理结束后,CPU自动返回原来的程序执行。AT89C52系列单片机的系统有5个中断源,2个优先级,可实现二级中断服务嵌套。由片内特殊功能寄存器中的中断允许寄存器IE控制CPU是否响应中断请求;有中断优先级寄存器IP安排各优中断源的优先级;同一优先级内各终端同时提出中断请求时,由内部的查询逻辑确定其响应次序。

本次设计采用的外部中断方式包括外部中断0和外部中断1,它们的中断请求信号分别由单片机的INT0和INT1输入。

外部中断请求有两种信号方式:电平触发方式和脉冲触发方式。电平触发方式的中断请求是低电平有效。只要在INT0和INT1引脚上出现有效低电平时,就激活外部中断方式。脉冲触发方式的中断请求则是脉冲的负跳变有效。在这种方式下,在两个相邻机器周期内,INT0活INT1引脚电平发生变化,即在第一个机器周期内为高电平,第二个机器周期内为低电平,就激活外部中断。由此可见,在脉冲方式下,中断请求信号的高电平和低电平状态都应至少维持一个机器周期,以使CPU采样到电平状态的变化,本次设计所采用的触发方式为脉冲触发方式[7]。

3.3.3单片机定时/计数功能

AT89C52单片机定时/计数器的工作由两个特殊功能寄存器控制。TMOD用于设置其工作方式;TCON用于控制其启动和中断请求。

⑴工作方式寄存器TMOD

工作方式寄存器TMOD用于设置定时/计数器的工作方式。

GATE:门控位。GATE=0时,只要用软件使TCON中的TR0或TR1为1,就可以启动定时/计数器工作;GATE=1时,要用软件TR0或TR1为1,同时外部中断引脚INT0或INT1也为高电平时,才能启动定时/计数器工作。

C/T:定时/计数模式选择位。C/T=0为定时模式;C/T =1为计数模式。

M1M2:工作方式设置位。定时/计数器有4种工作方式,由M1M2进行设置。

本次设计TMOD为90H,即选通定时/计数器1、定时功能、工作方式1。工作方式16位定时/计数器。

⑵控制寄存器TCON

TF1(TCON.7)定时/计数器T1溢出中断请求标志位。定时/计数器T1计数溢出

时由硬件自动置TF1为1。CPU响应中断后TF1由硬件自动清零。T1工作时,CPU可随时查询TF的状态。所以,TF1可用作查询测试的标志。TF1也可以用软件置1或清零,同硬件置1或清零的效果一样。

TR1(TCON.6)定时/计数器T1运行控制位。TR1置1时时,定时/ 计数器T1开始工作;TR1置0时,定时/计数器T1停止工作。TR1由软件置1或清0。

TF0(TCON.5):定时/计数器T0溢出中断请求标志位。

TR0(TCON.4):定时/计数器T0运行控制位。

3.4其他器件的选型

3.4.1存储器

为了防止掉电时里程数据的丢失,本次设计采用的是AT24C02。

AT24C02是一个2K位串行CMOS EEPROM。内部含有256个8 位字节,ATMEL公司的先进CMOS技术实质上减少了器件的功耗。AT24C02有一个16 字节页写缓冲器,该器件通过I2C总线接口进行操作有一个专门的写保护功能。AT24C02支持I2C总线数据传送协议。数据传送是由产生串行时钟和所有起始停止信号的主器件控制的。主器件和从器件都可以作为发送器或接收器,但由主器件控制传送数据(发送或接收)的模式,通过器件地址输入端 A0、A1和A2可以实现将最多8个24C02器件连接到总线上。管脚图如图3.5所示。

图3.5 AT24C02管脚图

SCL串行时钟:AT24C02串行时钟输入管脚用于产生器件所有数据发送或接收的时钟,这是一个输入管脚。

SDA串行数据/地址:CAT24WC02双向串行数据/地址管脚用于器件所有数据的发送或接收。SDA 是一个开漏输出管脚可与其它开漏输出或集电极开路输出进行线或(wire-OR)。

WP 写保护:如果WP管脚连接到Vcc所有的内容都被写保护,只能读。当WP管

脚连接到Vss或悬空,允许器件进行正常的读/写操作。

由于AT24C02的数据线和地址线是复用的,采用串口的方式传输数据,所以只用两根线SCL和SDA与单片机传输数据。在软件编程时采用EEPROM程序包来控制AT24C02发送或接受数据。

3.4.2 74LS74芯片

在本设计中采用74LS74芯片进行分频。

74LS74是D触发器的一种,它是一个具有记忆功能的二进制信息存储器件,是构成多种时序电路的最基本逻辑单元。触发器具有两个稳定状态,即“0”和“1”,在一定的外界信号作用下,可以从一个稳定状态翻转到另一个稳定状态。由于其状态的更新发生在CP脉冲的边沿故又称之为上升沿触发的边沿触发器,D触发器的状态只取决于时针到来前D端的状态。D触发器应用很广,可用做数字信号的寄存、移位寄存、分频和波形发生器等。引脚图如图3.6所示。

图3.6 74LS74引脚图

当车轮每转一圈,霍尔传感器输出一个低电平脉冲,通过74LS74进行二分频后,定时器T1的开启时间为车轮转1圈的时间,这样就可以算出自行车的速度。分频前后对比图如图3.7所示。

图3.7 分频前后对比图

由图可见,二分频后的波形的高或低电平的时间正好是霍尔传感器开关的一个周期,霍尔传感器输出脉冲到INT0,即INT0接收到对圈数计数的脉冲。经74LS74二分频后的信号输入到INT1,内部定时计数器测得每转一圈所用的时间,通过计算即可得里程值和即时速度。

3.4.3 74LS244芯片的介绍

本次设计中的采用驱动数码管的芯片为74LS244,74LS244为三态输出的八位缓冲器和线驱动器,若单片机输出口直接接显示部分电路,则电流太小,会导致显示部分不能正常工作。所以在单片机输出口先接入驱动芯片74LS244,增大电流,使LED能够正常工作。其逻辑图如图3.8所示,可以看出74LS244由2组组成、每组由四路输入、输出构成。每组有一个控制端高或低电平决定该组数据被接通还是断开。

图3.8 74LS244逻辑图

3.5电路设计

3.5.1时钟电路设计

时钟是单片机的心脏,单片机各功能部件的运行都是以时钟频率为基准,有条不紊地一拍一拍地工作。因此,时钟频率直接影响单片机的速度,时钟电路的质量也直接影响单片机系统的稳定性。AT89C52片内由一个反相放大器构成振荡器,可以由它产生时钟。常用的时钟电路有两种方式,一种是内部时钟方式,另一种为外部时钟方式。本设计采用第一种方式。

单片机内部有一个用于构成振荡器的高增益反相放大器,该高增益反相放大器的输入为芯片引脚XTAL1,输出端为引脚XTAL2。这两个引脚跨接石英晶体振荡器和电

容,就构成一个稳定的自激振荡器。单片机内部时钟方式的振荡电路如图3.9所示。

图3.9 单片机片内振荡电路

电路中的电容C1和C2常选择为30pF左右。对外接电容的值虽然没有严格的要求,但电容的大小会影响振荡器的高低、振荡器的稳定性、起振的快速性和温度的稳定性。而外接晶体的振荡频率的大小,主要取决于单片机的工作频率范围,每一种单片机都有自己的最大工作频率,外接的晶体振荡频率不大于单片机的最大工作频率即可。此外,如果单片机有串行通信,则应该选择振荡频率除以串行通信频率可以除尽的晶体。本设计晶振采用12MHz,则计数周期为

11μS (式3.1) T=6(1210)Hz1123.5.2 复位电路的设计

AT89C52单片机的复位输入引脚RET为AT89C52提供了初始化的手段。有了它可以使程序从指定处开始执行,即从程序存储器中的0000H地址单元开始执行程序。在89C52的时钟电路工作后,只要在RET引脚上出现两个机器周期以上的高电平时,单片机内部则初始复位。只要RET保持高电平,则89C52循环复位。只有当RET由高电平变成低电平以后,89C52才从0000H地址开始执行程序。

本系统的复位电路是采用按键复位的电路,如图3.10所示,是常用复位电路之一。单片机复位通过按动按钮产生高电平复位称手动复位。上电时,刚接通电源,电容C相当于瞬间短路,+5V立即加到RET/VPD端,该高电平使89C52全机自动复位,

这就是上电复位;若运行过程中需要程序从头执行,只需按动按钮即可。按下按钮,则直接把+5V加到了RET/VPD端从而复位称为手动复位。复位后,P0到P3并行I/O口全为高电平,其它寄存器全部清零,只有SBUF寄存器状态不确定。

图3.10 按键复位电路

工作原理:上电瞬间,RC电路充电,RST引脚出现高电平,只要RST端保持10ms以上高电平,就能使单片机有效地复位。

3.5.3 显示电路的设计

单片机系统中常用的显示器有:发光二极管LED显示器、液晶LCD显示器等。在这里由于单片机测速系统比较简单,所以只考虑LED显示器和LCD显示器。LED显示器工作方式有两种静态显示方式和动态显示方式。

方案一 LED静态显示器:静态显示的特点是每个数码管的段选必须接一个8位数据线来保持显示字形码。当送入一次字形码后,显示字形可一直保持,直到送入新字形码为止。这种方法的优点是占用CPU时间少,显示便于监测和控制。缺点是硬件电路比较复杂,成本较高。LED动态显示器:动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。这样一来,就没有必要每一位数码管配一个锁存器,从而大大地简化了硬件电路。选亮数码管采用动态扫描显示。所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示,给人的印象就是一组稳定的显示数据,不会有闪烁感。动态显示的亮度比静态显示要差一些,所以在选择限流电阻时应略小于静态显示电路中的。

方案二 用液晶显示器LCD显示信息。

LCD显示器工作原理就是利用液晶的物理特性;通电时排列变得有序,使光线容易通过;不通电时排列混乱,阻止光线通过。LCD的好处有:与CRT显示器相比,LCD的优点主要包括零辐射、低功耗、散热小、体积小、图像还原精确、字符显示锐利等。

LED背光源技术能够大幅度提升电视画面的对比度和色彩表现力,同时具有节能环保等诸多优点,势必成为未来电子显示技术的发展趋势。LED技术具有非常明显的三大优势:第一,它显示的色彩更加丰富,色彩数量可超过目前CCFL冷阴极荧光管背光灯的一倍以上;第二,LED背光源亮度可以随着画面亮度进行主动调节,可节能30%以上;第三,LED背光源不含铅和汞等有毒有害物质,是真正的绿色环保光源。本课题选用LED动态显示器。

LED显示器有两种不同的形式:一种是发光二极管的阳极都连在一起的,称之为共阳极LED显示器;另一种是发光二极管的阴极都连在一起的,称之为共阴极LED显示器。如图3.11所示。本次设计采用共阴极接法。

图3.11 LED显示器

本系统采用动态扫描显示接口电路,动态显示接口电路是把所有显示器的8个笔划段a-h同名端连在一起,而每一个显示器的公共极COM各自独立地受I/O线控制。CPU向字段输出口送出字型码时,所有显示器接收到相同的字型码,但究竟是哪个显示器亮,则取决于COM端。也就是说我们可以采用分时的方法,轮流控制各个显示器的COM端,使各个显示器轮流点亮。在轮流点亮扫描过程中,每位显示器的点亮时间是极为短暂的(约1ms),由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位显示器并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感。

本设计P2.0、P2.1、P2.2、P2.3信号一起组成位选通的位选信号,P0.0~P0.7

信号一起组成段码选通的段选信号,通过软件编程,先把所要显示的数据放入存储单元,然后把数据送入段选通对应的地址,再选通某一个LED,逐步完成四个LED的显示。

3.5.4 报警电路的设计

本次报警电路采用蜂鸣器报警,当即时速度超过预定值是蜂鸣器响,指示灯闪烁,提示应该减速。报警电路图如图3.12所示。

图3.12 报警电路图

4系统软件设计

4.1总体程序设计

在主程序模块中,需要完成对各接口芯片的初始化、自行车里程和速度的初始化、中断向量的设计以及开中断、循环等待等工作。另外,在主程序模块中还需要设置启动/清除标志寄存器、里程寄存器、速度寄存器,并对它们进行初始化。然后主程序将根据各标志寄存器的内容,分别完成启动、清除、计程和计速等不同的操作。

P1.0和P1.1口分别用于显示里程状态和速度状态。P1.2、P1.3、P1.6和P1.7口分别用于设置轮圈的大小,低电平有效。P3.0是用于里程和速度切换的,低电平为显示速度,高电平为显示里程。中断0用于对轮子圈数的计数输入,轮子每转一圈,霍尔传感器输出一个低电平脉冲。将根据里程寄存器中的内容计算和判断出行驶里程数。中断1用于控制定时器T1的启/停,当输入为0时关闭定时器。此控制信号是将轮子圈数的计数经二分频后形成。这样,每次定时器T1的开启时间刚好为转一圈的时间,根据轮子的周长就可以计算出自行车的速度。其程序流程如图4.1所示。

图4.1 主程序流程图

4.2中断子程序的设计

定时中断是为满足定时或计数的需要而设置的。为此在单片机内部有两个定时/计数器,以对其中的计数结构进行计数的方法,来实现定时或计数功能。当结构发生计数溢出时,即表明定时时间或计数值已满,这时就以计数溢出信号作为中断请求,去置位一个溢出标志,作为单片机接受中断请求的标志[8]。这种中断请求是在单片机芯片内部发生的,因此无须在芯片上设置引入端。

定时/计数器控制寄存器TCON是8位寄存器,地址为88H,可以位寻址。其高4位用于定时/计数器中断控制,低4位借给外部中断,用做中断标志和触发方式选择位。本设计采用定时中断,对自行车的里程和速度进行计数。中断子程序流程图如图4.2所示。

开始

关中断

现场保护

开中断

中断处理

关中断

现场恢复

开中断

中断返回

图4.2 中断子程序流程图

4.3数据处理子程序的设计

4.3.1里程计算子程序

外中断0服务程序用于对单片机P3.2口输入的圈脉冲进行计数,为十六进制计数器[9]。60H为低位,62H为高位。每次计数一次后,对里程数据进行一次存储操作。当车轮每转一圈,通过霍尔元件将脉冲数输入单片机内,通过计数器计出脉冲数,再用乘法子程序算出里程数[10]。里程处理子程序流程图如图4.3所示。

开始

点亮里程指示灯

将车圈数转换成里程

显示里程值

返回

图4.3 里程处理子程序流程图

4.3.2速度计算子程序

外中断1服务程序用于处理轮子转动一圈后的计时数据。当标志位(00H)为1时,说明计数溢出,放入最大时间值(为#0FFH);当标志位为0时,将计数单元(TL1、TH1、6CH、6DH)的值放入68H~6BH单元[11]。通过定时器计出每转一圈所用的时间,用自行车车轮的周长除以时间就得出自行车的速度。速度处理子流程图如图4.4所示。

图4.4 速度处理子程序流程图

4.4显示子程序设计

本次设计采用动态扫描显示接口电路,动态显示接口电路是把所有显示器的8个笔划段a-h同名端连在一起,而每一个显示器的公共极COM各自独立地受I/O线控制。CPU向字段输出口送出字型码时,所有显示器接收到相同的字型码,但究竟是哪个显示器亮,则取决于COM端。也就是说我们可以采用分时的方法,轮流控制各个显示器的COM端,使各个显示器轮流点亮。在轮流点亮扫描过程中,每位显示器的点亮时间是极为短暂的(约1ms),由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位显示器并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感。

本设计P2.0、P2.1、P2.2、P2.3信号一起组成位选通的位选信号,P0.0~P0.7信号一起组成段码选通的段选信号,通过软件编程,先把所要显示的数据放入存储单元,然后把数据送入段选通对应的地址,再选通某一个LED,逐步完成四个LED的显示。

图4.5 显示子程序流程图

5系统调试与分析

5.1 系统调试

5.1.1 调试系统简介

为了减少资源的浪费和避免焊接过程中产生不必要的错误,在焊接硬件电路前对硬件电路设计的可行性和软件编程的正确性进行了仿真实验。采用的调试系统为PROTEUS。

PROTEUS系统仿真平台与开发平台是由英国Labcenter公司开发的,是目前世界上最完整的系统设计与仿真平台。PROTEUS可以实现数字电路、模拟电路及微控制系统与外设的混合电路系统的电路仿真、系统协同仿真和PCB设计等全部功能。PROTEUS软件已有20多年的历史,在全球拥有庞大的企业用户群,是目前唯一能够对各种处理器进行实时仿真、调试与测试的EDA工具,真正实现了在没有目标原形时就可以对系统进行调试与验证。PROTEUS软件包大大提高了企业的开发效率,降低了开发风险。

5.1.2 系统仿真

在构思好电路原理图和编好程序之后就要对其进行系统仿真,原理图的具体设计流程如图5.1所示。

当完成原理图布线后,利用PROTEUS ISIS编辑环境所提供的电器规则检查命令对设计进行检查,并根据系统提供的错误检查报告修改原理图。直到通过电器规则检查为止。

单片机系统的仿真是PROTEUS VSM的一大特色,同时,本仿真系统将源代码的编辑和编译整合到同一设计环境中,这样使得用户可以在设计中直接编辑代码,并且很容易地查看到用户对源程序修改后对仿真结果的影响。

源代码通过编译无误后,就可以进行仿真,在仿真过程中不断完善电路和程序的功能最后达到本次设计的目的。

图5.1 原理图设计流程图

5.2 调试故障及原因分析

在本次软件仿真和硬件搭建过程中大大小小遇到了若干问题,具体故障和解决方法如下:

(1)数码管不显示

本次设计的电路数码管采用共阴极接法,在仿真时错用共阳极数码管,导致数码管不显示。

(2)P0口显示高阻态

正常情况下P0口输出应为高(红色)低(蓝色)互换,但在实际情况下P0口出

现了高阻态(灰色),经翻阅资料查得P0口做I/O口是应接上拉电阻。在加上上拉电阻后,P0口输出正常。

(3)单片机不计数

在磁铁来回靠近霍尔传感器时单片机始终显示4个0,经检查传感器工作正常,指示灯电路工作也正常,在换了一块单片机后电路正常工作,判定原单片机已被烧毁。

总 结

该课题的主要任务是开发一个以AT89C52单片机为核心的自行车里程速度器。本设计主要分为硬件部分和软件部分,硬件部分着重考虑硬件电路的简单性,故尽可能简化硬件电路,节省线路板的空间,达到硬件电路最优化设计。软件采用汇编语言编写,采用模块化设计思想,程序可读性强。通过仿真、实验验证了系统的可行,能满足设计要求,达到设计的指标,实现对自行车里程/速度的计算功能,并用LED显示,里程与速度分别根据以下公式求得:

里程=脉冲总数×车轮周长

速度=车轮周长÷车轮转一圈所用的时间

根据此公式将最终显示出里程和速度。当车轮转动,小磁片滑过霍尔元件时,霍尔元件输出一脉冲,可根据车轮周长计算里程,选择不同的车轮周长,里程数的变化有所不同;当按下开关,显示速度时,LED会根据转速的不同显示不同的数字,当速度超过一定速度时,将启动报警系统。本系统操作简单,易于实现。硬件部分采用的器件应用较广泛,且价格低廉,如AT89C52单片机、D触发器74LS74、存储器24C02、驱动器74LS244等。这就意味着所有的器件功能比较强大、稳定。尤其是本次设计的核心元件AT89C52单片机,软件技术成熟,并具有种类齐全的支持芯片。这类微处理器既可用作控制器又适合于做数据处理,而且成本也甚是低廉。软件采用模块化设计,可读性强,方便二次开发。

本次设计电路简单、低成本,而且能够满足人们对高性能、多功能自行车的要求,可在很多里程/速度测量场合使用,具有广泛的应用前景。

通过实验证明本次设计符合设计的要求,能实现对里程、速度的显示,功能性较强,具有一定的实践意义,将会在许多场合应用。但也有一些不足存在,当显示速度时,若自行车转动太快,显示器会显示过快,应该将速度定时显示,使人们能够清楚地看出速度。

本次毕业设计使我们将大学四年所学的知识进行了汇总,在收集资料,确定方案的过程中,我学到许多知识,也弄懂了许多以前不是很清楚的问题。在做毕业设计的过程中,是我们所学知识的一次升华,把理论知识运用到了实际当中。也使我们从中得到了锻炼。

参考文献

[1] 王艳.基于AT89C52自行车里程/速度计的设计和制作[J].科技信息.2010(08)

[2] 徐科军.传感器与检测技术[M].北京:电子工业出版社,2003

[3] 张洪润, 张亚凡. 传感器技术与应用教程. 北京: 清华大学出版社, 2005

[4] 王贵悦.新编传感器实用手册[M].北京:水利电力出版社,2002:67—89

[5] 松井邦彦, 梁瑞林. 传感器应用技术141例. 北京: 科学出版社, 2006

[6] 李朝青. 单片机原理及接口技术. 北京: 北京航空航天大学出版社, 1994

[7] 张毅刚, 刘杰. MCS-51单片机原理及应用. 哈尔滨: 哈尔滨工业大学出版社,2004

[8] 蒋春林.利用单片机中断功能测速的一种方法[J].徐州师范大学学报(自然科学版).2002(01)

[9] 阎焕忠, 王长涛, 马斌. 单片机控制里程转速表的设计. 沈阳建筑工程学院学报(自然科学版),2002, 4: 145-148

[10] 刁文兴. 自行车电子里程表的初步设计. 南京工业职业技术学院学报, 2004, 6:

25-28

[11] 李劲松,朱景亮.单片机的智能测速仪的设计与实现.[J]仪表技术.2007(01)

[12] 陈伟.基于单片机的测速仪[J].电子制作.2008(10)

[13] Shuguang Ji. Electric bike sharing: simulation of user demand and system

availability. [J].Journal of Cleaner Production,2013

[14] Francesca Pagliara. Decision Support Systems and Consensus Building: The Case

Study of the First Bike Lane in the City of Napoli in Italy. [J].Procedia - Social and

Behavioral Sciences,2014,111

[15] M Shinoda. Calculation of focal positions in an optical head for parallel data

processing with a monolithic four-beam laser diode.. [J].Applied optics,2001,40(7)

[16]

New Developments in Radiation Detectors Proceedings of the 10th European

Symposium on Semiconductor Detectors (20050612/16). Application-specific architectures

of CMOS monolithic active pixel sensors. [J].Nuclear Inst. and Methods in Physics

Research, A,2006,568(1)

[17] Dong Min Kang. A transceiver module for automotive radar sensors using W‐band

monolithic microwave‐integrated circuit one‐chip set. [J].Microwave and Optical

Technology Letters,2008,50(9)

致 谢

附录1 电路原理图

附录2 程序清单

60H,61H,62H作里程计数单元,6CH,6DH作T1计数扩充单元,

68H,69H,6AH,6BH存放自行车每圈时间数,70H,71H,72H,73H

作显示BCD码存放数用,11H--15H存放被除数,16H-19H存放除数

;;;;;;

定义

;;;;;;

VSDA EQU

VSCL EQU

SLA EQU

NUMBYT EQU

MTD EQU

MRD EQU

SLAW EQU

SLAR EQU

DPHH EQU

TH1H EQU

TH1HH EQU

;;;;;;;;;;;

中断初始化

;;;;;;;;;;;

ORG 0000H

LJMP START

ORG 0003H

LJMP INTEX0

RETI

ORG 0013H

LJMP INTEX1

ORG 001BH

P1.5

P1.4

50H

51H

30H

40H

0A0H

0A1H

62H

6CH

6DH

;程序执行开始地址

;跳至START

;外中断0中断程序入口

;跳至INTEX0中断服务程序

;中断返回

;外中断1中断入口

;跳至INTEX1中断服务程序

;定时器T1中断程序入口

LJMP INTT1

ORG 0023H

RETI

;;;;;;;;;;;;;;;;;;;;

上电初始化程序

;跳至INTT1中断服务程序

;串口中断入口地址

;中断返回

;;;;;;;;;;;;;;;;;;;;

CLEARMEN:

CLEAR1:

MOV TMOD,#90H ;T1为16位外部控制定时器

SETB PX0 ;外中断0优先级为1

SETB IT0 ;外中断0用边沿触发

SETB IT1 ;外中断1用边沿触发

CLR A ;清A

MOV 20H,A ;清内存中特定单元

MOV 6CH,A ;

MOV 6DH,A ;

MOV 70H,A ;

MOV 71H,A ;

MOV 72H,A ;

MOV 73H,A ;

MOV 60H,A ;

MOV 61H,A ;

MOV 62H,A ;

MOV 63H,A ;清内存中特定单元

DEC A ;A为#0FFH

MOV 68H,A ;内存置数据#0FFH

MOV 69H,A ;内存置数据#0FFH

MOV 6AH,A ;内存置数据#0FFH

MOV 6BH,A ;内存置数据#0FFH

MOV P1, A ;P1口置1

JB P1.2,KEY1 ;根据P1.2,P1.3,P1.6,P1.7设置状态, ;在21H地址单元赋自行车周长值

MOV 21H,#0FH ;1.5米自行车周长值

LJMP CLEAR2 ;转CLEAR2

KEY1: JB P1.3,KEY2 ;

MOV 21H,#12H ; 1.8米自行车周长值

LJMP CLEAR2 ; 转CLEAR2

KEY2:

KEY3:

CLEAR2:

ERR:

;;;;;;

START

;;;;;;

START:

START1:

START2:

JB P1.6,KEY3 ;

MOV 21H,#14H ; 2.0米自行车周长值

LJMP CLEAR2 ; 转CLEAR2

JB P1.7,ERR ;四个开关都没合上,转出错处理

MOV 21H,#19H ; 2.8米自行车周长值

SETB TR1 ;开定时器T1

SETB EA ;开中断允许

SETB EX0 ;开外中断0

SETB ET1 ;开定时中断T1

SETB P3.1 ;关报警器

LCALL VIICREAD ;将EEPROM中原里程数据调入内存

RET ;子程序返回

CPL P3.1 ;轮周长设置出错,LED灯闪烁提醒

LCALL DL5S ;延时

LJMP CLEAR1 ;重新初始化,等待轮周长设置开关合上 MOV SP,#75H ;堆栈在75H开始

LCALL CLEARMEN ;上电初始化

JB P3.0,DISPLAYS ;P3.0=1,显示里程

LCALL DISPLAYV ;显示速度

SJMP START1 ;转START1循环

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;

里程计数程序,用外中断0实现,计数用60H-62H内存单元。

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;

INTEX0: PUSH ACC ; 累加器堆栈保护

PUSH PSW ;状态字堆栈保护

INC 60H ;圈加1

CLR A ;清A

CJNE A,60H,INTEX0OUT ;计数没溢出转INTEX0OUT

INC 61H ;溢出进位(61H加1)

CJNE A,61H,INTEX0OUT ;计数没溢出转INTEX0OUT

INC 62H ;溢出进位(62H加1)

INTEX0OUT: LCALL VIICWRITE ;里程数据存入EEPROM

SETB EX1 ;开外中断1

POP PSW ;状态字恢复

POP ACC ;累加器恢复

RETI

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

每转1圈时间计数处理程序,每圈时间放在68H-6BH单元中。

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

INTEX1: PUSH ACC ;堆栈保护

PUSH PSW ;关键字保护

CLR EX1 ;关外中断1

JNB 00H,INTEX11 ;溢出标志为0转INTEX11

MOV TL1,#0FFH ;溢出时计时单元赋#0FFH(显示速度为零)

MOV TH1,#0FFH ;

MOV 6CH,#0FFH ;

MOV 6DH,#0FFH ;

INTEX11: MOV 68H,TL1 ;将时间计数值移入暂存单元68H-6BH

MOV 69H,TH1 ;

MOV 6AH,6CH ;

;中断返回

MOV 6BH,6DH ;

CLR A ;清A

MOV TL1,A ;计时单元置0

MOV TH1,A

MOV 6CH,A

MOV

CLR

POP

POP

RETI

;;;;;;;;;;;;;;;;;;;;;;;

T1计数器中断服务程序。;;;;;;;;;;;;;;;;;;;;;;;

INTT1: PUSH

PUSH

INC

MOV

JNZ

INC

MOV

JNZ

SETB

INTT11: POP

POP

RETI

;;;;;;;;;;;;;;;;;;;;

里程显示控制程序

;;;;;;;;;;;;;;;;;;;;

DISPLAYS: SETB

CLR

6DH,A

00H

PSW

ACC

ACC

PSW

6CH

A,6CH

INTT11

6DH

A,6DH

INTT11

00H

PSW

ACC

P1.0

P1.1

;清溢出标志

;堆栈恢复

;中断返回

;累加器堆栈保护

;状态字堆栈保护

;6CH计时 单元加1

;移入A

;不等于0转INTT11

;进位,6DH单元加1

;移入A

; 不等于0转INTT11

;计时器溢出,置溢出标志

;恢复堆栈

;

;中断返回

;点亮LED1(显示里程状态) ;关闭速度指示灯

SETB P3.7 ;显示小数点(最小显示为0.1公里)

LCALL SSS ;将圈数转为公里数

LCALL DISPLAY ;显示公里数据

LJMP START1 ;跳回START1

;;;;;;;;;;;;;;;;;;;;

速度显示控制程序

;;;;;;;;;;;;;;;;;;;;

DISPLAYV: CLR P1.0 ;关闭LED1(里程)灯

SETB P1.1 ;点亮LED2(显示时速状态)

CLR P3.7 ;关小数点显示

LCALL VVV ;每圈时间换算为公里/小时程序

MOV A,71H ;将十位数(BCD码)值移入A

SUBB A,#04H ;与预定报警值比较

JNC WARING ;时速超过40时报警

SETB P3.1 ;关报警灯

V1: LCALL DISPLAY ;显亮一次(为了改善闪烁)

RET ;子程序返回

WARING: CLR P3.1 ; 报警灯LED3点亮(并呜叫)

AJMP V1 ;转V1退出

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

归一化EEPROM存入程序(12M时钟),存入数在50H起单元

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

VIICWRITE: ACALL WMOV9

MOV SLA,#SLAW

MOV NUMBYT,#09H

LCALL WRNBYT

RET

WMOV9: MOV 5FH,#50H

MOV R0,#MTD

MOV R1,#5FH

MOV R2,#09H

WMOV: MOV A,@R1

MOV @R0,A

INC R0

INC R1

DJNZ R2,WMOV

RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

归一化EEPROM读出程序(12M时钟),读出数放入60H-67H单元

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

VIICREAD: MOV MTD,#50H ;

MOV SLA,#SLAW

MOV NUMBYT,#01H

LCALL WRNBYT

MOV SLA,#SLAR

MOV NUMBYT,#08H

LCALL RDNBYT

ACALL RMOV8

RET

RMOV8: MOV R0,#MRD

MOV R1,#60H

MOV R2,#08H

RMOV: MOV A,@R0

MOV @R1,A

INC R0

INC R1

DJNZ R2,RMOV

RET

;;;;;;;;;;;;;;;;;;;;;;;;

I2C串行归一化存储子程序

;;;;;;;;;;;;;;;;;;;;;;;

STA: SETB VSDA

SETB VSCL

NOP

NOP

NOP

NOP

CLR

NOP

CLR

NOP

NOP

NOP

NOP

CLR

RET

STOP: CLR

SETB

NOP

NOP

NOP

NOP

SETB

NOP

NOP

NOP

NOP

CLR

VSDA

VSDA

VSCL

VSDA

VSCL

VSDA

VSDA

CLR VSCL

RET

MACK: CLR VSDA

SETB VSCL

NOP

MNACK:

CACK:

CEND:

WRBYT:

WLP:

NOP

NOP

NOP

CLR

SETB

RET

SETB

SETB

NOP

NOP

NOP

NOP

CLR

CLR

RET

SETB

SETB

CLR

MOV

JNC

SETB

CLR

RET

MOV

RLC

VSCL

VSDA

VSDA

VSCL

VSCL

VSDA

VSDA

VSCL

F0

C,VSDA

CEND

F0

VSCL

R0,#08H

A

JC WR1

AJMP WR0

WLP1: DJNZ R0,WLP

RET

WR1: SETB VSDA

WR0:

RDBYT:

RLP:

SETB

NOP

NOP

NOP

NOP

CLR

CLR

AJMP

CLR

SETB

NOP

NOP

NOP

NOP

CLR

AJMP

MOV

SETB

SETB

MOV

MOV

RLC

MOV

CLR

DJNZ

VSCL

VSCL

VSDA

WLP1

VSDA

VSCL

VSCL

WLP1

R0,#08H

VSDA

VSCL

C,VSDA

A,R2

A

R2,A

VSCL

R0,RLP

RET

WRNBYT: MOV R3,NUMBYT

LCALL STA

MOV A,SLA

LCALL WRBYT

WRDA:

RDNBYT:

RDN:

RDN1:

ACK:

LCALL CACK

JB F0,WRNBYT

MOV R1,#MTD

MOV A,@R1

LCALL WRBYT

LCALL CACK

JB F0,WRNBYT

INC R1

DJNZ R3,WRDA

LCALL STOP

RET

MOV R3,NUMBYT

LCALL STA

MOV A,SLA

LCALL WRBYT

LCALL CACK

JB F0,RDNBYT

MOV R1,#MRD

LCALL RDBYT

MOV @R1,A

DJNZ R3,ACK

LCALL MNACK

LCALL STOP

RET

LCALL MACK

INC R1

SJMP RDN1

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

显示程序。显示BCD码在70H-73H单元内,采用共阴LED数码管

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

DISPLAY: MOV R1,#70H ;显示单元首址

;扫描字 MOV R2,#0FEH

PLAY: MOV A,R2

MOV P2,A

MOV A,@R1

ANL A,#0FH

;扫描字入A

;放到端口

;取显示数据

;去掉高四位(为0)

;取段码表首址 MOV DPTR,#TAB

MOVC A,@A+DPTR ;查显示数据对应段码

MOV P0,A

LCALL DL1MS

INC R1

;段码输出

;点亮1毫秒

;指向下一显示数据地址

;取扫描字 MOV A,R2

JNB ACC.3,ENDOU ;已扫描到第四位,转ENDOUT退出

RL A ;循环左移

;放回R2 MOV R2,A

AJMP PLAY

ENDOUT: SETB P2.0

SETB P2.1

SETB P2.2

SETB P2.3

RET

;共阴段码表(可显示0-F)

;转PLAY循环

;关扫描

;关扫描

;关扫描

;关扫描

;扫描结束

TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H

DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H

DB 00H


发布者:admin,转转请注明出处:http://www.yc00.com/web/1707195003a1482904.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信