基于51单片机电子万年历论文.pdf_第1页
基于51单片机电子万年历论文.pdf_第2页
基于51单片机电子万年历论文.pdf_第3页
基于51单片机电子万年历论文.pdf_第4页
基于51单片机电子万年历论文.pdf_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

1 基于基于 51 单片机电子万年历毕业论文单片机电子万年历毕业论文 摘 要 电子万年历是一种非常广泛日常计时工具 对现代社会越来越流行 它可以对年 月 日 周日 时 分 秒进行计时 还具有闰年补偿等多种功能 而且 DS1302 的使用寿命长 误差小 对于数字电子万年历采用直观的数字显示 可以同时显示年 月 日 周日 时 分 秒和温度等信息 还具有时间校准等功能 该电路采用 AT89S52 单片机作为核心 功 耗小 能在 3V 的低压工作 电压可选用 3 5V 电压供电 本设计是基于 51 系列的单片机进行的电子万年历设计 可以显示年月日时 分秒及周信息 具有可调整日期和时间功能 在设计的同时对单片机的理论基础 和外围扩展知识进行了比较全面准备 在硬件与软件设计时 没有良好的基础知 识和实践经验会受到很大限制 每项功能实现时需要那种硬件 程序该如何编写 算法如何实现等 没有一定的基础就不可能很好的实现 在编写程序过程中发现 以现有的相关知识要独自完成编写任务困难重重 在老师和同学的帮助下才完成 了程序部分的编写 万年历的设计过程在硬件与软件方面进行同步设计 硬件部分主要由 AT89C52 单片机 LED 显示电路 以及调时按键电路等组成 在单片机的选择上本人使用 了 AT89C52 单片机 该单片机适合于许多较为复杂控制应用场合 显示器使用 2 片 7SEG MPX8 CA 和一片 7SEG MPX4 CA 7SEG MPX8 CA 是一种八个共阳二极管显 示器 7SEG MPX4 CA 是一种四个共阳二极管显示器 为了能更轻松的控制这三 片显示器 本人使用了 3 片 74HC164 来驱动 74HC164 是 8 位边沿触发式移位 寄存器 串行输入数据 然后并行输出 软件方面主要包括日历程序 时间调整 程序 公历转阴历程序 显示程序等 程序采用汇编语言编写 以便更简单地实 现调整时间及阴历显示功能 所有程序编写完成后 在 wave 软件中进行调试 确定没有问题后 在 Proteus 软件中嵌入单片机内进行仿真 最后总在老师同学 的帮助以及自己的努力下完成了此次电子万年历的设计 关键词 时钟电钟 DS1302 DS18B20 动态扫描 单片机 目录目录 一一 设计要求与方案论证设计要求与方案论证 4 2 1 1 设计要求 4 1 2 系统基本方案选择和论证 4 1 2 1 单片机芯片的选择方案和论证 4 1 2 2 显示模块选择方案和论证 4 1 2 3 时钟芯片的选择方案和论证 4 二二 系统的硬件设计与实现系统的硬件设计与实现 5 2 1 电路设计框图 5 2 2 系统硬件概述 5 2 3 主要单元电路的设计 6 2 3 1 单片机主控制模块的设计 6 2 3 2 时钟电路模块的设计 6 2 3 3 电路原理及说明 7 2 3 4 显示模块的设计 8 三三 系统的软件设计系统的软件设计 9 3 1 程序流程框图 9 3 2 子程序的设计 9 3 2 1 读 写 DS1302 子程序 10 五五 作品总结作品总结 12 六六 致谢词致谢词 12 参考文献参考文献 13 附录一附录一 系统电路图 14 附录二附录二 系统程序清单 15 附录三附录三 系统使用说明书 40 3 一一 设计要求与方案论证设计要求与方案论证 1 11 1 设计要求设计要求 基本要求基本要求 具有年 月 日 星期 时 分 秒等功能 万年历具有闰月识别显示功能 具备年 月 日 星期 时 分 秒校准功能 2 2 创新要求创新要求 万年历具有阴历显示功能 具有测量室内温度功能 1 2 1 2 系统基本方案选择和论证系统基本方案选择和论证 1 2 11 2 1 单片机芯片的选择方案和论证单片机芯片的选择方案和论证 方案一 采用 89C51 芯片作为硬件核心 采用 Flash ROM 内部具有 4KB ROM 存储空间 能于 3V 的超 低压工作 而且与 MCS 51 系列单片机完全兼容 但是运用于电路设计中时由于不具备 ISP 在 线编程技术 当在对电路进行调试时 由于程序的错误修改或对程序的新增功能需要烧入程 序时 对芯片的多次拔插会对芯片造成一定的损坏 方案二 采用 AT89S52 片内 ROM 全都采用 Flash ROM 能以 3V 的超底压工作 同时也与 MCS 51 系列单片机完全该芯片内部存储器为 8KB ROM 存储空间 同样具有 89C51 的功能 且具有 在线编程可擦除技术 当在对电路进行调试时 由于程序的错误修改或对程序的新增功能需 要烧入程序时 不需要对芯片多次拔插 所以不会对芯片造成损坏 所以选择采用 AT89S52 作为主控制系统 1 2 2 1 2 2 显示模块选择方案和论证显示模块选择方案和论证 方案一 采用 LED 液晶显示屏 液晶显示屏的显示功能强大 可显示大量文字 图形 显示多样 清晰可见 但是价格昂贵 需要的接口线多 所以在此设计中不采用 LED 液晶显示屏 方案二 采用点阵式数码管显示 点阵式数码管是由八行八列的发光二极管组成 对于显示文 字比较适合 如采用在显示数字显得太浪费 且价格也相对较高 所以也不用此种作为显示 方案三 采用 LED 数码管动态扫描 LED 数码管价格适中 对于显示数字最合适 而且采用动态扫 描法与单片机连接时 占用的单片机口线少 所以采用了 LED 数码管作为显示 1 2 31 2 3 时钟芯片的选择方案和论证时钟芯片的选择方案和论证 方案一 直接采用单片机定时计数器提供秒信号 使用程序实现年 月 日 星期 时 分 秒 计数 采用此种方案虽然减少芯片的使用 节约成本 但是 实现的时间误差较大 所以不 采用此方案 方案二 4 采用 DS1302 时钟芯片实现时钟 DS1302 芯片是一种高性能的时钟芯片 可自动对秒 分 时 日 周 月 年以及闰年补偿的年进行计数 而且精度高 位的 RAM 做为数据暂存 区 工作电压 2 5V 5 5V 范围内 2 5V 时耗电小于 300nA 1 3 1 3 电路设计最终方案决定电路设计最终方案决定 综上各方案所述 对此次作品的方案选定 采用AT89S52作为主控制系统 DS1302提供 时钟 数字式温度传感器 LED 数码管动态扫描作为显示 二二 系统的硬件设计与实现系统的硬件设计与实现 2 1 2 1 电路设计框图电路设计框图 2 2 2 2 系统硬件概述系统硬件概述 本电路是由 AT89S52 单片机为控制核心 具有在线编程功能 低功耗 能在 3V 超低压工 作 时钟电路由 DS1302 提供 它是一种高性能 低功耗 带 RAM 的实时时钟电路 它可以 对年 月 日 周日 时 分 秒进行计时 具有闰年补偿功能 工作电压为 2 5V 5 5V 采用三线接口与 CPU 进行同步通信 并可采用突发方式一次传送多个字节的时钟信号或 RAM 数据 DS1302 内部有一个 31 8 的用于临时性存放数据的 RAM 寄存器 可产生年 月 日 周日 时 分 秒 具有使用寿命长 精度高和低功耗等特点 同时具有掉电自动保存功能 温度的采集由 DS18B20 构成 显示部份由 个数码管 74ls138 74ls47 译码器构成 使 用动态扫描显示方式对数字的显示 2 2 3 3 主要单元电路的设计主要单元电路的设计 2 3 12 3 1 单片机主单片机主控制模块的设计控制模块的设计 AT89S52 单片机为 40 引脚双列直插芯片 有四个 I O 口 P0 P1 P2 P3 MCS 51 单片机共 有 4 个 8 位的 I O 口 P0 P1 P2 P3 每一条 I O 线都能独立地作输出或输入 单片机的最小系统如下图所示 18 引脚和 19 引脚接时钟电路 XTAL1 接外部晶振和微调 电容的一端 在片内它是振荡器倒相放大器的输入 XTAL2 接外部晶振和微调电容的另一端 在片内它是振荡器倒相放大器的输出 第 9 引脚为复位输入端 接上电容 电阻及开关后够上 电复位电路 20 引脚为接地端 40 引脚为电源端 如图 1 所示 AT89S52 主控制模 块 DS1302 时钟模块 LED 数码管动态 扫描显示模块 键盘模块 5 图 1 主控制系统 2 3 22 3 2 时钟电路模块的设计时钟电路模块的设计 图 2 示出 DS1302 的引脚排列 其中 Vcc1 为后备电源 Vcc2 为主电源 在主电源关 闭的情况下 也能保持时钟的连续运行 DS1302 由 Vcc1 或 Vcc2 两者中的较大者供电 当 Vcc2 大于 Vcc1 0 2V 时 Vcc2 给 DS1302 供电 当 Vcc2 小于 Vcc1 时 DS1302 由 Vcc1 供电 X1 和 X2 是振荡源 外接 32 KHz 晶振 RST 是复位 片选线 通过把 RST 输入驱动置 高电平来启动所有的数据传送 RST 输入有两种功能 首先 RST 接通控制逻辑 允许地址 命令序列送入移位寄存器 其次 RST 提供终止单字节或多字节数据的传送手段 当 RST 为 高电平时 所有的数据传送被初始化 允许对 DS1302 进行操作 如果在传送过程中 RSTS 置为低电平 则会终止此次数据传送 I O 引脚变为高阻态 上电动行时 在 Vcc 大于等于 2 5V 之前 RST 必须保持低电平 中有在 SCLK 为低电平时 才能将 RST 置为高电平 I O 为串行数据输入端 双向 SCLK 始终是输入端 图 2 DS1302 的引脚图 2 3 32 3 3 电路原理及说明电路原理及说明 6 1 时钟芯片 DS1302 的工作原理 DS1302 在每次进行读 写程序前都必须初始化 先把 SCLK 端置 0 接着把 RST 端 置 1 最后才给予 SCLK 脉冲 读 写时序如下图 4 所示 图 5 为 DS1302 的控制字 此控 制字的位 7 必须置 1 若为 0 则不能把对 DS1302 进行读写数据 对于位 6 若对程序进行读 写时 RAM 1 对时间进行读 写时 CK 0 位 1 至位 5 指操作单元的地址 位 0 是读 写操 作位 进行读操作时 该位为 1 该位为 0 则表示进行的是写操作 控制字节总是从最低位 开始输入 输出的 表 6 为 DS1302 的日历 时间寄存器内容 CH 是时钟暂停标志位 当 该位为 1 时 时钟振荡器停止 DS1302 处于低功耗状态 当该位为 0 时 时钟开始运行 WP 是写保护位 在任何的对时钟和 RAM 的写操作之前 WP 必须为 0 当 WP 为 1 时 写保护 位防止对任一寄存器的写操作 2 DS1302 的控制字节 DS1302 的控制字如表 1 所示 控制字节的高有效位 位 7 必须是逻辑 1 如果它为 0 则不能把数据写入 DS1302 中 位 6 如果 0 则表示存取日历时钟数据 为 1 表示存取 RAM 数据 位 5 至位 1 指示操作单元的地址 最低有效位 位 0 如为 0 表示要进行写操作 为 1 表示进行读操作 控制字节总是从最低位开始输出 RAM RD 1 A4 A3 A2 A1 A0 CK WR 表 1 DS1302 的控制字格式 3 数据输入输出 I O 在控制指令字输入后的下一个 SCLK 时钟的上升沿时 数据被写入 DS1302 数据输入 从低位即位 0 开始 同样 在紧跟 8 位的控制指令字后的下一个 SCLK 脉冲的下降沿读出 DS1302 的数据 读出数据时从低位 0 位到高位 7 如下图 4 所示 图 4 DS1302 读 写时序图 4 DS1302 的寄存器 7 DS1302 有 12 个寄存器 其中有 7 个寄存器与日历 时钟相关 存放的数据位为 BCD 码形式 其日历 时间寄存器及其控制字见表 2 表 2 DS1302 的日历 时间寄存器 此外 DS1302 还有年份寄存器 控制寄存器 充电寄存器 时钟突发寄存器及与 RAM 相关的寄存器等 时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容 DS1302 与 RAM 相关的寄存器分为两类 一类是单个 RAM 单元 共 31 个 每个单元组态 为一个 8 位的字节 其命令控制字为 C0H FDH 其中奇数为读操作 偶数为写操作 另 一类为突发方式下的 RAM 寄存器 此方式下可一次性读写所有的 RAM 的 31 个字节 命 令控制字为 FEH 写 FFH 读 2 3 42 3 4 显示模块的设计显示模块的设计 如图 5 所示 采用动态扫描显示 由 个数码管 3 8 译码器 74LS138 接 1K 限流电 阻 再接 8550 三极管接到共阳数码管的 CoM 端作为选通位码 每位选择相应的列 74ls47 接 240 限流电阻 再接共行的 LED 数码管的断码 图 5 LED 动态扫描显示 三三 系统的软件设计系统的软件设计 3 13 1 程序流程框图程序流程框图 开始 初始化 读 写日期 时间和温度 8 图图 A A 主程序流程图主程序流程图 9 图 B 计算阳历程序流程图计算阳历程序流程图 10 图图 C C 时间调整程序流程图时间调整程序流程图 11 3 2 3 2 子程序的设计子程序的设计 3 2 1 3 2 1 读读 写写 DS1302DS1302 子程序子程序 写 1302 程序 WRITE CLR SCLK NOP SETB RST NOP MOV A 32H MOV R4 8 WRITE1 RRC A 送地址给 1302 NOP NOP CLR SCLK NOP NOP NOP MOV IO C NOP NOP NOP SETB SCLK NOP NOP DJNZ R4 WRITE1 CLR SCLK NOP MOV A 31H MOV R4 8 WRITE2 RRC A NOP 送数据给 1302 CLR SCLK NOP NOP MOV IO C NOP NOP NOP SETB SCLK NOP NOP DJNZ R4 WRITE2 CLR RST RET 读 1302 程序 READ CLR SCLK NOP NOP SETB RST NOP MOV A 32H MOV R4 8 READ1 RRC A 送地址给 1302 NOP MOV IO C NOP NOP NOP SETB SCLK NOP NOP NOP CLR SCLK NOP NOP DJNZ R4 READ1 MOV R4 8 READ2 CLR SCLK NOP 从 1302 中读出数据 NOP NOP MOV C IO NOP NOP NOP NOP NOP RRC A NOP 12 NOP NOP NOP SETB SCLK NOP DJNZ R4 READ2 MOV 31H A CLR RST RET 五五 作品总结作品总结 在整个设计过程中 发挥团队精神 分工合作 充分发挥人的主观能动性 自主学习 学 到了许多没学到的知识 较好的完成了作品 达到了预期的目的 在最初的设计中 发挥 三 个臭皮匠 顶个诸葛亮 的作用 相互学习 相互讨论 研究 完了最初的设想 在电路焊 接时虽然没什么大问题 但从中也知道了焊接在整个作品中的重要性 电路工程量大 不能 心急 一个个慢慢来不能急于求成 反而达到事半功倍的效果 对电路的设计 布局要先有 一个好的构思 才显得电路板美观 大方 程序编写中 由于思路不清晰 开始时遇到了很 多的问题 经过静下心来思考 和同组员的讨论 理清了思路 反而得心应手 在此次设计 中 知道了做凡事要有一颗平常的心 不要想着走捷径 一步一脚印 也练就了我们的耐心 做什么事都在有耐心 此次比赛中学到了很多很多东西 这是最重要的 总之 参加电子竞 赛我们的能力得到了全方位的提高 致谢词 感谢学院给我们提供了一个展现自己的舞台 给我们一次难得煅炼的机会 使得我们的 动手能力和专业技能都有了很大的提高 在做作品的日子里得到了刘老师的悉心指导 在此向我们的指导教师致以诚挚的谢意 感谢提供相关技术帮助的老师和同学 你们的支持和鼓励使我们对这次的作品完成有了信心 和动力 也给了我们很多无私的帮助和支持 我们在此深表谢意 姓名 龚泽汗 参考文献 1 刘勇 编 数字电路 电子工业出版社 2004 2 陈正振 编 电子电路设计与制作 广西交通职业技术学院信息工程系 2007 3 杨子文 编 单片机原理及应用 西安电子科技大学出版社 2006 4 王法能 编 单片机原理及应用 科学出版社 2004 2010 年 5 月 20 日 附录一 系统电路图 13 14 附录二 系统程序清单 CONFIG12 EQU 7FH TEMPH EQU 21H TEMPL EQU 20H REG2 EQU 22H REG3 EQU 23H REG4 EQU 24H DAT EQU P0 7 SCLK EQU P3 2 IO EQU P3 3 RST EQU P3 4 year DATA 66H month DATA 65H week DATA 64H day DATA 63H hour DATA 62H mintue DATA 61H second DATA 60H ORG 0000H LJMP START ORG 001BH LJMP INTT1 START 初值 LCALL ZJ SETB EA MOV SCON 00H 串行输出 方式 0 MOV TMOD 10H 计数器 1 方式 1 MOV TL1 00H MOV TH1 00H MOV 32H 8EH MOV 31H 00H 允许写 1302 LCALL WRITE MOV 32H 90H MOV 31H 0A6H 1302 充电 充电电流 1 1MA LCALL WRITE 主程序 MAIN1 MOV 32H 8DH 读出年 LCALL READ MOV year 31H MOV 32H 8BH 读出星期 LCALL READ MOV week 31H MOV 32H 89H 读出月 LCALL READ MOV month 31H MOV 32H 87H 读出日 LCALL READ MOV day 31H MOV 32H 85H 读出小时 LCALL READ MOV hour 31H MOV 32H 83H 读出分钟 LCALL READ MOV mintue 31H MOV 32H 81H 读出秒 LCALL READ MOV second 31H 分离缓存 MOV R0 year 年分离 送显示缓存 LCALL DIVIDE MOV 7BH R1 MOV 4BH R1 MOV 7CH R2 MOV 4CH R2 MOV 78H week MOV 48H week MOV R0 month 月分离 送显示缓存 LCALL DIVIDE MOV 79H R1 MOV 49H R1 MOV 7AH R2 MOV 4AH R2 MOV R0 day 日分离 送显示缓存 LCALL DIVIDE MOV 76H R1 15 MOV 46H R1 MOV 77H R2 MOV 47H R2 MOV R0 hour 小时分离 送显示缓存 LCALL DIVIDE MOV 74H R1 MOV 44H R1 MOV 75H R2 MOV 45H R2 MOV R0 mintue 分钟分离 送显示缓存 LCALL DIVIDE MOV 72H R1 MOV 42H R1 MOV 73H R2 MOV 43H R2 MOV R0 second 秒分离 送显示缓存 LCALL DIVIDE MOV 70H R1 MOV 40H R1 MOV 71H R2 MOV 41H R2 CLR EA LCALL TOUTOU SETB EA LCALL DISPLAY LCALL GENGXIAN 更新农历程序 JNB P0 1 SETG111 JNB F0 SSS setb P0 4 非闰月 则 p0 4 清 零 指示灯亮 LJMP MAIN1 SETG111 LJMP SETG SSS clr P0 4 闰月 则 p0 4 置位 指示 灯不亮 LJMP MAIN1 温度 TOUTOU LCALL CHUSHI LCALL RDTEMP MOV A TEMPL ANL A 11110000B MOV TEMPL A MOV A TEMPH ANL A 00000111B ORL A TEMPL SWAP A MOV 25H A MOV A 25H MOV B 64H DIV AB MOV A B MOV B 0AH DIV AB SWAP A ORL A B MOV 10H A RET CHUSHI LCALL RESET MOV A 0CCH LCALL WRITE111 MOV A 4EH LCALL WRITE111 MOV A CONFIG12 LCALL WRITE111 RET RDTEMP LCALL RESET MOV A 0CCH LCALL WRITE111 MOV A 44H LCALL WRITE111 LCALL DL1MS LCALL RESET MOV A 0CCH LCALL WRITE111 MOV A 0BEH LCALL WRITE111 LCALL ERAD111 MOV TEMPL A LCALL ERAD111 MOV TEMPH A RET RESET LA 16 SETB DAT MOV 52H 200 LB CLR DAT DJNZ 52H LB SETB DAT MOV 52H 30 LC DJNZ 52H LC CLR C ORL C DAT JC LB MOV 58H 80 LD ORL C DAT JC LP DJNZ 58H LD SJMP LA LP MOV 52H 250 LF DJNZ 52H LF RET WRITE111 MOV 53H 8 W51HA SETB DAT MOV 54H 8 RRC A CLR DAT W52HA DJNZ 54H W52HA MOV DAT C MOV 54H 30 W53HA DJNZ 54H W53HA DJNZ 53H W51HA SETB DAT RET ERAD111 CLR EA MOV 58H 8 RD1A CLR DAT MOV 54H 6 NOP SETB DAT RD2A DJNZ 54H RD2A MOV C DAT RRC A MOV 55H 30 RD3A DJNZ 55H RD3A DJNZ 58H RD1A SETB DAT RET 公历设置程序 SETG SETB TR1 SETB ET1 MOV 32H 8EH MOV 31H 00H 允许写 1302 LCALL WRITE MOV 32H 80H MOV 31H 80H 1302 停止振荡 LCALL WRITE GWAIT LCALL DISPLAY JNB P0 1 GWAIT SETG1 LCALL DISPLAY JNB P0 1 SETG2 JNB P0 2 GADDYEAR JNB P0 3 JIANYEAR AJMP SETG1 GADDYEAR MOV R7 66H 年加一 LCALL ADD1 MOV 66H A CJNE A 51H GADDYEAR1 MOV 66H 00H AJMP GADDYEAR1 JIANYEAR MOV R7 66H 年减一 LCALL JIAN1 MOV 66H A 17 CJNE A 00H GADDYEAR1 MOV 66H 51H GADDYEAR1 MOV 32H 8CH 年值送人 1302 MOV 31H 66H LCALL WRITE MOV R0 66H LCALL DIVIDE 年分离送显示缓存 MOV 4BH R1 MOV 7BH R1 MOV 4CH R2 MOV 7CH R2 WAITT1 LCALL DISPLAY JNB P0 2 WAITT1 JNB P0 3 WAITT1 AJMP SETG1 SETG2 SETB 0AH 调月时闪标志 GWAIT2 LCALL DISPLAY JNB P0 1 GWAIT2 SETG3 LCALL DISPLAY JNB P0 1 SETG4 JNB P0 2 GADDMONTH JNB P0 3 JIANMONTH AJMP SETG3 GADDMONTH MOV R7 65H 月加一 LCALL ADD1 MOV 65H A CJNE A 13H GADDMONTH1 MOV 65H 01H AJMP GADDMONTH1 JIANMONTH MOV R7 65H 月减一 LCALL JIAN1 MOV 65H A CJNE A 00H GADDMONTH1 MOV 65H 12H GADDMONTH1 MOV 32H 88H 月值送人 1302 MOV 31H 65H LCALL WRITE MOV R0 65H LCALL DIVIDE 月分离 送显示缓存 MOV 79H R1 MOV 49H R1 MOV 7AH R2 MOV 4AH R2 WAITT2 LCALL DISPLAY JNB P0 2 WAITT2 JNB P0 3 WAITT2 AJMP SETG3 SETG4 SETB 0BH 调日时闪标志 GWAIT4 LCALL DISPLAY JNB P0 1 GWAIT4 SETG5 LCALL DISPLAY JNB P0 1 SETG6 JNB P0 2 GADDDAY JNB P0 3 JIANDAY AJMP SETG5 GADDDAY MOV R7 63H 日加一 LCALL ADD1 MOV 63H A CJNE A 32H GADDDAY1 MOV 63H 01H JIANDAY MOV R7 63H 日减一 LCALL JIAN1 MOV 63H A CJNE A 00H GADDDAY1 MOV 63H 31H GADDDAY1 MOV 32H 86H 日值送人 1302 MOV 31H 63H LCALL WRITE MOV R0 63H LCALL DIVIDE 日分离 送显示缓存 MOV 76H R1 MOV 46H R1 MOV 77H R2 18 MOV 47H R2 WAITT3 LCALL DISPLAY JNB P0 2 WAITT3 JNB P0 3 WAITT3 AJMP SETG5 SETG6 SETB 0CH 调星期时闪标志 GWAIT6 LCALL DISPLAY JNB P0 1 GWAIT6 SETG7 LCALL DISPLAY JNB P0 1 SETG8 JNB P0 2 GADDWEEK JNB P0 3 JIANWEEK AJMP SETG7 GADDWEEK MOV R7 64H 星期加一 LCALL ADD1 MOV 64H A CJNE A 07H GADDWEEK1 MOV 64H 00H AJMP GADDWEEK1 JIANWEEK MOV R7 64H 星期减一 LCALL JIAN1 MOV 64H A CJNE A 00H GADDWEEK1 MOV 64H 06H GADDWEEK1 MOV 32H 8AH MOV 31H 64H 星期值送人 1302 LCALL WRITE MOV R0 64H LCALL DIVIDE 星期值分离送显示缓存 MOV 48H R1 MOV 78H R1 WAITT4 LCALL DISPLAY JNB P0 2 WAITT4 JNB P0 3 WAITT4 AJMP SETG7 SETG8 SETB 0DH 调小时时闪标志 GWAIT8 LCALL DISPLAY JNB P0 1 GWAIT8 SETG9 LCALL DISPLAY JNB P0 1 SETG10 JNB P0 2 GADDHOUR JNB P0 3 JIANHOUR AJMP SETG9 GADDHOUR MOV R7 62H 小时加一 LCALL ADD1 MOV 62H A CJNE A 24H GADDHOUR1 MOV 62H 00H AJMP GADDHOUR1 JIANHOUR MOV R7 62H 小时减一 LCALL JIAN1 MOV 62H A CJNE A 00H GADDHOUR1 MOV 62H 23H GADDHOUR1 MOV 32H 84H 小时值送人 1302 MOV 31H 62H LCALL WRITE MOV R0 62H LCALL DIVIDE 小时值分离送显示 缓存 MOV 74H R1 MOV 44H R1 MOV 75H R2 MOV 45H R2 WAITT5 LCALL DISPLAY JNB P0 2 WAITT5 JNB P0 3 WAITT5 AJMP SETG9 SETG10 SETB 0EH 调分时候闪标志 GWAIT10 LCALL DISPLAY JNB P0 1 GWAIT10 19 SETG11 LCALL DISPLAY JNB P0 1 SETGOUT JNB P0 2 GADDMINTUE JNB P0 3 JIANMINTUE AJMP SETG11 GADDMINTUE MOV R7 61H 分钟加一 LCALL ADD1 MOV 61H A CJNE A 60H GADDMINTUE1 MOV 61H 00H AJMP GADDMINTUE1 JIANMINTUE MOV R7 61H 分钟减一 LCALL JIAN1 MOV 61H A CJNE A 00H GADDMINTUE1 MOV 61H 59H GADDMINTUE1 MOV 32H 82H 分钟值送人 1302 MOV 31H 61H LCALL WRITE MOV R0 61H LCALL DIVIDE 分钟值分离送显示缓 存 MOV 72H R1 MOV 42H R1 MOV 73H R2 MOV 43H R2 WAITT6 LCALL DISPLAY JNB P0 2 WAITT6 JNB P0 3 WAITT6 AJMP SETG11 SETGOUT LCALL DISPLAY JNB P0 1 SETGOUT LCALL GENGXIAN MOV 32H 80H MOV 31H 00H 1302 晶振开始振荡 LCALL WRITE MOV 32H 8EH MOV 31H 80H 禁止写入 1302 LCALL WRITE CLR 08H CLR 09H CLR 0AH CLR 0BH CLR 0CH CLR 0DH CLR 0EH CLR 0FH CLR ET1 关闪中断 CLR TR1 LJMP MAIN1 闪动调时程序 INTT1 PUSH ACC PUSH PSW GFLASH CPL 0FH JB 0FH GFLASH1 MOV 7CH 4CH 全部显示 MOV 7BH 4BH MOV 7AH 4AH MOV 79H 49H MOV 78H 48H MOV 77H 47H MOV 76H 46H MOV 75H 45H MOV 74H 44H MOV 73H 43H MOV 72H 42H MOV 71H 41H MOV 70H 40H GFLASHOUT POP PSW POP ACC RETI GFLASH1 JB 0AH GFLASH2 调年闪 MOV 7CH 0FH MOV 7BH 0FH AJMP GFLASHOUT GFLASH2 JB 0BH GFLASH3 调月闪 20 MOV 7AH 0FH MOV 79H 0FH AJMP GFLASHOUT GFLASH3 JB 0CH GFLASH4 调日闪 MOV 77H 0FH MOV 76H 0FH AJMP GFLASHOUT GFLASH4 JB 0DH GFLASH5 调星期闪 MOV 78H 0FH AJMP GFLASHOUT GFLASH5 JB 0EH GFLASH6 调小时闪 MOV 75H 0FH MOV 74H 0FH AJMP GFLASHOUT GFLASH6 MOV 73H 0FH 调分钟闪 MOV 72H 0FH AJMP GFLASHOUT 加一程序 ADD1 MOV A R7 ADD A 1 DA A RET 减一程序 JIAN1 MOV A R7 DEC A CJNE A 4FH KK1 MOV A 49H KK1 CJNE A 3FH KK2 MOV A 39H KK2 CJNE A 2FH KK3 MOV A 29H KK3 CJNE A 1FH KK4 MOV A 19H KK4 CJNE A 0FH KK5 MOV A 09H KK5 RET 分离程序 DIVIDE MOV A R0 ANL A 0FH MOV R1 A MOV A R0 SWAP A ANL A 0FH MOV R2 A RET 写1302程序 WRITE CLR SCLK NOP SETB RST NOP MOV A 32H MOV R4 8 WRITE1 RRC A 送地址给 1302 NOP NOP CLR SCLK NOP NOP NOP MOV IO C NOP NOP NOP SETB SCLK NOP NOP DJNZ R4 WRITE1 CLR SCLK 21 NOP MOV A 31H MOV R4 8 WRITE2 RRC A NOP 送数据给 1302 CLR SCLK NOP NOP MOV IO C NOP NOP NOP SETB SCLK NOP NOP DJNZ R4 WRITE2 CLR RST RET 读 1302 程序 READ CLR SCLK NOP NOP SETB RST NOP MOV A 32H MOV R4 8 READ1 RRC A 送地址给 1302 NOP MOV IO C NOP NOP NOP SETB SCLK NOP NOP NOP CLR SCLK NOP NOP DJNZ R4 READ1 MOV R4 8 READ2 CLR SCLK NOP 从 1302 中读出数据 NOP NOP MOV C IO NOP NOP NOP NOP NOP RRC A NOP NOP NOP NOP SETB SCLK NOP DJNZ R4 READ2 MOV 31H A CLR RST RET BCD 码转换为 10 进制程序 BCD 10 MOV A R0 ANL A 0FH MOV R1 A 高位 10 加低位 MOV A R0 SWAP A ANL A 0FH MOV B 10 MUL AB ADD A R1 MOV R0 A RET 查一年数据程序 CHECKMONTH LCALL BCD 10 22 农历和公历为同一年 NEW 此时 R2 中的值为 FFH 时 R3 有值 否 则为 0 NEW NOP M1 MOV A R2 R2 减一月天数 CLR C SUBB A 29 MOV R1 A MOV A R6 JB ACC 6 SM11 MOV A R2 CLR C SUBB A 30 MOV R1 A SM11 JC SM12 MOV A R1 R2 减 1 月天数 够减 MOV R2 A 转二月 AJMP M2 SM12 CJNE R3 00H M13 R2 减 1 月天数 LJMP Y1 不够减 判 R3 为 0 否 M13 MOV A R2 不为 0 R3 加到 R2 中 ADD A R3 再让一月减 MOV R2 A 还不够 则转 Y1 MOV R3 00H AJMP M1 M2 CLR C R2 减一月天数 够减 MOV A R2 转三月 SUBB A 29 MOV R1 A MOV A R6 JB ACC 5 M21 MOV A R2 CLR C SUBB A 30 MOV R1 A M21 JC M22 MOV A R1 R2 减 2 月天数 够减 MOV R2 A AJMP MM2 M22 CJNE R3 00H M23 R2 减 2 月天数 LJMP Y2 不够减 判 R3 为 0 否 M23 MOV A R2 不为 0 R3 加到 R2 中 ADD A R3 再让二月减 MOV R2 A 还不够 则转 Y2 MOV R3 00H AJMP M2 MM2 LCALL CHECKRE 查 2 月 如果不为闰月 CJNE A 02H M3 转 3 月 RM2 MOV A R4 ANL A 0FH JNZ RM21 MOV A R2 CLR C SUBB A 30 MOV R1 A AJMP RM22 RM21 MOV A R2 CLR C SUBB A 29 MOV R1 A RM22 JC RM23 MOV A R1 R2 减闰 2 月天数 够减 MOV R2 A 转 3 月 AJMP M3 RM23 CJNE R3 00H RM24 R2 减闰 2 月天数 LJMP RY2 不够减 判 R3 为 0 否 RM24 MOV A R2 不为 0 R3 加到 R2 中 ADD A R3 再让闰 2 月减 MOV R3 00H 还不够 则转 RY2 23 SUBB A 30 MOV R1 A M121 CJNE R3 00H M122 R2 减 12 月天数 LJMP Y12 不够减 判 R3 为 0 否 M122 MOV A R2 不为 0 R3 加到 R2 中 ADD A R3 再让 12 月减 MOV R2 A 还不够 则转 Y12 MOV R3 00H LJMP M12 Y1 MOV A R2 MOV R0 A R2 中为日的值 LCALL D BCD MOV 56H A MOV 57H 01H CLR F0 非闰月 LJMP S PLAY Y2 CJNE R2 00H Y21 MOV A R6 R2 中为 0 则为前一个 月 MOV 56H 29H 的的最后一天 JB ACC 6 Y22 MOV 56H 30H Y22 MOV 57H 01H CLR F0 LJMP S PLAY Y21 MOV A R2 MOV R0 A R2 中为日的值 LCALL D BCD MOV 56H A MOV 57H 02H CLR F0 LJMP S PLAY RY2 CJNE R2 00H RY21 MOV 56H 29H R2 中为 0 则为前一个 月 MOV A R6 的的最后一天 JB ACC 5 RY22 MOV 56H 30H RY22 MOV 57H 02H CLR F0 LJMP S PLAY RY21 MOV A R2 R2 中为日的值 MOV R0 A LCALL D BCD MOV 56H A MOV 57H 02H SETB F0 闰月 LJMP S PLAY Y3 CJNE R2 00H Y31 LCALL CHECKRE 查前一个月是否为 闰月 CJNE A 02H Y32 MOV 56H 29H 前一个月是闰月 MOV A R4 ANL A 0FH R2 中为 0 则为前一个月 JNZ Y33 的的最后一天 MOV 56H 30H MOV 57H 02H SETB F0 LJMP S PLAY Y33 MOV 57H 02H SETB F0 LJMP S PLAY Y32 MOV 56H 29H 前一个月不是闰月 MOV A R6 JB ACC 5 Y34 MOV 56H 30H Y34 MOV 57H 02H CLR F0 LJMP S PLAY Y31 MOV A R2 MOV R0 A R2 中为日的值 24 LCALL D BCD MOV 56H A MOV 57H 03H CLR F0 LJMP S PLAY RY3 CJNE R2 00H RY31 MOV 56H 29H MOV A R6 JB ACC 4 RY32 R2 中为 0 则为前一 个月 MOV 56H 30H 的的最后一天 RY32 MOV 57H 03H CLR F0 LJMP S PLAY RY31 MOV A R2 R2 中为日的值 MOV R0 A LCALL D BCD MOV 56H A MOV 57H 03H SETB F0 LJMP S PLAY Y4 CJNE R2 00H Y41 LCALL CHECKRE 查前一个月是否为闰 月 CJNE A 03H Y42 MOV 56H 29H 前一个月是闰月 MOV A R4 R2 中为 0 则为前一 个月 ANL A 0FH 的最后一天 JNZ Y43 MOV 56H 30H MOV 57H 03H SETB F0 LJMP S PLAY Y43 MOV 57H 03H SETB F0 LJMP S PLAY Y42 MOV 56H 29H 前一个月不是闰月 MOV A R6 JB ACC 4 Y44 MOV 56H 30H Y44 MOV 57H 03H CLR F0 LJMP S PLAY Y41 MOV A R2 R2 中为日的值 MOV R0 A LCALL D BCD MOV 56H A MOV 57H 04H CLR F0 LJMP S PLAY RY4 CJNE R2 00H RY41 MOV 56H 29H R2 中为 0 则为前一 个月 MOV A R6 的的最后一天 JB ACC 2 RY42 MOV 56H 30H RY42 MOV 57H 04H CLR F0 LJMP S PLAY RY41 MOV A R2 R2 中为日的值 MOV R0 A LCALL D BCD MOV 56H A MOV 57H 04H SETB F0 LJMP S PLAY Y5 CJNE R2 00H Y51 LCALL CHECKRE 查前一个月是否为闰月 CJNE A 04H Y52 MOV 56H 29H 前一个月是闰月 MOV A R4 R2 中为 0 则为前一个月 ANL A 0FH 的最后一天 JNZ Y53 MOV 56H 30H MOV 57H 04H 25 SETB F0 LJMP S PLAY Y53 MOV 57H 04H SETB F0 LJMP S PLAY Y52 MOV 56H 29H 前一个月不是闰月 MOV A R6 JB ACC 2 Y54 MOV 56H 30H Y54 MOV 57H 04H CLR F0 LJMP S PLAY Y51 MOV A R2 R2 中为日的值 MOV R0 A LCALL D BCD MOV 56H A MOV 57H 05H CLR F0 LJMP S PLAY RY5 CJNE R2 00H RY51 MOV 56H 29H R2 中为 0 则为前一 个月 MOV A R6 的最后一天 JB ACC 1 RY52 MOV 56H 30H RY52 MOV 57H 05H CLR F0 LJMP S PLAY RY51 MOV A R2 R2 中为日的值 MOV R0 A LCALL D BCD MOV 56H A MOV 57H 05H SETB F0 LJMP S PLAY Y6

温馨提示

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

评论

0/150

提交评论