基于单片机的多功能电子表的设计论文.doc_第1页
基于单片机的多功能电子表的设计论文.doc_第2页
基于单片机的多功能电子表的设计论文.doc_第3页
基于单片机的多功能电子表的设计论文.doc_第4页
基于单片机的多功能电子表的设计论文.doc_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课程设计 论文 题 目 名 称 基于单片机的多功能电子表设计 课 程 名 称 单片机原理及在电气测控学科中的应用 摘摘 要要 单片计算机即单片微型计算机 由 RAM ROM CPU 构成 定时 计数和多种接 口于一体的微控制器 它体积小 成本低 功能强 广泛应用于智能产业和工业自 动化上 而 51 系列单片机是各单片机中最为典型和最有代表性的一种 这次课程设 计通过对它的学习 应用 从而达到学习 设计 开发软 硬的能力 本设计是通过单片机设计一个多功能电子表 要求不仅具有电子时钟的功能还 具有闹铃 设定闹铃时间 整点报时 生日提醒功能 而且能够预置生日时间 关键字 关键字 单片机 多功能电子表 跑表 数码管显示 目 录 摘 要 1 引言 3 1 AT89S52 单片机介绍 4 2 设计功能及说明 7 3 整体设计方案 9 4 单模块流程设计及程序设计 10 4 1 初始化模块 ONE 11 4 2 开关检测模块 TWO 11 4 3 显示主程序 THREE 1 4 4 闹铃及整点报时判断程序 EIGHT 1 4 5 中断 TO 计时程序 NINE 0 4 6 中断 T1 预置程序 TEN 0 4 7 中断 INT0 设定程序 ELEVEN 0 5 总结 1 致谢 2 参考文献 3 附录 A 4 附录 B 5 引言引言 1957 年 Ventura 发明了世界上第一个电子表 从而奠定了电子表的基础 电子 表开始迅速发展起来 现代的电子表是基于单片机的一种计时工具 采用延时程序 产生一定的时间中断 用于一秒的定义 通过计数方式进行满六十秒分钟进一 满 六十分小时进一 满二十四小时小时清零 从而达到计时的功能 是人民日常生活 不可缺少的工具 现在高精度的计时工具大多数都使用了石英晶体振荡器 由于电子钟 石英钟 石英表都采用了石英技术 因此走时精度高 稳定性好 使用方便 不需要经常调 试 数字式电子钟用集成电路计时时 译码代替机械式传动 用 LED 显示器代替指 针显示进而显示时间 减小了计时误差 这种表具有时 分 秒显示时间的功能 还可以进行时和分的校对 片选的灵活性好 1 1 AT89S52AT89S52 单片机介绍单片机介绍 AT89S52 具有以下标准功能 8k 字节 Flash 256 字节 RAM 32 位 I O 口线 看门狗定时器 2 个数据指针 三个 16 位定时器 计数器 一个 6 向量 2 级中断 结构 全双工串行口 片内晶振及时钟电路 另外 AT89S52 可降至 0Hz 静态逻辑 操作 支持 2 种软件可选择节电模式 空闲模式下 CPU 停止工作 允许 RAM 定 时器 计数器 串口 中断继续工作 掉电保护方式下 RAM 内容被保存 振荡器被 冻结 单片机一切工作停止 直到下一个中断或硬件复位为止 图 1 1 AT89S52 引脚图 VCC 电源 GND 地 P0 口 P0 口是一个 8 位漏极开路的双向 I O 口 作为输出口 每位能驱动 8 个 TTL 逻辑电平 对 P0 端口写 1 时 引脚用作高阻抗输入 当访问外部程 序和数据存储器时 P0 口也被作为低 8 位地址 数据复用 在这种模式下 P0 具 有内部上拉电阻 在 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 具体如下表所示 脚号第二功能 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 位地址读取外部数据存储器 例 如执行 MOVX DPTR 时 P2 口送出高八位地址 P3 口 P3 口是一个具有内部上拉电阻的 8 位双向 I O 口 p2 输出缓冲器能 驱动 4 个 TTL 逻辑电平 对 P3 端口写 1 时 内部上拉电阻把端口拉高 此时 可以作为输入口使用 作为输入使用时 被外部拉低的引脚由于内部电阻的原因 将输出电流 IIL P3 口亦作为 AT89S52 特殊功能 第二功能 使用 如下表所 示 脚号第二功能 P3 0 RXD 串行输入 P3 1 TXD 串行输出 P3 2 INT0 外部中断 0 P3 3 INT0 外部中断 0 P3 4 T0 定时器 0 外部输入 P3 5 T1 定时器 1 外部输入 P3 6 WR 外部数据存储器写选通 P3 7 RD 外部数据存储器写选通 RST 复位输入 晶振工作时 RST 脚持续 2 个机器周期高电平将使单片机复 位 看门狗计时完成后 RST 脚输出 96 个晶振周期的高电平 特殊寄存器 AUXR 地址 8EH 上的 DISRTO 位可以使此功能无效 DISRTO 默认状态下 复位高电 平有效 ALE PROG 地址锁存控制信号 ALE 是访问外部程序存储器时 锁存低 8 位 地址的输出脉冲 在 flash 编程时 此引脚 PROG 也用作编程输入脉冲 在一般 情况下 ALE 以晶振六分之一的固定频率输出脉冲 可用来作为外部定时器或时钟 使用 然而 特别强调 在每次访问外部数据存储器时 ALE 脉冲将会跳过 PSEN 外部程序存储器选通信号 PSEN 是外部程序存储器选通信号 当 AT89S52 从外部程序存储器执行外部代码时 PSEN 在每个机器周期被激活两次 而 在访问外部数据存储器时 PSEN 将不被激活 EA VPP 访问外部程序存储器控制信号 为使能从 0000H 到 FFFFH 的外部程序 存储器读取指令 EA 必须接 GND 为了执行内部程序指令 EA 应该接 VCC 在 flash 编程期间 EA 也接收 12 伏 VPP 电压 XTAL1 振荡器反相放大器和内部时钟发生电路的输入端 XTAL2 振荡器反相放大器的输出端 2 2 设计功能及说明 设计功能及说明 电子数字钟实现的主要功能 实现正常走时 秒 分 时 日 月 年进位 能够预置时间和日期 能够自动区分平闰年和大小月 具有闹铃及设定闹铃时间功能 具有整点报时功能 具有生日提醒功能 能够预置生日时间 在任何一种预置状态下 预置项目会闪烁显示 其它设计说明 优先级 预置 闹铃 报时 生日提醒 正常显示 即预置状态下闹铃 报时功 能及生日提醒功能都无效 生日时间到五个数码管显示 HAPPY 生日显示状态下 按下中断INT0恢复正常显示且此后只有在下更改生日日期 或第二年生日显示才有效 正常显示状态下按下中断INT0进入预置状态 再按一次恢复 用数码管 K0 K1 控制显示状态 00 时间 01 闹铃时间 10 日期 11 生日时间且显示样板如下图所示 生日 6 月1 日生日 最后两位bd 为birthday 的缩写 闹铃 于早晨6 点10 分响 最后一位为一表示使能有效 日期 08 年 2 月 29 日 时间 12 点39 分45 秒 预置由拨码开关K2 K3 K4分别控制数码管12 34 56显示值 预置优先级 LED34 LED12 LED56 相应数码管显示的项目 显示状态下才能预置 整点报时声音为59分51 53 55 57秒的后半秒报四声低音 59秒的后半 秒报一声高音 闹铃每次响一分钟 不论是预置状态还是正常走时状态均能够自动区分平闰年和大小月 闹铃使能由拨码开关K5控制并实时显示 3 3 整体设计方案 整体设计方案 系统硬件电路根据系统功能可知 需要六个数码管 一个外部中断 INT0 一个 扬声器 由此结合单片机课程学习中对实验面板的了解 做出如下电路 如图 晶振频率 12MHz 拨码开关数值由 P0 口读入 P2 口的输出作为控制数码 管的段控信号 经 74LS573 即 8 位数据锁存器接到数码管中 数码管采用共阴接法 图中未标示 P1 0 P1 5 作为数码管的位控信号出端 开关 W2 经一个基本 RS 锁 存器接入 INT0 每按一次开关 INTO 取反次 按两次输入一个下降沿 扬声器由 P1 6 口控制 4 4 单模块流程设计及程序设计 单模块流程设计及程序设计 在完成了系统总流程设计后 便进入到了系统设计中工作量最大的模块流程设 计 由于系统模块划分虽然是系统设计的基础 但比较简单而且模块划分有多种方 法 因此单模块的设计可以认为是本程序中最关键的部分 单模块设计的好坏与否 决定了系统功能能否被稳定地实现以及下一阶段调试程序的难度 鉴于单模块设计 的重要性 我在设计中并不急于对模块进行编码 而是反复论证模块的可行性和流 程图 为下一阶段的工作做好准备 同时也能够尽早发现系统模块划分的错误 加 以解决 4 14 1 初始化模块 初始化模块 ONEONE 初始化模块包含了各中断的跳转语句 存储资源的分配 各存储器和寄存器的 赋值以及中断及计时器的状态设置 源程序中共使用了 17 字节的内部数据存储地址 其中包含 3 字节位寻址地址以便于进行位判断 三字节的位寻址地址分配如下 22H 秒的存储地址 方便对整点报时条件进行判断 23H 月的存储地址 方便对大小月平闰年进行判断 另外一个位寻址字节 00H 地址拆开用做程序状态标志位 00H bit BS 生日标志位 到生日那天为 1 使程序转入生日显示段 01H bit SS 预置标志 以 INT0 控制其值 控制预置闪烁的实现 02H bit GS 闪烁标志 在预置标志有效时控制闪烁项目的亮和灭两状态 03H bit FC 频率控制 在整点报时时控制产生低音还是高音 04H bit NB 忽略生日标志 控制预置及报时的优先级高于生日显示 05H bit 控制生日信号的有效与否 其使用目的参见调试过程 源程序中使用了两个寄存器 R1 R0 R1 用于控制闪烁的间隔时间 R0 用于显 示延时 在初始化模块中设定了中断的优先级 定时计数器的工作模式 并打开了 定时计数器 TO 开始计时其他资源分配项目参见源程序集合及注释 初始化模块指令 很大一部分都是伪指令 方便了后面程序的编写 4 24 2 开关检测模块 开关检测模块 TWOTWO 开关检测模块主要执行两个任务 读取闹铃使能控制拨码开关 K5 的值并赋予闹铃使能相应值 读取显示选择开关 K0 K1 的值并将要显示的项 目值送入显示缓存 LED12 LED34 LED56 当 k5 为 1 时将 A1H 送入 RE 反之送入 A1H 其中 A 为 的字型码 查表偏移量 当显示生日日期时 将生日 Birthday 的缩写 bd 的字型码送入显示缓存 LED56 开关检测模块的执行时间大约在 40uS 左右 4 34 3 显示主程序 显示主程序 THREETHREE 显示主程序是程序中最复杂 的模块 实现的功能也最多 占 用了程序运行过程当中 90 以上 的执行时间 流程图中由判断 SS 预置信号 开始分成两个分支 当 SS 1 即预置状态下程序进 入预置闪烁部分 预置闪烁的优先级是 LED34 LED12 LED56 即同预置优 先级相同 参见调试部分的详细 说明 闪烁首先判断是否对 LED34 进行判断闪烁 如果是则 另外两个显示值直接显示 否则 判断是否对 LED12 进行闪烁 如果是则直接显示 LED56 的值 只有当前两个显示值 都不闪烁的时候 才判断是否对 LED56 进行闪烁 这样就确保了每次只有一个显示 值闪烁 预置通过 GS 标志位判断预置的亮 灭 由 R1 控制每 50 轮显示对 GS 取反一 次 当 SS 0 时进入判断闹铃 报时及正常显示模块 模块 EIGHT 参见其说明 对闹 铃及报时条件进行判断 符合条件则对 P1 6 取反一次并使 NB 忽略生日 有效 此时行对 BS 生日标志 的判断 即使响铃优先级高于生日显示 其实也可以对程序 进行修改使响铃和生日显示不发生冲突 修改方法参见程序优化 当不响铃并且 生日标志 BS 有效时显示 HAPPY 其单列开来 本程序由生日标志 BS 控制 当到达生 日时间时 T0 中断程序会将 BS 置 1 使之有效在显示主程序中通过判断 BS 的置来控 制是否执行本模块标志 BS 有效时显示 HAPPY 其单列开来 本程序由生日标志 BS 控 制 当到达生日时间时 T0 中断程序会将 BS 置 1 使之有效在显示主程序中通过判 断 BS 的置来控制是否执行本模块 4 44 4 闹铃及整点报时判断程序 闹铃及整点报时判断程序 EIGHTEIGHT 在显示主程序中每隔一段时间调用一次本程序来实现闹铃及报时功能 符合闹 铃条件时 每调用一次本程序对 P1 6 取反一次 调节调用的时间间隔便可以调节报 时的输出频率 在主程序中设置每完成对一个数码管的显示变调用一次本程序 显 示一个数码管的时间大约为 1ms 因此响铃频率高音约为 500Hz 低音约为 250Hz 程序判断闹铃使能 RE 后分成两个分支 当 RE A1 时判断闹铃条件是否满足 满足则 对 P1 6 取反一次 否则跳转判断整点报时条件是否满足 当 RE 0 时 直接怕暖整 点报时条件是否满足 判断整点报时条件时当当前时间满足 MIN 59 SECOND 59 COUNT 10 时报高音 当满足 MIN 59 SECOND 51 53 55 57 COUNT 10 时报低音 利用位寻址区来存储 SECOND 的方法 SECOND 50 SECOND 0 1 时便满足报低音的秒条件 利用 TO 中断次数存储器 COUNT 的大小可以判断是否到了 后半秒 T0 每 50ms 中断一次 中断 20 次到达一秒 通过增加一个标志位 FC 来 时下对高低音的区分 高音不受 FC 的影响 低音只有当 FC 0 的时候才对 P1 6 取反 一次 并且每调用一次本程序便对 FC 取反一次 便达到每调用两次取反一次 P1 6 的效果 本程序的执行时间小于 40us 因此多次调用不过分影响执行 4 54 5 中断 中断 TOTO 计时程序 计时程序 NINENINE 中断计时程序的流程比较简单 程序除实现正常走时外还需要判断是否到达生 日时间置生日标志位有效 程序的输出均为 BCD 码 方便了显示程序对高低位的分 离并查表显示 程序比较复杂的地方在于对平闰年及大小月的判断 把月 MONTH 存 储在位寻址区 当 MONTH 02H 时判断是否是平闰年 先将年由 BCD 码转化为二进制 码 此时当年的后两位为全零的时候为闰年 由于只显示年的个位和十位 由 2000 年开始 00 年 04 年 为闰年 其共同特点就是二进制后两位为零 否则为平年 当 MONTH 2 时判断是否为大小月 MOUTH7 时双月为大月 4 64 6 中断 中断 T1T1 预置程序 预置程序 TENTEN T1 通过中断 INT0 控制开启或关闭 每次定时 50 毫秒 存储地址 COUNTS 计数 15 次执行一次中断程序 由开关 K0 K1 控制预置项目 通过开关 K2 K3 K4 来分 别控制 LED12 LED34 LED56 的预置 当两个开关都是有效时 具有优先级的区分 确保无论按几个开关都最多只有一个项目被预置 判断预置的优先级顺序是 LED34 LED12 LED56 这样安排的原因是由于根据生活经验 LED34 所对应的 4 个项目 小时 闹铃分 月 生日日 被预置的可能性最大 在预置日期和生日是要注意对大小月及平闰年 进行判断 判断方法与中断计时程序中说明的方法类似 但不需要考虑进位 且月 和日在溢出后应置一而不是归零 4 74 7 中断 中断 INT0INT0 设定程序 设定程序 ELEVENELEVEN 中断 INT0 设置是否进行预置以及对生日标志的清除 且有如下设置顺序 清除 预置信号并关 T1 清除生日标志 设定预置信号并开 T1 每按一次中断都只执行其中 一个项目 5 5 总结 总结 在赵宇红老师耐心的指导下 我顺利完成了这次单片机课程设计课题中的多功 能电子表的设计 通过这次的设计使我认识到本人对单片机方面的知识知道的太少 了 对于书本上的很多知识还不能灵活运用 尤其是对程序设计语句的理解和运用 不能够充分理解每个语句的具体含义 导致编程的程序过于复杂 使得需要的存储 空间增大 损耗了过多的内存资源 本次的设计使我从中学到了一些很重要的东西 那就是如何从理论到实践的转 化 怎样将我所学到的知识运用到我以后的工作中去 在大学的课堂的学习只是在 给我们灌输专业知识 而我们应把所学的用到我们现实的生活中去 此次的多功能 电子版表设计给我奠定了一个实践基础 我会在以后的学习 生活中磨练自己 使 自己适应于以后的竞争 同时在查找资料的过程中我也学到了许多新的知识 在和 同学协作过程中增进同学间的友谊 使我对团队精神的积极性和重要性有了更加充 分的理解 致谢致谢 最后 感谢尹进田老师对我的细心的指导 正是由于尹老师的细心的辅导和他 提供给我们的参考资料 使得我的课程设计能够顺利的完成 同时感谢所以在课程 设计过程中给于我帮助过的老师和同学 非常感谢 张婷 2010 年 6 月 30 日 参考文献 参考文献 1 谢自美 电子线路设计 实验 测试 M 武汉 华中理工大学出版社 1992 2 何立民 单片机应用系统设计 M 北京 北京航空航天大学出版社 1993 3 楼然笛 单片机开发 M 北京 人民邮电出版社 1994 4 付家才 单片机控制工程实践技术 M 北京 化学工业出版社 2004 3 5 李光才 单片机课程设计 实例指导 M 北京 北京航空航天大学出版社 2004 6 朱定华 单片机原理及接口技术实验 M 北京 北方交通大学出版社 2002 11 7 刘湘涛 江世明 单片机原理与应用 M 北京 电子工业出版社 2006 附录附录 A A 附录附录 B B ONE 初始化 ORG 0 SJMP ONE ORG 0003H LJMP ELEVEN ORG 000BH LJMP NINE ORG 001BH LJMP TEN ONE LED12 EQU 30H 数码管 12 显示缓存 LED34 EQU 31H 数码管 34 显示缓存 LED56 EQU 32H 数码管 56 显示缓存 COUNT EQU 33H 定时器 T0 用来走时 计数值存储器 计数中断 20 次到 1 秒 COUNTS EQU 34H 定时器 T1 用来预置 计数值存储器 计数中断 15 次到预置值 加 1 HOUR EQU 40H 以下为时间 日期 闹铃时间 生日的存储地址 MIN EQU 41H SECOND EQU 22H YEAR EQU 50H MONTH EQU 23H DAY EQU 52H RH EQU 60H 闹铃小时 RM EQU 61H 闹铃分 RE EQU 62H 闹铃使能 BM EQU 71H 生日 月份 BD EQU 72H 生日 天 MOV LED12 0 MOV LED34 0 MOV LED56 0 MOV COUNT 0 MOV COUNTS 0 MOV HOUR 0 MOV MIN 0 MOV SECOND 0 MOV YEAR 0 MOV MONTH 1 MOV DAY 1 MOV RH 0 MOV RM 0 MOV RE 0 MOV BM 6 MOV BD 1 BS BIT 00H birthday symbol 生日标志 到生日那天就为 1 SS BIT 01H set symbol 预置信号 按下中断预置为 1 便开始闪烁和预置 GS BIT 02H glisten symbol 闪烁标志 FC BIT 03H frequency control 频率控制 NB BIT 04H neglect bitrhday symbol 忽略生日标志 CLR BS CLR SS CLR GS CLR FC CLR NB SETB 05H 生日显示有效标志位 MOV IP 02H 中断优先级 T0 INT0 T1 MOV TMOD 11H MOV IE 8BH SETB IT0 MOV TH0 3CH 50ms MOV TL0 0B0H SETB TR0 MOV R1 50 显示延时用 MOV R0 0 显示延时用 TWO 检测 开关号 TWO MOV P0 0FFH JB P0 5 TWO1 MOV RE 0A0H 0A0 表示闹铃无效 送 0A0 是为了方便将使能查表显示 表中第 A 项为 SJMP TWO2 TWO1 MOV RE 0A1H TWO2 JB P0 0 TWO4 JB P0 1 TWO3 MOV LED12 HOUR MOV LED34 MIN MOV LED56 SECOND SJMP THREE TWO3 MOV LED12 YEAR MOV LED34 MONTH MOV LED56 DAY SJMP THREE TWO4 JB P0 1 TWO5 MOV LED12 RH MOV LED34 RM MOV LED56 RE SJMP THREE TWO5 MOV LED12 BM MOV LED34 BD MOV LED56 0BCH SJMP THREE THREE 显示主程序 同时包含了闹铃 预置闪烁 闹铃功能 THREE MOV P1 0 MOV P0 0FFH MOV DPTR TAB3 JNB SS THREEB 判断预置信号是否有效 预置有效则转入判断闪烁显示模块 否则 转入正常显示模 块 SJMP THREEA THREEB LJMP THREE11 THREE11 是正常显示并判断整点报时及闹铃模块 THREEA JNB P0 3 THREE1 开始是判断闪烁显示 这句判断是否预置分 月 生日的 日 闹铃分 JNB GS THREE1 是否闪烁 LCALL TWELVE 闪烁则调用延时不显示 LED34 SJMP THREE4 THREE1 MOV A LED34 ANL A 0FH MOVC A A DPTR MOV P2 A THREE2 SETB P1 3 NOP DJNZ R0 THREE2 CLR P1 3 MOV A LED34 SWAP A ANL A 0FH MOVC A A DPTR MOV P2 A THREE3 SETB P1 2 NOP DJNZ R0 THREE3 CLR P1 2 JNB P0 2 THREE4 判断是否预置小时 年 生日月 闹铃的小时 JNB GS THREE4 是否显示小时 年 生日月 闹铃的小时 LCALL TWELVE SJMP THREE7 THREE4 MOV A LED12 ANL A 0FH MOVC A A DPTR MOV P2 A THREE5 SETB P1 1 NOP DJNZ R0 THREE5 CLR P1 1 MOV A LED12 SWAP A ANL A 0FH MOVC A A DPTR MOV P2 A THREE6 SETB P1 0 NOP DJNZ R0 THREE6 CLR P1 0 JB P0 0 THREE7 数码管 56 只有在显示日期的天时才有预置闪烁功能 其余三项都 不需要判断闪烁 JNB P0 1 THREE7 JB P0 3 THREE7 JNB P0 4 THREE7 JNB GS THREE7 LCALL TWELVE SJMP THREE10 THREE7 MOV A LED56 ANL A 0FH MOVC A A DPTR MOV P2 A THREE8 SETB P1 5 NOP DJNZ R0 THREE8 CLR P1 5 MOV A LED56 SWAP A ANL A 0FH MOVC A A DPTR MOV P2 A THREE9 SETB P1 4 NOP DJNZ R0 THREE9 CLR P1 4 THREE10 DJNZ R1 TWOA SJMP TWOB TWOA LJMP TWO TWOB MOV R1 50 判断闪烁一次是否完成 CPL GS 取反闪烁标志 用于控制闪烁的亮和灭 LJMP TWO 一轮显示完后再判断开关号 正常显示 THREE11 LCALL EIGHT 判断是否取反 P1 6 即输出闹铃或整点报时 以下每次显示 都要调用一次 JB NB THREE12 如果是在整点报时状态就不显示生日提醒 报时过后显示提醒 JNB BS THREE12 SJMP SEVEN 跳到生日提醒程序 THREE12 CLR NB 开始正常显示时间及判断闹铃输出 MOV A LED34 ANL A 0FH MOVC A A DPTR MOV P2 A THREE13 SETB P1 3 NOP DJNZ R0 THREE13 CLR P1 3 MOV A LED34 SWAP A ANL A 0FH MOVC A A DPTR MOV P2 A THREE14 SETB P1 2 NOP DJNZ R0 THREE14 CLR P1 2 LCALL EIGHT MOV A LED12 ANL A 0FH MOVC A A DPTR MOV P2 A THREE15 SETB P1 1 NOP DJNZ R0 THREE15 CLR P1 1 MOV A LED12 SWAP A ANL A 0FH MOVC A A DPTR MOV P2 A THREE16 SETB P1 0 NOP DJNZ R0 THREE16 CLR P1 0 LCALL EIGHT MOV A LED56 ANL A 0FH MOVC A A DPTR MOV P2 A THREE17 SETB P1 5 NOP DJNZ R0 THREE17 CLR P1 5 MOV A LED56 SWAP A ANL A 0FH MOVC A A DPTR MOV P2 A THREE18 SETB P1 4 NOP DJNZ R0 THREE18 CLR P1 4 LJMP TWO 一轮显示完后判开关 TAB3 DB 3FH 06H 5BH 4FH 66H 6DH 7DH 07H 7FH 6FH 40H 7CH 5EH 0 1 2 3 4 5 6 7 8 9 b d 的字形表 bd 在显示生日时间时显示在 LED56 SEVEN 生日时显示生日祝 福语 HAPPY SEVEN MOV P1 01H MOV P2 76H DJNZ R0 SEVEN SEVEN1 MOV P1 02H MOV P2 77H DJNZ R0 SEVEN1 SEVEN2 MOV P1 04H MOV P2 73H DJNZ R0 SEVEN2 SEVEN3 MOV P1 08H MOV P2 73H DJNZ R0 SEVEN3 SEVEN4 MOV P1 10H MOV P2 6EH DJNZ R0 SEVEN4 LJMP TWO EIGHT 判断是否闹铃子程序 EIGHT MOV A RE CJNE A 0A1H EIGHT1 MOV A MIN CJNE A RM EIGHT1 MOV A HOUR CJNE A RH EIGHT1 SJMP EIGHT4 闹铃时间到则 CPLP1 6 一次并忽略生日标志 即 NB 有效 EIGHT1 MOV A MIN CJNE A 59H EIGHT7 MOV A SECOND CJNE A 59H EIGHT5 是否等于 59 分 59 秒 EIGHT2 MOV A COUNT 是否到达后半秒 CJNE A 10 EIGHT3 EIGHT3 JC EIGHT7 EIGHT4 CPL P1 6 SETB NB SJMP EIGHT7 EIGHT5 MOV A SECOND CJNE A 51H EIGHT6 是否大于 51 秒 EIGHT6 JC EIGHT7 JNB 10H EIGHT7 判断是否报低音 JB FC EIGHT7 只有 FC 有效时才输出 SJMP EIGHT2 EIGHT7 CPL FC 用来控制报低音和高音 满足报低音条件时 调用两次本程序 对 P1 6 取反一 次 高音时调用一次取反一次 RET NINE 中断 T0 计时程序 包含了秒 分 时 日 月 年间的进位及 判断大小月 平闰年 NINE MOV TH0 3CH 开定时器 MOV TL0 0B0H SETB TR0 INC COUNT MOV A COUNT CJNE A 20 INEAA SJMP AAA INEAA LJMP NINE1 AAA MOV COUNT 0 计时 MOV A SECOND ADD A 01 DA A 换成 bcd 码以方便显示 MOV SECOND A CJNE A 60H INEAA MOV SECOND 0 MOV A MIN ADD A 01 DA A MOV MIN A CJNE A 60H INEAA MOV MIN 0 MOV A HOUR ADD A 01 DA A MOV HOUR A CJNE A 24H INEAA MOV HOUR 0 MOV A DAY ADD A 01 DA A MOV DAY A 判断平闰年及大小月 MOV A MONTH CJNE A 02H TEN6A MOV A YEAR 把年由 BCD 码换成二进制码 ANL A 0F0H SWAP A MOV B 10 MUL AB MOV 24H A MOV A YEAR ANL A 0FH ADD A 24H JB ACC 0 TEN5A 二进制码后两位为 00 表示为闰年 JB ACC 1 TEN5A MOV 24H 01 MOV A DAY CJNE A 30H NINE1 MOV DAY 1 SJMP NINE0 TEN5A MOV A DAY CJNE A 29H NINE1 MOV DAY 1 SJMP NINE0 判断大小月 大于等于 8 月时双月为大月 小于 8 月时单月为大月 TEN6A MOV A MONTH CJNE A 08H TEN7A TEN7A JC TEN9A JB 18H TEN8A MOV A DAY CJNE A 32H NINE1 MOV DAY 1 SJMP NINE0 TEN8A MOV A DAY CJNE A 31H NINE1 MOV DAY 1 SJMP NINE0 TEN9A JNB 18H TEN10A MOV A DAY CJNE A 32H NINE1 MOV DAY 1 SJMP NINE0 TEN10A MOV A DAY CJNE A 31H NINE1 MOV DAY 1 NINE0 MOV A MONTH ADD A 01 DA A MOV MONTH A SETB 05H CJNE A 13H NINE1 MOV MONTH 1 MOV A YEAR ADD A 01 DA A MOV YEAR A NINE1 MOV A MONTH CJNE A BM NINE2 MOV A DAY CJNE A BD NINE2 JNB 05H NINE2 SETB BS NINE2 RETI TEN 中断 T1 预置加一程序由 INT0 控制其的开启与关闭 判断预置项目 TEN MOV TH1 3CH MOV TL1 0B0H SETB TR1 INC COUNTS MOV A COUNTS CJNE A 15 TENE MOV COUNTS 0 JB P0 0 RBRB JB P0 1 DAT SJMP TIME DAT LJMP DATE RBRB JB P0 1 BDAT LJMP RTIME BDAT LJMP BDATE TENE RETI 预置时间 TIME JNB P0 3 TEN1 MOV A MIN ADD A 01 DA A MOV MIN A CJNE A 60H TENA MOV MIN 0 SJMP TENA TEN1 JNB P0 2 TENA MOV A HOUR ADD A 01 DA A MOV HOUR A CJNE A 24H TENA MOV HOUR 0 TENA RETI 预置日期 DATE JNB P0 3 TEN3 MOV A MONTH ADD A 01 DA A MOV MONTH A CJNE A 13H TENB MOV MONTH 1 SJMP TENB TEN3 JNB P0 2 TEN4 MOV A YEAR ADD A 01 DA A MOV YEAR A SJMP TENB TEN4 JNB P0 4 TENB MOV A D

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论