毕业论文:基于单片机的电子秒表设计-精品

更新时间:2023-09-27 20:45:01 阅读量: 综合文库 文档下载

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

福建电力职业技术学院

毕业设计报告

题 目 基于单片机的电子秒表设计

自动化工程 系 电气自动化 专业 2008 级 2 班

学 号 200802123344 姓 名 林承营 指导教师 张继伟

完成日期 2010 年 12 月

福建电力职业技术学院 毕业论文

摘 要

电子秒表在生活中的应用,它可广泛应用于对运动物体的速度、加速度的测量实验,还可用来验证牛顿第二定律、机械能守恒等物理实验,同时也适用于对时间测量精度要求较高的场合.测定短时间间隔的仪表。有机械秒表和电子秒表两类。机械秒表与机械手表相仿,但具有制动装置,可精确至百分之一秒;电子秒表用微型电池作能源,电子元件测量显示,可精确至千分之一秒。广泛应用于科学研究、体育运动及国防等方面在当今非常注重工作效率的社会环境中,定时器能给我们的工作、生活以及娱乐带来很大的方便,充分利用定时器,能有效的加强我们的工作效率。

数字电子秒表是利用数字电子技术把模拟信号转换成数字信号来完成的,具有直观、准确性高的特点。

本设计的数字电子秒表系统采用AT89C51单片机为中心器件,利用其定时器/计数器定时和记数的原理,结合显示电路、LED数码管以及外部中断电路来设计计时器。将软、硬件有机地结合起来,使得系统能够实现LED显示,显示时间为0~59秒,计时精度为0.1秒,能正确地进行计时。其中软件系统采用C语言编写程序,包括显示程序,定时中断服务,外部中断服务程序,延时程序等,并在WAVE中调试运行,硬件系统利用PROTEUS强大的功能来实现,简单且易于观察,在仿真中就可以观察到实际的工作状态。

[关键词] AT89C51单片机;电子秒表;C语言

i

福建电力职业技术学院 毕业论文

目 录

第一章 绪论.................................................................................................................. 1

1.1 秒表及其发展现状......................................................................................... 1 1.2 设计目的及意义............................................................................................. 1 1.3 设计内容......................................................................................................... 1 1.4 课题设计要求................................................................................................. 1 第二章 硬件设计.......................................................................................................... 2

2.1 总体方案的设计............................................................................................. 2 2.2 单片机的选择................................................................................................. 3

2.2.1 AT89C51单片机性能介绍 .................................................................................... 4 2.2.2 单片机最小系统 ................................................................................................... 6

2.3 显示电路的选择与设计................................................................................. 8 2.4 按键电路的选择与设计............................................................................... 11 2.5 时钟电路的选择与设计............................................................................... 12 2.6 系统总电路的设计....................................................................................... 13 第三章 软件设计........................................................................................................ 15

3.1 程序设计思想............................................................................................... 15 3.2 程序框........................................................................................................... 16 3.3 源程序及说明............................................................................................... 17 第四章 系统的仿真与调试........................................................................................ 18

4.1 硬件的调试................................................................................................... 18

4.1.1 排除元器件失效 ................................................................................................. 18 4.1.2 排除电源故障 ..................................................................................................... 18 4.1.3 联机仿真调试 ..................................................................................................... 18

4.2 软件的仿真与调试....................................................................................... 18

4.2.1 Proteus简介 ...................................................................................................... 18 4.2.2 软件的仿真 ......................................................................................................... 19 4.2.3 软件的调试 ......................................................................................................... 19

结 论............................................................................................................................ 21 致 谢............................................................................................................................ 22 参考文献...................................................................................................................... 23 附录 源程序及说明.................................................................................................... 24

- 1 -

福建电力职业技术学院 毕业论文

第一章 绪论

1.1 秒表及其发展现状

时间是日常生活、工业、医学、环境保护、化工、石油等领域最常遇到的一个物理量。测量时间的基本方法是使用秒表直接测量。其中秒表的精度是人们最关心的,这就要求它的计时最小单位足够小,显示模块的灵敏度足够高。目前人们所能测量的最小计时单位是毫秒级。

1.2 设计目的及意义

本设计要使时间的测量准确,就必须使系统有更小的计时单位和更灵敏的按键。本设计还加入了报警电路,每次清零都会报警。设计采用的元件功能较强,省去了很多复杂的电路降低了设计成本。

1.3 设计内容

本课题是基于单片机的数字秒表系统设计,其利用单片机作为系统的主要控制器,通过单片机自身的定时计数器溢出标志产生最小计时单元,经过变量的累加和判断后,通过LED数码管显示。本人的主要是运用AT89C51单片机作为主控制单元及数据处理单元。

1.4 课题设计要求

课题需要以MCS-51系列单片机为核心,结合外围电路,制作一款时间参数测量系统。

具体要求如下:

(1)提出基于单片机的时间测量系统实现方案。

(2)制作完整的硬件电路图并编写完整的源程序,实现时间参数的测量。 (3)误差要求小于1%。

1

福建电力职业技术学院 毕业论文

第二章 硬件设计

2.1 总体方案的设计

数字电子秒表具有显示直观、读取方便、精度高等优点,在计时中广泛使用。本设计用单片机组成数字电子秒表,力求结构简单、精度高为目标。

本设计利用单片机的定时器/计数器定时和记数的原理,结合集成电路芯片8051、LED数码管以及实验箱上的按键来设计计时器。将软、硬件有机地结合起来,使得系统能够正确地进行计时,数码管能够正确地显示时间。

方框图如下图:

开关 MCS-51 图2.1 数字秒表设计导向图 AT89C51 LED显示 “秒表”本设计用AT89C51设计一个3位LED数码显示,显示时间为00.0~59.9秒。增加一个“复位00.0”按键(即清零)key1,一个“暂停/开始”按键key2,一个“复位60.0”按键(用来60秒倒计时)key3,一个“倒计时”按键key4。

方框图如下图:

2

福建电力职业技术学院 毕业论文

初始化 显示 若无按键

按下4键 按下2键 判断按键 按下1/3键 倒计 复位 开始/暂停 开始倒计时 显示复位时间 开始/暂停计时 调整时限到/ 有其他输入 图2.2 按键示意图

本设计中,数码管显示的数据存放在内存单元79H-7BH中。其中79H存放分秒位数据,7AH存放秒位数据,7BH存放十秒位数据,79H和7AH单元内均为十进制BCD码,7BH单元内为六进制BCD码。由于采用软件动态扫描实现数据显示功能,显示用十/六进制BCD码数据的对应段码存放在ROM表中。显示时,先取出79H-7BH某一地址中的数据,然后查得对应的显示用段码,并从P0口输出,P2口将对应的数码管选中供电,就能显示该地址单元的数据值。

计时采用定时器T0中断完成,定时溢出中断周期为100ms,当一处中断后向CPU发出溢出中断请求,每发出一次中断请求就对0.1秒计数单元进行加一,达到10次就对秒位进行加一,依次类推,直到59.9秒重新复位。

设计中包括硬件电路的设计和系统程序的设计。其硬件电路主要有主控制器,显示电路和启动、暂停、复位、倒计时电路等。主控制器采用单片机AT89C51,显示电路采用共阴极LED数码管显示计时时间,四个按键均采用触点式按键。

2.2 单片机的选择

本课题在选取单片机时,充分借鉴了许多成形产品使用单片机的经验,并根

3

福建电力职业技术学院 毕业论文

据自己的实际情况,选择了ATMEL公司的AT89C51。

2.2.1 AT89C51单片机性能介绍

AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

1.主要特性: ?与MCS-51 兼容 ?4K字节可编程闪烁存储器 寿命:1000写/擦循环 数据保留时间:10年 ?全静态工作:0Hz-24Hz ?三级程序存储器锁定 ?128*8位内部RAM ?32可编程I/O线 ?两个16位定时器/计数器 ?5个中断源

?可编程?低功耗的闲置和掉电模式串行通道 ?片内振荡器和时钟电路 2.管脚说明: 3.VCC:供电电压。 4.GND:接地。

5.P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输

4

福建电力职业技术学院 毕业论文

入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。

6.P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。

7.P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。

8.P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。

9.P3口也可作为AT89C51的一些特殊功能口,如下表所示: 10.口管脚 备选功能 ?3.0 RXD(串行输入口) ?3.1 TXD(串行输出口) ?P3.2 /INT0(外部中断0) ?P3.3 /INT1(外部中断1) ?P3.4 T0(记时器0外部输入) ?P3.5 T1(记时器1外部输入) ?P3.6 /WR(外部数据存储器写选通) ?P3.7 /RD(外部数据存储器读选通)

P3口同时为闪烁编程和编程校验接收一些控制信号。

RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。

5

福建电力职业技术学院 毕业论文

ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。

/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。

/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。

XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。 XTAL2:来自反向振荡器的输出。

2.2.2 单片机最小系统

所谓最小系统就是指由单片机和一些基本的外围电路所组成的一个可以工作的单片机系统。一个典型的单片机最小系统一般由时钟电路、复位电路、片外RAM、片外ROM、按键、数码管、LED显示器、外部扩展接口等部分组成。

以下为AT89C51的最小系统电路图,包括晶振电路和复位电路:

6

福建电力职业技术学院 毕业论文

图 2.3 单片机最小系统

1.晶振电路

AT89C51片内有一个由高增益反相放大器构成的振荡电路。XTAL1和XTAL2分别为振荡电路的输入输出端。其振荡电路有两种组成方式:片内振荡器和片外振荡器。本设计采用是片内振荡器。

片内振荡器如图1.4(a)所示。在XTAL1和XTAL2引脚两端跨接石英晶体振荡器和两个微调电容构成振荡电路,通常C1和C2一般取30pF,晶振的频率取值在1.2MHz~12MHz之间。

7

福建电力职业技术学院 毕业论文

图 2.4晶振电路

2.复位电路

为了初始化单片机内部的某些特殊功能寄存器,必须采用复位的方式,复位后可使CPU及系统各部件处于确定的初始状态,并从初始状态开始正常工作。单片机的复位是靠外电路来实现的,在正常运行情况下,只要RST引脚上出现两个机器周期时间以上的高电平,即可引起系统复位,但如果RST引脚上持续为高电平,单片机就处于循环复位状态。复位后系统将输入/输出(1/0)端口寄存器置为FFH,堆栈指针SP置为07H, SBUF内置为不定值,其余的寄存器全部清0,内部RAM的状态不受复位的影响,在系统上电时RAM的内容是不定的。

复位操作有两种情况,即上电复位和手动(开关)复位。电路如图2.5所示:

图 2.5复位电路

2.3 显示电路的选择与设计

对于数字显示电路,通常采用液晶显示或数码管显示。对于一般的段式液晶屏,需要专门的驱动电路,而且液晶显示作为一种被动显示,可视性差,不适合远距离观看;对于具有驱动电路和单片机接口的液晶显示模块(字符或点阵),一般多采用并行接口,对单片机的接口要求较高,占用资源多;另外,AT89C51单片机本身无专门的液晶驱动接口。而数码管作为一种主动显示器件,具有亮度高、响应速度快、防潮防湿性能好、温度特性极性、价格便宜、易于购买等优点,而且有远距离视觉效果,很适合夜间或是远距离操作。因此,本设计的显示电路采用7段数码管作为显示介质。

8

福建电力职业技术学院 毕业论文

图2.6 LED数码管 数码管显示可以分为静态显示和动态显示两种。由于本设计需要采用三位数码管显示时间,如果静态显示则占用的口线多,硬件电路复杂。所以采用动态显示。

动态显示是一位一位地轮流点亮各位数码管,这种逐位点亮显示器的方式称为位扫描。通常各位数码管的段选线相应并联在一起,由一个8位的I/O口控制;各位的公共阴极位选线由另外的I/O口线控制。动态方式显示时,各数码管分时轮流选通,要使其稳定显示必须采用扫描方式,即在某一时刻只选通一位数码管,并送出相应的段码,在另一时刻选通另一位数码管,并送出相应的段码,依此规律循环,即可使各位数码管显示将要显示的字符,虽然这些字符是在不同的时刻分别显示,但由于人眼存在视觉暂留效应,只要每位显示间隔足够短就可以给人同时显示的感觉。

数码显示管分为共阳数码管和共阴数码管两种。

共阳极数码管的8个发光二极管的阳极(二极管正端)连接在一起,如图1.7(b)。通常,公共阳极接高电平(一般接电源),其它管脚接段驱动电路输出端。当某段驱动电路的输出端为低电平时,则该端所连接的字段导通并点亮,根据发光字段的不同组合可显示出各种数字或字符。此时,要求段驱动电路能吸收额定的段导通电流,还需根据外接电源及额定段导通电流来确定相应的限流电阻。

共阴极数码管的8个发光二极管的阴极(二极管负端)连接在一起,如图1.7(c),通常,公共阴极接低电平(一般接地),其它管脚接段驱动电路输出端,当某段驱动电路的输出端为高电平时,则该端所连接的字段导通并点亮,根据发光字段的不同组合可显示出各种数字或字符。此时,要求段驱动电路能提供额定的段导通电流,还需根据外接电源及额定段导通电流来确定相应的限流电阻。

9

福建电力职业技术学院 毕业论文

图2.7 (a)数码管引脚图 (b)共阳极内部结构图 (c)共阴极内部结构图

本设计采用共阴极数码显示管做显示电路,由于采用的是共阴的数码显示管,所以只要数码管的a、b、c、d、e、f、g、h引脚为高电平,那么其对应的二极管就会发光,使数码显示管显示0~9的编码见表1.1。

表2.1共阴极数码显示管字型代码

字型 0 1 2 3 4

共阴极代码

3FH 06H 5BH 4FH 66H

字型 5 6 7 8 9

共阴极代码

6DH 7DH 07H 7FH 6FH

动态显示电路由显示块、字形码驱动模块、字位驱动模块三部分组成。本系统的3位LED动态显示器接口电路。图中,3个数码管的8段段选线分别与外接上拉电阻的单片机P0口对应相连,而3个数码管的位控制端则和NPN型三极管的集电极相连接。单片机的P2.0~P2.4口则分别对应数码显示管的最低位到最高位,P2.0~P2.4口分别和五个NPN型三极管的基极相连,做三极管导通的控制端,而NPN型三极管选用9013型三极管。根据9013的资料显示:其耐压值为40V,最大功率为0.65W,最大电流为0.5A,电气性能完全满足本设计的要求。另外数码管显示是采用动态显示,所以对三极管的开关频率有一定的要求。根据电子秒表的设计计算可知动态显示的频率最高为3KHz,而9013的导通频率为150MHz,

10

福建电力职业技术学院 毕业论文

完全能满足本设计的要求,所以最终选取9013三极管为位控制开关。

由于数码管是有P0口来驱动,它内部没有上拉电阻,作为输出口时驱动能力比较弱,不能点亮数码显示管,因此P0口必须接上拉电阻来提高驱动能力。另外一位共阴数码管的驱动电流一般为20mA左右,如果电流太大容易造成数码管损坏,所以也需要根据电源的电压值来确定上拉电阻的大小。如果电阻过小,势必会形成灌电流过大,造成单片机IO的损坏,如果电阻过大,那么对拉电流没有太大的影响。电源供电电压为5V,当上拉电阻选用220Ω电阻时灌电流为22mA。不会损坏单片机的I/O口,同时也可以为数码显示管起到限制电流的保护作用。

2.4 按键电路的选择与设计

在按键电路中,我们可以在I/O口上直接接按键,或者通过I/O口设计一个键盘,然后通过键盘扫描程序判断是否有键按下等。键盘扫描电路节省I/O口,但编程有些复杂,在这里,由于我们所用的按键较少,且系统是一个小系统,有足够的I/O口可以使用,为了使程序简化,我们采用按键电路,K1:复位“00.0”,K2:开始/暂停,K3:复位“60.0”,K4:倒计时;将四个按键与P3.4、P3.5、P3.6和P3.7相接。通过扫描按键,读取按键实现四个功能的控制。

电路图如下所示:

图2.8 键盘电路图

当按键没有按下时,单片机的I/O口直接连接电源,因此需要接上拉电阻来进行限流,本设计中选取阻值为2kΩ 的电阻作为上拉电阻,根据计算可知此时的灌电流为2.5mA,查看AT89C51的资料得知次电流在安全范围内,符合安全设计要求。

按键电路中由于采用了外部中断,所以需要用到P3口的第二功能。P3口引脚的第二功能如表2.2:

表2.2 P3口引脚第二功能表

11

福建电力职业技术学院 毕业论文

P3口引脚

P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7

特殊功能

RXD(串行输入口) TXD(串行输出口)

INT0(外部中断0请求输入端) INT1(外部中断1请求输入端) T0(定时器/计数器0计数脉冲输入端) T1(定时器/计数器1计数脉冲输入端) WR(片外数据存储器写选通信号输出端) RD(片内数据存储器读选通信号输出端)

2.5 时钟电路的选择与设计

时钟电路一般由晶体震荡器、晶震控制芯片和电容组成。如图2.9所示:

图2.9 时钟电路

现在流行的串行时钟电路很多,如DS1302、DS1307、PCF8485等。这些电路的接口简单、价格低廉、使用方便,被广泛地采用。实时时钟电路DS1302是DALLAS公司的一种具有涓细电流充电能力的电路,主要特点是采用串行数据传输,可为掉电保护电源提供可编程的充电功能,并且可以关闭充电功能。采用普通32.768kHz晶振。 本设计采用DS1302。

DS1302 是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。

DS1302与CPU的连接需要三条线,即SCLK(7)、I/O(6)、RST(5)。 如图1.9所示。

12

福建电力职业技术学院 毕业论文

2.6 系统总电路的设计

系统总电路由以上设计的显示电路,按键电路,时钟电路和复位电路组成,只要将单片机与以上各部分电路合理的连接就组成了系统总电路。系统总电路图如图2.10所示。

AT89C51单片机为主电路的核心部分,各个电路均和单片机相连接,由单片机统筹和协调各个电路的运行工作。

AT89C51单片机提供了XTAL1和XTAL2两个专用引脚接晶振电路,因此只要将晶振电路接到两个专用引脚即可为单片机提供时钟脉冲,但在焊接晶振电路时要尽量使晶振电路靠近单片机,这样可以为单片机提供稳定的始终脉冲。

图2.10 系统总电路

复位电路同晶振电路,单片机设有一个专用的硬件复位接口,并设置为高电平有效。

按键电路与单片机的端口连接可以由用户自己设定,本设计中软件复位键接单片机的P3.4和P3.6,均设为低电平有效。开始/暂停键接到单片机的P3.5,同样设置为位低电平有效。

显示电路由三位数码管组成,采用动态显示方式,因此有8位段控制端和三位位控制端,八位段控制接P0口,P0.0~P0.7分别控制数码显示管的a、b、c、d、e、f、g、dp显示,AT89C51的P0口没有集成上拉电阻,高电平的驱动能力

13

福建电力职业技术学院 毕业论文

很弱,所以需要接上拉电阻来提高P0的高电平驱动能力。三位位控制则由低位到高位分别接到P2.0~P2.4口,NPN三极管9013做为位控制端的开关,当P2.0~P2.4端口任意一个端口为高电平时,与其相对应的三极管就导通,对应的数码管导通显示。

通过以上设计已经将各部分电路与单片机有机的结合到一起,硬件部分的设计以大功告成,剩下的部分就是对单片机的编程,使单片机按程序运行,实现数字电子秒表的全部功能。

14

福建电力职业技术学院 毕业论文

第三章 软件设计

3.1 程序设计思想

此次选用C语言来编程,首先要有初始化程序,通过初始化程序,将对主程序所用到的变量、常量以及各个参数和所调用的子函数定义。其次还有显示程序、按键扫描及处理程序、时钟程序和倒计时程序,系统软件流程图图如图3.1所示:

开始 系统初始化 While (1) 数码管显示选择 按键的扫描及处理 图3.1 系统软件流程图

15

福建电力职业技术学院 毕业论文

3.2 程序框

程序开始 R1=R1+1 程序初始化 开各中断 R1=?#0ahP1.0=?1 R1=#00H 关定时器0,1 调用显示子程序 R2=R2+1 R2=?#0ah P1.0=?0 R2=#00H 开定时器0,1 14H=R1 13H=R2

图3.2 主程序流程图 图3.3 加1子程序流程图

INT0入口地址 开定时器0 中断返回

图3.4 INT0中断子程序

16

福建电力职业技术学院 毕业论文

R7=#02H 置数码管个数 R0=14H 置首地址 R6=#08H 置数码管个数 A=@R0 A=@A+dptr A循环左移 P3.3清零 P3.0=C R6-1=?0 R0=R0-1 R7-1=?0 返回 图3.5数码显示流程图

3.3 源程序及说明

本节见附录A。

定时器T0入口地址 置初值 R3-1=?0 调用加一子程序 调用数码显示子程序 R3=#20H 重置循环次数 中断返回 图3.6 定时器T0子程序

17

福建电力职业技术学院 毕业论文

num++; //num逐渐自加

if(num==600) //这个数十用来送给数码管显示的,到了60.0后归零

num=0; } }

28

毕业设计报告评阅意见: 评阅教师评分: 签名: 年 月 日

福建电力职业技术学院 毕业论文

第四章 系统的仿真与调试

4.1 硬件的调试

4.1.1 排除元器件失效

造成这类错误的原因有两个:一个是元器件买来时就已坏了;另一个是由于安装错误,造成器件烧坏。可以采取检查元器件与设计要求的型号、规格和安装是否一致。在保证安装无误后,用替换方法排除错误。

4.1.2 排除电源故障

在通电前,一定要检查电源电压的幅值和极性,否则很容易造成集成块损坏。加电后检查各插件上引脚的电位,一般先检查VCC与GND之间电位,若在5V~4.8V之间属正常。若有高压,联机仿真器调试时,将会损坏仿真器等,有时会使应用系统中的集成块发热损坏。

4.1.3 联机仿真调试

联机仿真必须借助仿真开发装置、示波器、万用表等工具。这些工具是单片机开发的最基本工具。信号线是联络8031和外部器件的纽带,如果信号线连结错误或时序不对,那么都会造成对外围电路读写错误。51系列单片机的信号线大体分为读、写信号线、片选信号线、时钟信号线、外部程序存贮器读选通信号(PSEN)、地址锁存信号(ALE)、复位信号等几大类。这些信号大多属于脉冲信号,对于脉冲信号借助示波器(这里指通用示波器)用常规方法很难观测到,必须采取一定措施才能观测到。应该利用软件编程的方法来实现。例如对片选信号,运行下面的小程序就可以检测出译码片选信号是否正常。

4.2 软件的仿真与调试

4.2.1 Proteus简介

Proteus软件是英国Labcenter electronics公司出版的EDA工具软件(该软件中国总代理为广州风标电子技术有限公司)。它不仅具有其它EDA工具软件

18

福建电力职业技术学院 毕业论文

的仿真功能,还能仿真单片机及外围器件。它是目前最好的仿真单片机及外围器件的工具。虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年即将增加Cortex和DSP系列处理器,并持续增加其他系列处理器模型。在编译方面,它也支持IAR、Keil和MPLAB等多种编译器。

本设计在proteus ISIS中仿真通过,proteus软件作为一个从设计到完成的完整电子设计与仿真平台,由于其能实现电路仿真与处理器仿真的有机结合,为电子学的教学与实验提供了革命性的手段,现在已经被越来越多大学采用为电路、单片机与嵌入式系统实验室平台及创新平台。因为proteus软件功能强大,调试软硬件非常方便,所以采用proteus进行仿真。

4.2.2 软件的仿真

软件测试步骤如下: (1)打开Proteus软件。

(2)选择file菜单下的 open design..选项,找到所需的元器件,按照电路图连接后并保存。

(3)将用KEIL编译过的HEX格式程序,下载到单片机中:

右击51单片机再左击,再弹出的对话框中,选择program file文本框或单击文件图标,浏览找到所编译的程序。单击确定。

(4)单击左下角运行按钮,进行软件仿真、调试,直到出现正确的结果。

4.2.3 软件的调试

本设计的软件编译是在Keil uVision3上进行的,此软件可以生成HEX文件用于下载到单片机上工作。生成HEX文件后可以在PROTUES上进行仿真调试。

由于在用Proteus作仿真的时候,软件并不能完全符合实物的物理特性,所以在本设计的仿真方面,尤其是动态扫描方面,效果并不很成功,主要是动态扫描时,数码管出现不能完全点亮,导致只有一部分段选显示。经过调查了解到,这是由于在Proteus仿真时,软件中,数码管只有点亮和不亮两种状态,而实际做动态扫描时,数码管是处于亮与不亮之间,通过二极管的余晖及人眼的视觉延迟来实现的,所以在软件仿真时并不能完美的展示时钟时间。不过,通过放慢扫

19

福建电力职业技术学院 毕业论文

描显示的频率,可以看到略显闪烁的结果,证明软硬件的仿真成功。

20

福建电力职业技术学院 毕业论文

结 论

经过一个多月的努力,我的毕业设计在规定的时间内顺利地完成。设计制作出了基于单片机的秒表。

本系统的特点是硬件控制电路简单,以单片机AT89C51为核心,利用LED数码管进行显示。采用单片机控制可提高系统的可靠性和稳定性,缩小系统的体积,调试和维护方便。由于采用了定时器中断的方法进行计时,所以计时误差小。

虽然设计基本实现了题目要求,但系统本身还存在一些缺陷,如计时的最小单位不够小,会造成一定的误差;功能太单一,使得硬件资源有点浪费。

经过这次毕业设计,使我觉得不论从理论知识还是从实际操纵中都学到了不少知识,我想归纳起来,主要有以下四个方面:

1、经过这次毕业设计,它让我接触更多平时没有接触过的科学仪器设备、元器件以及获得相关的仪器调试经验,同时我也发现自己在这方面很多不足之处。体会到理论知识对实践有很大的指导作用,她让我知道,只有在正确的理论指引下,才能设计出合乎实际需要的硬件电路。

2、学会了高效率的查阅资料、运用工具书、利用网络查找资料。我发现,在我们所使用的书籍上有一些知识在实际应用中其实并不是十分理想,各种参数都需要自己去调整。偶而还会遇到错误的资料现象,这就要求我们应更加注重实践环节。

3、在毕业设计中,我们应当注意重点与细节的关系。

4、失败不可怕,只要不趴下,昂首向前走,希望总会有。可以说毕业设计是对大学三年所学知识的一次运用和检阅,同时对自学能力提出很高的要求,所以平时的学习脱离思考,就是严重的错误,我们学习不应该有偏科现象,各方面的知识都应该有接触,这样做才能为毕业设计打下基石。

21

福建电力职业技术学院 毕业论文

致 谢

首先感谢张继伟老师的悉心指导和教诲,张老师渊博的学识、严谨的治学态度以及为人师表的言行举止,都给我留下了深刻的印象。这也是为什么我会选择张老师作为我本科毕业论文导师的原因所在。在接下来将近三个月的毕业设计过程中,张老师在论文的选题、框架的调整、内容的删增、乃至具体格式的规范等方面,都投入了大量的精力,提出了大量很有价值的建议意见,给了我很大的启发和帮助,让我领会到了一个真正学者所应该具有的风采以及为人处事的道理,深受感动。

同时,自动化工程系的其他老师在我的学习和成长过程中也都付出了大量的精力,在此一并衷心感谢。并祝愿各位老师身体健康、工作顺利、万事如意!

最后,我要感谢的是我最亲爱的家人。在我二十多年的成长过程中,你们无时不刻无私地关怀和付出,是我独在异乡求学的最大精神支柱,也是我可以依偎的最温馨港湾。你们是我永远的牵挂和眷念!

22

福建电力职业技术学院 毕业论文

参考文献

[1] 王守中. 51单片机开发入门与典型实例[M]. 北京:人民邮电出版社,2007: P195-204,P395-416.

[2] 邹友朋. 80C51单片机实用技术[M]. 北京:北京航空航天大学出版社,2008: P161-167.

[3] 张毅刚. MCS-51单片机应用设计[M]. 哈尔滨:哈尔滨工业大学出版社,1997年,第二版: P69-71.

[4] 徐君毅等. 单片微型计算机原理及应用[M]. 上海:上海科学技术出版社,1988年,第一版: P44-57.

[5] 何立民. MCS-51单片机应用系统设计[M]. 北京:北京航空航天大学出版社,1991年,第一版: P30-46.

[6] 李华. MCS-51 系列单片机使用接口技术[M]. 北京:北京航空航天大学出版社,1993年,第一版: P80-89.

[7] 王毅. 单片机器件应用手册[M]. 北京:人民邮电出版社,1995年,第一版: P55-58.

[8] 李广弟. 单片机基础[M]. 北京:北京航空航天大学出版社,2001年,第一版: P38-42.

[9] 孙育才. MCS-51系列单片微型计算机及其应用[M]. 东南大学出版社.2009.12: P15-17.

[10] 郭天祥. 51单片机C语言教程-入门、提高、开发、拓展全攻略[M]. 电子工业出版社.2010.05: P21-23.

[11] 丁峻岭. C语言程序设计[M]. 中国铁道出版社.2009.12: P26-30.

23

福建电力职业技术学院 毕业论文

附录 源程序及说明

#include //51系列单片机头文件 #define uchar unsigned char //宏定义 #define uint unsigned int

sbit dula=P2^6; //申明U1锁存器的锁存端 sbit wela=P2^7; //申明U2锁存器的锁存端 sbit key1=P3^4; //申明四个按键的锁存端 sbit key2=P3^5; sbit key3=P3^6; sbit key4=P3^7;

uchar code table[]={ //含有0~9的数字数组 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f};

void delayms(uint); //声明延时函数 void display(uchar,uchar,uchar); //声明显示函数 void keyscan(); //声明按键函数 uchar num1,num2,bai,shi,ge; //变量声明 uint num;

void main() //主函数入口 {

TMOD=0x11; //设置TO,T1定时器

TH0=(65536-45872)/256; //装初值11.05992M晶振定时50ms数为45872 TL0=(65536-45872)%6; TH1=(65536-45872)/256; TL1=(65536-45872)%6;

EA=1; //开总中断

ET0=1; //开启定时器T0中断 ET1=1; //开启定时器T1中断

while(1) //程序停在这里等待中断的发生,这个大循环也是实现数据显示的主体 {

keyscan();

//三个数码管要选送的数据

bai=num/100; //百位 shi=(num-100*bai)/10; //十位 ge=num-100*bai-shi*10; //个位

//直接把第二只数码管的小数点烧出来

24

福建电力职业技术学院 毕业论文

dula=1; //打开段选 P0=0x80; //送段选数据 dula=0; //关闭断选

P0=0xff; //送位选数据前关闭所有显示,防止打开位选锁存时原来段选数据通过位锁存端造成混乱 wela=1; //打开位选 P0=0xfd; //送位选数据 wela=0; //关闭位选 delayms(5); //延时

display(bai,shi,ge); } }

void display(uchar bai, uchar shi,uchar ge) {

dula=1; //打开段选 P0=table[bai]; //送段选数据 dula=0; //关闭断选

P0=0xff; //送位选数据前关闭所有显示,防止打开位选锁存时原来段选数据通过位锁存端造成混乱

wela=1; //打开位选 P0=0xfe; //送位选数据 wela=0; //关闭位选 delayms(5); //延时

dula=1; //打开段选 P0=table[shi]; //送段选数据 dula=0; //关闭断选

P0=0xff;//送位选数据前关闭所有显示,防止打开位选锁存时原来段选数据通过位锁存端造成混乱

wela=1; //打开位选 P0=0xfd; //送位选数据 wela=0; //关闭位选 delayms(5); //延时

dula=1; //打开段选 P0=table[ge]; //送段选数据 dula=0; //关闭断选

P0=0xff; //送位选数据前关闭所有显示,防止打开位选锁存时原来段选数据通过位锁存端造成混乱

wela=1; //打开位选 P0=0xfb; //送位选数据 wela=0; //关闭位选 delayms(5); //延时

25

福建电力职业技术学院 毕业论文

}

void delayms(uint xms) //延时子函数 {

uint i,j;

for(i=xms;i>0;i--) //i=xms即延时约xms毫秒 for(j=110;j>0;j--); }

void keyscan() {

if(key1==0) //清零 {

delayms(10); //延时去抖 if(key1==0) {

while(!key1) //等待按下 {

TR0=0; //定时器TR0关闭 TR1=1; //定时器TR1打开 num=0; //送数据num=0 TR1=0; //定时器TR1关闭 } } }

if(key2==0) //暂停和开始 {

delayms(10); if(key2==0) {

while(!key2); TR0=0;

TR1=~TR1; //每次按下,TR1的状态时相反的 } }

if(key3==0) //使计数器显示为60.0 {

delayms(10); if(key3==0) {

while(!key3); TR0=0; TR1=1; num=600; TR1=0;

26

福建电力职业技术学院 毕业论文

} }

if(key4==0) //实现计数器的倒数功能 {

delayms(10); if(key4==0) {

while(!key4); TR1=0; TR0=1; } } }

void T0_time()interrupt 1 {

TH0=(65536-45872)/256; // TL0=(65536-45872)%6; num2++;

if(num2==2) // {

num2=0; // num1++;

if(num1==10)

num1=0;

if(num==0) //计时

num=600;

num--; //num } }

void T1_time()interrupt 3 {

TH1=(65536-45872)/256; // TL1=(65536-45872)%6; num2++;

if(num2==2) // {

num2=0; // num1++;

if(num1==10) num1=0;

重装初值 如果到了2次,说明0.1秒的时间到 然后把num2清零重新再计2次 当num自减为0时,重新为60.0,再开始倒逐渐自减 重装初值 如果到了2次,说明0.1秒的时间到 然后把num2清零重新再计2次 27

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

微信扫码分享

《毕业论文:基于单片机的电子秒表设计-精品.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档
下载全文
范文搜索
下载文档
Top