课程设计(论文)-基于单片机的多功能电子表设计.doc
《课程设计(论文)-基于单片机的多功能电子表设计.doc》由会员分享,可在线阅读,更多相关《课程设计(论文)-基于单片机的多功能电子表设计.doc(39页珍藏版)》请在三一文库上搜索。
1、课程设计(论文) 题 目 名 称 基于单片机的多功能电子表设计 课 程 名 称 单片机原理及在电气测控学科中的应用 学 生 姓 名 学 号 系 、专 业 电气工程系 08 级电气测控类 指 导 教 师 2010 年 06 月 30 日 1 摘摘 要要 单片计算机即单片微型计算机。由 RAM ,ROM,CPU 构成,定时,计数和多种接 口于一体的微控制器。它体积小,成本低,功能强,广泛应用于智能产业和工业自动 化上。而 51 系列单片机是各单片机中最为典型和最有代表性的一种。这次课程设计 通过对它的学习,应用,从而达到学习、设计、开发软、硬的能力。 本设计是通过单片机设计一个多功能电子表,要求不
2、仅具有电子时钟的功能还具 有闹铃、设定闹铃时间、整点报时、生日提醒功能,而且能够预置生日时间 关关键键字:字:单片机;多功能电子表;跑表;数码管显示。 2 目 录 摘 要 4 1 引言 .7 1.1 多功能电子表简介 .7 1.2 多功能电子表的基本特点 .7 1.3 多功能电子表的原理 .7 2 单片机识的相关知识 .7 2.1 单片机简介 7 2.2 单片机的发展史 8 2.3 单片机的特点 .9 2.4 89C51 单片机介绍 9 3 控制系统的硬件设计 12 3.1 单片机型号的选择 12 3.2 数码管显示工作原理 12 3.3 按键电路、复位键设计 14 3.4 系统电路原理图 1
3、4 4 控制系统的软件设计 15 4.1 程序设计 15 4.2 程序流程图 15 4.3 仿真图 20 4.4 仿真结果分析 22 总结 .23 附录 .24 A2424 3 附 B28 参考文献 .29 致谢 4 引言引言 1957 年,Ventura 发明了世界上第一个电子表,从而奠定了电子表的基础,电子 表开始迅速发展起来。现代的电子表是基于单片机的一种计时工具,采用延时程序 产生一定的时间中断,用于一秒的定义,通过计数方式进行满六十秒分钟进一,满 六十分小时进一,满二十四小时小时清零。从而达到计时的功能,是人民日常生活 不可缺少的工具。 现在高精度的计时工具大多数都使用了石英晶体振荡
4、器,由于电子钟、石英钟、 石英表都采用了石英技术,因此走时精度高,稳定性好,使用方便,不需要经常调 试,数字式电子钟用集成电路计时时,译码代替机械式传动,用 LED 显示器代替指 针显示进而显示时间,减小了计时误差,这种表具有时、分、秒显示时间的功能, 还可以进行时和分的校对,片选的灵活性好。 5 1 1、 AT89S52AT89S52 单片机介绍单片机介绍 AT89S52 具有以下标准功能:8k 字节 Flash,256 字节 RAM,32 位 I/O 口线, 看门狗定时器,2 个数据指针,三个 16 位定时器/计数器,一个 6 向量 2 级中断 结构,全双工串行口,片内晶振及时钟电路。另外
5、,AT89S52 可降至 0Hz 静态逻辑 操作,支持 2 种软件可选择节电模式。空闲模式下,CPU 停止工作,允许 RAM、定 时器/计数器、串口、中断继续工作。掉电保护方式下,RAM 内容被保存,振荡器被 冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。 图 1.1 单片机引脚图 VCC : 电源 GND: 地 P0 口:P0 口是一个 8 位漏极开路的双向 I/O 口。作为输出口,每位能驱动 8 个 TTL 逻辑电平。对 P0 端口写“1”时,引脚用作高阻抗输入。当访问外部程 序和数据存储器时,P0 口也被作为低 8 位地址/数据复用。在这种模式下,P0 具 有内部上拉电阻。在
6、flash 编程时,P0 口也用来接收指令字节;在程序校验时, 输出指令字节。程序校时,需要外部上拉电阻。 P1 口:P1 口是一个具有内部上拉电阻的 8 位双向 I/O 口,p1 输出缓冲器能 驱动 4 个 TTL 逻辑电平。对 P1 端口写“1”时,内部上拉电阻把端口拉高,此时 可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因, 将输出电流(IIL)。此外,P1.0 和 P1.2 分别作定时器/计数器 2 的外部计数输 入(P1.0/T2)和时器/计数器 2 的触发输入(P1.1/T2EX),具体如下表所示。 6 表 1.1 AT89S52 P1 口第二功能表 脚号第
7、二功能 P1.0 T2(定时器/计数器 T2 的外部计数输入),时钟输出 P1.1 T2EX(定时器/计数器 T2 的捕捉/重载触发信号和方向控制) P1.5 MOSI(在系统编程用) P1.6 MISO(在系统编程用) P1.7 SCK(在系统编程用) P2 口:P2 口是一个具有内部上拉电阻的 8 位双向 I/O 口,P2 输出缓冲器能 驱动 4 个 TTL 逻辑电平。对 P2 端口写“1”时,内部上拉电阻把端口拉高,此时 可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因, 将输出电流(IIL)在访问外部程序存储器或用 16 位地址读取外部数据存储器(例 如执行 MO
8、VX DPTR)时,P2 口送出高八位地址 P3 口:P3 口是一个具有内部上拉电阻的 8 位双向 I/O 口,p2 输出缓冲器能 驱动 4 个 TTL 逻辑电平。对 P3 端口写“1”时,内部上拉电阻把端口拉高,此时 可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因, 将输出电流(IIL)。P3 口亦作为 AT89S52 特殊功能(第二功能)使用,如下表所 示。 表 1.1 AT89S52 P3 口第二功能表 脚号第二功能 P3.0 RXD(串行输入) P3.1 TXD(串行输出) P3.2 INT0(外部中断 0) P3.3 INT0(外部中断 0) P3.4 T0(
9、定时器 0 外部输入) P3.5 T1(定时器 1 外部输入) P3.6 WR(外部数据存储器写选通) P3.7 RD(外部数据存储器写选通) RST: 复位输入。晶振工作时,RST 脚持续 2 个机器周期高电平将使单片机复 位。看门狗计时完成后,RST 脚输出 96 个晶振周期的高电平。特殊寄存器 AUXR(地址 8EH)上的 DISRTO 位可以使此功能无效。DISRTO 默认状态下,复位高电 平有效。 7 ALE/PROG:地址锁存控制信号(ALE)是访问外部程序存储器时,锁存低 8 位 地址的输出脉冲。在 flash 编程时,此引脚(PROG)也用作编程输入脉冲。在一般 情况下,ALE
10、 以晶振六分之一的固定频率输出脉冲,可用来作为外部定时器或时钟 使用。然而,特别强调,在每次访问外部数据存储器时,ALE 脉冲将会跳过。 PSEN:外部程序存储器选通信号(PSEN)是外部程序存储器选通信号。当 AT89S52 从外部程序存储器执行外部代码时,PSEN 在每个机器周期被激活两次,而 在访问外部数据存储器时,PSEN 将不被激活。 EA/VPP:访问外部程序存储器控制信号。为使能从 0000H 到 FFFFH 的外部程序 存储器读取指令,EA 必须接 GND。为了执行内部程序指令,EA 应该接 VCC。在 flash 编程期间,EA 也接收 12 伏 VPP 电压。 XTAL1:
11、振荡器反相放大器和内部时钟发生电路的输入端。 XTAL2:振荡器反相放大器的输出端。 8 2 2、设计功能及说明、设计功能及说明 电子数字钟实现的主要功能: 实现正常走时(秒分时日月年进位) 能够预置时间和日期 能够自动区分平闰年和大小月 具有闹铃及设定闹铃时间功能 具有整点报时功能 具有生日提醒功能,能够预置生日时间 在任何一种预置状态下,预置项目会闪烁显示 其它设计说明 优先级:预置闹铃报时生日提醒正常显示,即预置状态下闹铃、报时功 能及生日提醒功能都无效 生日时间到五个数码管显示“HAPPY” 生日显示状态下,按下中断INT0恢复正常显示且此后只有在下更改生日日期 或第二年生日显示才有效
12、。 正常显示状态下按下中断INT0进入预置状态,再按一次恢复。 用数码管(K0,K1)控制显示状态:00:时间,01:闹铃时间,10:日期, 11。 生日时间且显示样板如下图所示: 生日:6 月1 日生日,最 闹铃:于早晨6 点10 分响,最后 后两位bd 为birthday 的缩写 一位为一表示使能有效。 日期:08 年2 月29 日 时间:12 点39 分45 秒 9 预置由拨码开关K2/K3/K4分别控制数码管12/34/56显示值,预置优先级: LED34LED12LED56(相应数码管显示的项目,显示状态下才能预置) 整点报时声音为59分51、53、55、57秒的后半秒报四声低音,
13、59秒的后半 秒报一声高音 闹铃每次响一分钟 不论是预置状态还是正常走时状态均能够自动区分平闰年和大小月 闹铃使能由拨码开关K5控制并实时显示 10 3 3、整体设计方案、整体设计方案 系统硬件电路根据系统功能可知,需要六个数码管,一个外部中断 INT0,一个 扬声器,由此结合单片机课程学习中对实验面板的了解,做出如下电路: 图 3.1 系统硬件电路图 如图,晶振频率 12MHz,拨码开关数值由 P0 口读入;P2 口的输出作为控制数码 管的段控信号,经 74LS573 即 8 位数据锁存器接到数码管中。数码管采用共阴接法 (图中未标示);P1.0-P1.5 作为数码管的位控信号出端;开关 W
14、2 经一个基本 RS 锁 存器接入 INT0,每按一次开关 INTO 取反次,按两次输入一个下降沿;扬声器由 P1.6 口控制。 11 4 4、单模块流程设计及程序设计、单模块流程设计及程序设计 在完成了系统总流程设计后,便进入到了系统设计中工作量最大的模块流程设 计。由于系统模块划分虽然是系统设计的基础,但比较简单而且模块划分有多种方 法,因此单模块的设计可以认为是本程序中最关键的部分。单模块设计的好坏与否 决定了系统功能能否被稳定地实现以及下一阶段调试程序的难度。鉴于单模块设计 的重要性,我在设计中并不急于对模块进行编码,而是反复论证模块的可行性和流 程图,为下一阶段的工作做好准备,同时也
15、能够尽早发现系统模块划分的错误,加 以解决。 各模块设计概述 初始化模块(ONE) 初始化模块包含了各中断的跳转语句、存储资源的分配、各存储器和寄存器的 赋值以及中断及计时器的状态设置。源程序中共使用了 17 字节的内部数据存储地址, 其中包含 3 字节位寻址地址以便于进行位判断。 三字节的位寻址地址分配如下: 22H秒的存储地址,方便对整点报时条件进行判断 23H月的存储地址,方便对大小月平闰年进行判断 另外一个位寻址字节 00H 地址拆开用做程序状态标志位 00H(bit,BS)生日标志位,到生日那天为 1 使程序转入生日显示段 01H(bit,SS)预置标志,以 INT0 控制其值,控制
16、预置闪烁的实现 02H(bit,GS)闪烁标志,在预置标志有效时控制闪烁项目的亮和灭两状态 03H(bit,FC)频率控制,在整点报时时控制产生低音还是高音 04H(bit,NB)忽略生日标志,控制预置及报时的优先级高于生日显示 05H(bit)控制生日信号的有效与否,其使用目的参见调试过程 源程序中使用了两个寄存器 R1、R0,R1 用于控制闪烁的间隔时间, R0 用于显 示延时。在初始化模块中设定了中断的优先级、定时计数器的工作模式、并打开了 定时计数器 TO 开始计时其他资源分配项目参见源程序集合及注释。初始化模块指令 很大一部分都是伪指令,方便了后面程序的编写。 开关检测模块(TWO)
17、 开关检测模块主要执行两个任务: 1 读取闹铃使能控制拨码开关 K5 的值并赋予闹铃使能相应值; 读取显示选择开关(K0,K1)的值并将要显示的项目值送入显示缓存 LED12、LED34、LED56 当 k5 为 1 时将 A1H 送入 RE 反之送入 A1H,其中 A 为“”的字型码 查表偏移量。当显示生日日期时, 将生日 Birthday 的缩写“bd” 的字型码送入显示缓存 LED56。 图 4.1 开关检测流程图 显示主程序(THREE) 显示主程序是程序中最复杂的模块,实现的功能也最多,占用了程序运行过程 当中 90%以上的执行时间。流程图中由判断 SS(预置信号)开始分成两个分支,
18、当 SS=1,即预置状态下程序进入预置闪烁部分。 1 图 4.2 显示主程序流程图 预置闪烁的优先级是:LED34LED12LED56 即同预置优先级相同(参见调试部分 的详细说明)闪烁首先判断是否对 LED34 进行判断闪烁,如果是则另外两个显示值 直接显示,否则判断是否对 LED12 进行闪烁,如果是则直接显示 LED56 的值,只有 当前两个显示值都不闪烁的时候,才判断是否对 LED56 进行闪烁,这样就确保了每 次只有一个显示值闪烁。预置通过 GS 标志位判断预置的亮/灭,由 R1 控制每 50 轮 显示对 GS 取反一次。 当 SS=0 时进入判断闹铃/报时及正常显示模块,模块 EI
19、GHT(参见其说明)对闹 铃及报时条件进行判断,符合条件则对 P1.6 取反一次并使 NB(忽略生日)有效, 此时行对 BS(生日标志)的判断,即使响铃优先级高于生日显示(其实也可以对程序 进行修改使响铃和生日显示不发生冲突,修改方法参见程序优化)。当不响铃并且 生日标志 BS 有效时显示 HAPPY 其单列开来。本程序由生日标志 BS 控制,当到达生 日时间时,T0 中断程序会将 BS 置 1 使之有效在显示主程序中通过判断 BS 的置来控 制是否执行本模块标志 BS 有效时显示 HAPPY 其单列开来。本程序由生日标志 BS 控 制,当到达生日时间时,T0 中断程序会将 BS 置 1 使之
20、有效在显示主程序中通过判 断 BS 的置来控制是否执行本模块 闹铃及整点报时判断程序(EIGHT) 在显示主程序中每隔一段时间调用一次本程序来实现闹铃及报时功能。符合闹 铃条件时,每调用一次本程序对 P1.6 取反一次,调节调用的时间间隔便可以调节报 时的输出频率。在主程序中设置每完成对一个数码管的显示变调用一次本程序,显 示一个数码管的时间大约为 1ms,因此响铃频率高音约为 500Hz,低音约为 250Hz。 程序判断闹铃使能 RE 后分成两个分支,当 RE=A1 时判断闹铃条件是否满足,满足则 对 P1.6 取反一次,否则跳转判断整点报时条件是否满足。当 RE=0 时,直接怕暖整 点报时
21、条件是否满足。判断整点报时条件时当当前时间满足: (MIN=59)(SECOND=59) (COUNT10) 时报高音;当满足: (MIN=59)(SECOND=51/53/55/57) (COUNT10) 时报低音。利用位寻址区来存储 SECOND 的方法,(SECOND50)(SECOND.0=1) 时便满足报低音的秒条件。利用 TO 中断次数存储器 COUNT 的大小可以判断是否到了 后半秒(T0 每 50ms 中断一次,中断 20 次到达一秒)。通过增加一个标志位 FC 来 1 时下对高低音的区分,高音不受 FC 的影响,低音只有当 FC=0 的时候才对 P1.6 取反 一次。并且每调
22、用一次本程序便对 FC 取反一次,便达到每调用两次取反一次 P1.6 的效果。本程序的执行时间小于 40us,因此多次调用不过分影响执行。 中断(TO)计时程序(NINE) 中断计时程序的流程比较简单。程序除实现正常走时外还需要判断是否到达生 日时间置生日标志位有效。程序的输出均为 BCD 码,方便了显示程序对高低位的分 离并查表显示。程序比较复杂的地方在于对平闰年及大小月的判断。把月 MONTH 存 储在位寻址区,当 MONTH=02H 时判断是否是平闰年,先将年由 BCD 码转化为二进制 码,此时当年的后两位为全零的时候为闰年(由于只显示年的个位和十位,由 2000 年开始,00 年、04
23、 年为闰年,其共同特点就是二进制后两位为零),否则为平年。 当 MONTH2 时判断是否为大小月,MOUTH7 时双月为大月。 中断(T1)预置程序(TEN) T1 通过中断 INT0 控制开启或关闭,每次定时 50 毫秒,存储地址 COUNTS 计数 15 次执行一次中断程序。由开关(K0,K1)控制预置项目,通过开关 K2/K3/K4 来分 别控制 LED12/LED34/LED56 的预置,当两个开关都是有效时,具有优先级的区分, 确保无论按几个开关都最多只有一个项目被预置。判断预置的优先级顺序是: LED34LED12LED56 这样安排的原因是由于根据生活经验 LED34 所对应的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计 论文 基于 单片机 多功能 电子表 设计
链接地址:https://www.31doc.com/p-3292739.html