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

发布于:2021-06-18 15:54:08

福建电力职业技术学院 毕业设计报告
题 目 基于单片机的电子秒表设计

自动化工程 系 电气自动化

专业 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,电气性能完全满足本设计的要求。另外数 码管显示是采用动态显示, 所以对三极管的开*德视幸欢ǖ囊蟆8莸缱用 表的设计计算可知动态显示的频率最高为 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=?#0ah hhhh ? #AH R1=#00H

P1.0=?1

关定时器 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 置首地址

定时器 T0 入口地址

R6=#08H 置数码管个数 A=@R0 A=@A+dptr

置初值

R3-1=?0 A 循环左 移 P3.3 清零 P3.0=C P3.1 置位 R6-1=?0

调用加一子程序

调用数码显示子程序 R3=#20H 重置循环次数

R0=R0-1 中断返回 R7-1=?0

返回 图 3.5 数码显示流程图 图 3.6 定时器 T0 子程序

3.3 源程序及说明
本节见附录 A。

17

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

第四章 系统的仿真与调试
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<reg51.h> //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)%256; TH1=(65536-45872)/256; TL1=(65536-45872)%256; 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)%256; num2++; if(num2==2) { num2=0; num1++; if(num1==10) num1=0; if(num==0) 计时 num=600; num--; } }

//实现计数器的倒数功能

//重装初值

//如果到了 2 次,说明 0.1 秒的时间到 //然后把 num2 清零重新再计 2 次

//当 num 自减为 0 时,重新为 60.0,再开始倒

//num 逐渐自减

void T1_time()interrupt 3 { TH1=(65536-45872)/256; //重装初值 TL1=(65536-45872)%256; num2++; if(num2==2) //如果到了 2 次,说明 0.1 秒的时间到 { num2=0; //然后把 num2 清零重新再计 2 次 num1++; if(num1==10) num1=0;

27

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

num++; if(num==600) 归零 num=0; } }

//num 逐渐自加 //这个数十用来送给数码管显示的,到了 60.0 后

28

毕业设计报告评阅意见:

评阅教师评分:

签名:








相关推荐

最新更新

猜你喜欢