基于单片机在电子万年历中的应用_第1页
基于单片机在电子万年历中的应用_第2页
基于单片机在电子万年历中的应用_第3页
基于单片机在电子万年历中的应用_第4页
基于单片机在电子万年历中的应用_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

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

文档简介

河南职业技术学院 毕业设计 论文 题 目 基于单片机在电子万年历中的应用 系 分院 电气工程系 学生姓名 胡俊朋 学 号 10112034 专业名称 电气自动化 指导教师 施利春 2012 年 11 月 30 日 河南职业技术学院 电气工程 系 分院 毕业设计 论文 任务书 姓 名胡俊朋专 业电气自动化班 级电气 103 毕业设计 论文 题 目 基于单片机在电子万年历中的应用 毕业设计 论文 选题的目的与意义毕业设计 论文 选题的目的与意义 研究结果表明 由于万年历的应用相当普遍 所以其设计的核心在于硬件成本 的节约软件算法的优化 力求做到物美价廉 才能拥有更广阔的市场前景求硬件层 面而言操作相对简单 界面比较友好 毕业设计 论文 的资料收集情况 含指定参考资料 毕业设计 论文 的资料收集情况 含指定参考资料 李文华 单片机应用技术 人民邮电出版社 北京 2011 1 刘勇 数字电路 电子工业出版社 2004 2 王东锋 王会良 董冠强 单片机 C 语言 电子工业出版社 2011 3 王萍 电子技术实验教程 机械工业出版社 2009 4 楼然苗 李光飞 51 系列单片机设计实例 M 北京航空航天大学出版社 2003 5 朱定华 戴汝平 单片微机原理与应用 M 清华大学出版社 2003 6 胡汉才 单片机原理与接口技术 M 清华大学出版社 2004 7 毕业设计 论文 工作进度计划毕业设计 论文 工作进度计划 2012 年 10 月 05 日 接收设计任务 并制订设计计划 2012 年 10 月 06 日 2012 年 11 月 25 日单片机及电子万年历相关资料搜集 2012 年 10 月 26 日 2012 年 10 月 30 日 对电子万年历的程序进行模拟调试 2012 年 10 月 31 日 2012 年 11 月 05 日 修订设计内容并按照要求进行排版 2012 年 11 月 20 日 终稿 接受任务日期接受任务日期 20122012 年年 1111 月月 2 2 日日 要求完成日期要求完成日期 20122012 年年 1111 月月 2020 日日 学学 生签名 生签名 胡俊朋胡俊朋 20122012 年年 1111 月月 3030 日日 指导教师签名 指导教师签名 年年 月月 日日 系 分院 系 分院 主任 院长 签名 主任 院长 签名 年年 月月 日日 毕业设计 论文 指导教师评阅意见表 姓 名胡俊朋学 号 10112034 性 别男 专 业电气自动化班 级电气 103 毕业设计 论文 题 目 基于单片机在电子万年历中的应用 评 阅 意 见 成绩 指导教师签字年 月 日 毕业设计 论文 答辩意见表 姓 名胡俊朋学 号 10112034 性 别男 专 业电气自动化班 级电气 103 毕业设计 论文 题 目 基于单片机在电子万年历中的应用 答辩时间地 点 姓 名职 称学 历从事专业 组 长 成 员 答 辩 小 组 成 员 秘 书 答 辩 小 组 意 见 答 辩 成 绩 答辩小组组长签名 年 月 日 目 录 摘要 1 1 系统基本方案选择和论证 2 1 1 核心单片机的选择 2 1 2 显示模块选择方案和论证 2 1 3 时钟芯片的选择方案和论证 2 1 4 温度传感器的选择方案与论证 3 2 系统硬件的设计与实现 4 2 1 电路设计框图 4 2 2 系统硬件概述 4 2 3STC90C516RD 单片机主控制模块的设计 5 2 4 单片机中断系统 6 2 5 时钟电路模块的设计 7 2 6 温度采集模块设计 9 2 7 显示模块的设计 10 3 各器件工作原理 11 3 1 时钟芯片 DS1302 的工作原理 11 3 2LCD12864 工作原理及说 11 4 系统的软件设计 19 4 1 主程序流程框图 19 4 2 子程序 21 4 3 软件测试 21 总结 22 参考文献 23 基于单片机在电子万年历中的应用 胡俊朋 摘摘 要 要 本文借助电路仿真软件 ISIS 7 Professional 对基于 STC90C516RD 单片机的电子万年历 的设计方法及下载测试进行了全面的阐述 该电子万年历在硬件方面主要采用 STC90C516RD 单片机作 为主控核心 由 DS1302 时钟芯片提供时钟 LCD12864 点阵液晶显示屏显示 STC90C516RD 单片机是 由 Atmel 公司推出的 功耗小 电压可选用 4 6V 电压供电 DS1302 时钟芯片是美国 DALLAS 公司推 出的具有涓细电流充电功能的低功耗实时时钟芯片 它可以对年 月 日 星期 时 分 秒进行计 时 还具有闰年补偿等多种功能 而且 DS1302 的使用寿命长 误差小 数字显示是采用的 LCD 液晶显 示屏来显示 可以同时显示年 月 日 星期 时 分 秒等信息 此外 该电子万年历还具有时间 校准等功能 在软件方面 主要包括日历程序 时间调整程序 显示程序等 所有程序编写完成后 在 Keil 软件中进行调试 确定没有问题后 进行下载调试 论文主要研究了液晶显示器及时钟芯片 DS1302 温度传感器 DS18B20 与单片机之间的硬件相互之 间通信 对数种硬件连接方案进行了详尽的比较 在软件方面对日历算法也进行了论述 研究结果表明 由于万年历的应用相当普遍 所以其设计的核心在于硬件成本的节约软件算法的 优化 力求做到物美价廉 才能拥有更广阔的市场前景 关键词 单片机 STC90C516RD DS1302 DS18B20 LCD12864 随着社会 科技的发展 人类得知时间 从观太阳 摆钟到现在电子钟 不断研究 创新 为了在观测时间的同时 能够了解其它与人类密切相关的信息 比如温度 星期 日期等 电子万年历诞生了 它集时间 日期 星期和温度功能于一身 具有读取方便 显示直观 功能多样 电路简洁等诸多优点 伴随着电子技术的迅速发展 特别是随大 规模集成电路出现 给人类生活带来了根本性的改变 由其是单片机技术的应用产品已 经走进了千家万户 电子万年历的出现给人们的生活带来的诸多方便 作为一种附加功 能 现在越来越广泛的被应用于各种电子产品中 具有广阔的市场前景 通过以往对工业自动化的相关课程学习和理解独立完成制作电子万年历的设计 电 子万年历作为电子类小产品不仅是市场上的宠儿 也是单片机设计培训中一个很实用的 题目 因为这个课题有很好的开放性和可发挥性 对制作者的要求比较高 不仅考察了 对单片机的掌握能力更加强调了对单片机扩展的应用 而且要求设计的电子万年历在操 作上力求简洁 功能上尽量齐全 显示界面也要出色 所以 电子万年历制作无论从实 用目的 还是从培养能力的角度来看都是很有价值的毕业设计课题 本电子万年历的设 计在硬件方面主要采用 STC90C516RD 单片机作为主控核心 由 DS1302 时钟芯片提供时钟 DS18B20 温度传感器 LCD12864 点阵液晶显示屏显示 一 系统基本方案选择和论证 一 核心单片机芯片的选择 本设计采用 STC90C516RD 芯片作为硬件核心 该芯片采用 Flash ROM 内部具有 64KB ROM 存储空间 相对于本设计而言程序空间完全够用 STC90C516RD 系列单片机是宏 晶科技推出的新一代超强 高速 低功耗的单片机 指令代码完全兼容传统 8051 单片机 12 时钟 机器周期和 6 时钟 机器周期可任意选择 内部集成 MAX810 专用复位电路 时钟 频率在 12MHz 以下时 复位脚可直接接地 共 3 个 16 位定时器 计数器 其中定时器 0 还可以当成 2 个 8 位定时器使用 外部中断 4 路 下降沿中断或低电平触发中断 Power Down 模式可由外部中断低电平触发中断方式唤醒 通用异步串行口 UART 还可用定时 器软件实现多个 UART 工作温度范围 0 75 40 85 封装 LQFP 44 PDIP 40 PLCC 44 工作电压 5V 3 5V 注意 当在对电路进行调试时 由于程序的错误修 改或对程序的新增功能需要烧入程序时 避免芯片的多次拔插对芯片造成的损坏 二 显示模块选择方案和论证 方案一 采用点阵式数码管显示 点阵式数码管是由八行八列的发光二极管组成 对于显示文 字比较适合 如采用在显示数字显得太浪费 成本较高 所以不采用此种作为显示 方案二 采用 LED 数码管动态扫描 LED 数码管价格虽适中 对于显示数字也最合适 而且采用动 态扫描法与单片机连接时 占用的单片机口线少 但是由于数码管动态扫描需要借助 74LS164 移位寄存器进行移位 该芯片在程序和电路调试时往往会有很多障碍 所以不采 用 LED 数码管作为显示 方案三 采用 LCD 液晶显示屏 液晶显示屏的显示功能强大 可显示大量汉字 图形 显示多样 清晰可见 对于电子万年历而言 一个 12864 的液晶屏即可 价格也还能接受 需要的接 口线较少 便于调试 所以此设计中采用 12864 液晶显示屏作为显示模块 三 时钟芯片的选择方案和论证 方案一 直接采用单片机定时计数器提供秒信号 使用程序实现年 月 日 星期 时 分 秒计数 采用此种方案虽然可以减少时钟芯片的使用 节约成本 但是 程序量较大不 易修改而且实现的时间误差较大 所以不采用此方案 方案二 采用 DS1302 时钟芯片实现时钟 DS1302 是美国 DALLAS 公司推出的一种高性能 低 功耗 带 RAM 的实时时钟电路 它可以对年 月 日 周日 时 分 秒进行计时 具 有闰年补偿功能 工作电压为 2 5V 5 5V 采用三线接口与 CPU 进行同步通信 并可采 用突发方式一次传送多个字节的时钟信号或 RAM 数据 DS1302 内部有一个 31 8 的用于 临时性存放数据的 RAM 寄存器 DS1302 是 DS1202 的升级产品 与 DS1202 兼容 但增加 了主电源 Vcc2 后背电源 Vcc1 双电源引脚 同时提供了对后背电源进行涓细电流充电的 能力 主要特点是采用串行数据传输 可为掉电保护电源提供可编程的充电功能 并且 可以关闭充电功能 采用普通 32 768kHz 晶振 因此 本设计中采用 DS1302 提供时钟信 号 四 温度传感器的选择方案与论证 方案一 使用热敏电阻作为传感器 用热敏电阻与一个相应阻值电阻相串联分压 利用热敏 电阻阻值随温度变化而变化的特性 采集这两个电阻变化的分压值 并进行 A D 转换 此设计方案需用 A D 转换电路 增加硬件成本而且热敏电阻的感温特性曲线并不是严格 线性的 会产生较大的测量误差 因此 不采用此方法 方案二 采用数字式温度传感器 DS18B20 此类传感器为数字式传感器而且仅需要一条数据线 进行数据传输 易于与单片机连接 可以避免 A D 模数转换模块 降低硬件成本 简化 系统电路 另外 数字式温度传感器还具有测量精度高 测量范围广等优点 因此 本 设计 DS18B20 温度传感器作为温度采集模块 综上各模块的选择方案与论证 确定最后的主要硬件资源如下 采用 STC90C516RD 作为主控制系统 DS1302 提供时钟 DS18B20 作为数字式温度传感器 LCD12864 液晶屏 作为显示 二 系统硬件的设计与实现 一 电路设计框图 本系统的电路系统框图如图 1 所示 STC90C516RD 单片机对 DS1302 和 DS18B20 写入 控制字并读取相应的数据 继而控制 LCD12864 作出对应的显示 图1 系统硬件框图 二 系统硬件概述 本电路设计采用 STC90C516RD 芯片作为硬件核心 该芯片采用 Flash ROM 内部具 有64KB ROM 存储空间 相对于本设计而言程序空间完全够用 STC90C516RD 系列单片机是 宏晶科技推出的新一代超强 高速 低功耗的单片机 指令代码完全兼容传统8051单片机 12时钟 机器周期和6时钟 机器周期可任意选择 内部集成 MAX810专用复位电路 时钟频 率在12MHz 以下时 复位脚可直接接地 工作温度范围 0 75 40 85 封装 LQFP 44 PDIP 40 PLCC 44 工作电压 5V 时钟电路由 DS1302提供 它是一种高性能 低功耗 带 RAM 的实时时钟电路 它可以对年 月 日 周 时 分 秒进行计时 具 有闰年补偿功能 工作电压为2 5V 5 5V 采用三线接口与 CPU 进行同步通信 并可采 用突发方式一次传送多个字节的时钟信号或 RAM 数据 DS1302内部有一个31 8的用于临 时性存放数据的 RAM 寄存器 可产生年 月 日 周 时 分 秒 具有使用寿命长 精度高和低功耗等特点 同时具有掉电自动保存功能 温度的采集由 DS18B20完成 它具 有独特的单线接口方式 DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器 与 DS18B20的双向通讯 测温范围 55 125 检测精度正负 0 5 C 支持多点 组网功能 多个 DS18B20可以并联在唯一的三线上 最多只能并联8个 如果数量过多 会使供电电源电压过低 从而造成信号传输的不稳定 实现多点测温 工作电源 3 5V DC 在使用中不需要任 何外围元件 液晶显示模块是 128 64点阵的汉字图形 液晶显示模块 可显示汉字及图形 内置 8192个中文汉字 16 16点阵 128个字 键盘控制模块 温度采集模块 STC90C516RD 主控模块 LCD12864 液晶显示模块 DS1302 时钟模块 符 8 16点阵 及64 256点阵显示 RAM GDRAM 可与 CPU 直接接口 提供两种界 面来连接微处理器 8 位并行及串行两种连接方式 具有多种功能 画面移位 睡眠 模式等 三 STC90C516RD 单片机主控制模块的设计 STC90C516RD 系列单片机是宏晶科技生产的单时钟 机器周期 1T 的单片机 是高速 低功耗 超强抗干扰的新一代 8051 系列单片机 指令代码完全兼容传统 8051 但速度快 8 12 倍 针对万年历控制 强干扰场所 其重要性能特点如下 增强型 8051CPU 1T 单时钟 机器周期 指令代码完全兼容传统 8051 工作电压 5 5V 3 5V 工作频率范围 0 35MHz 用户应用程序空间 64K 字节 片上集成 256 字节 RAM 通用 I O 32 个 复位后为 准双向口 弱上拉 可设置成 4 种模式 准双向口 弱上拉 强推挽 强上拉 仅为输入 高阻 开漏 每个 I O 口驱动能力均能达到 20mA 但整个芯片最大不要超过 120mA ISP 在系统编程 IAP 在应用可编程 无需专用编 程器 无需专用仿真器 可通过串口 P3 0 P3 1 直接下载应用程序 数秒钟即可完成 一片 有 EEPROM 功能 看门狗 具备双串口 工作温度范围 0 75 商业级 40 85 工业级 40 管教封装 有图 2 可知 单片机 18 和 19 管脚接时钟电路 19 管脚接外部晶振和微调电容的一 端 在片内它是振荡器倒相放大器的输入 18 管脚接外部晶振和微调电容的另一端 在 片内它是振荡器倒相放大器的输出 9 管脚是复位输入端 RST 接上电阻电容及开关后构 成上电复位电路 31 管脚 当只访问内部程序存储器时该管脚直接接高电平 端口EA P0 P1 P2 P3 为单片机的输入和输出端口 特别的当 P0 输出高电平时 必须接上拉电 阻 其中 P0 端口可以做 8 位的数据总线和地址总线 P2 端口可以作为 8 位的地址总线 P3 端口还可以作为中断的输入端口复用 29 引脚为程序存储器允许输出控制端 PSEN 当单片机访问外部程序存储器时 此引脚输出的低电平作为读外部程序存储器的选通信 号 30 引脚 ALE 为地址锁存允许信号 当单片机上电正常工作时 ALE 引脚不断地输出 正脉冲信号 图2 单片机最小系统 四 单片机中断系统 在提及单片机的最小系统后 现对单片机的另一重要应用系统即中断系统做一个比 较详细的介绍 在 CPU 与外设交换信息时 存在着一个快速 CPU 与慢速的外设之间的矛盾 为解决 这个问题 发展了中断的概念 单片机在某一时刻只能处理一个任务 当多个任务同时 要求单片机处理时 这一要求应该怎么实现呢 通过中断可以实现多个任务的资源共享 所谓的中断就是 当 CPU 正在处理某项事务的时候 如果外界或者内部发生了紧急事件 要求 CPU 暂停正在处理工作而去处理这个紧急事件 待处理完后 再回到原来中断的地 方 继续执行原来被中断的程序 这个过程称作中断 从中断的定义我们可以看到中断应具备中断源 中断响应 中断返回这样三个要素 中断源发出中断请求 单片机对中断请求进行响应 当中断响应完成后应进行中断返回 返回被中断的地方继续执行原来被中断的程序 MCS 51 单片机的中断源共有两类 它们 分别是 外部中断和内部中断 外部中断 0 INT0 来自 P3 2 引脚 通过外部中断 0 触发 方式控制位 IT0 TCON 0 来决定中断输入信号是低电平有效还是负跳变有效 一旦输入 信号有效 便使 IE0 标志置一 向 CPU 申请中断 外部中断 1 INT1 来自 P3 3 引脚 通过外部中断 1 触发方式控制位 IT1 TCON 2 来决定中断输入信号是低电平有效还是负 跳变有效 一旦输入信号有效 便使 IE0 标志置一 向 CPU 申请中断 内部中断有三个 TF0 TF1 RI 或 TI TF0 TCON 5 片内定时 计数器 T0 溢出中断请求标志 当定时 计 数器 T0 发生溢出时 置位 TF0 并向 CPU 申请中断 TF1 TCON 7 片内定时 计数器 T1 溢出中断请求标志 当定时 计数器 T1 发生溢出时 置位 TF1 并向 CPU 申请中断 RI SCON 0 或 TI SCON 1 串行口中断请求标志 当串行口接收完一帧串行数据时置 位 RI 或当串行口发送完一帧串行数据时置位 TI 向 CPU 申请中断 MCS 51 单片机为用户提供了四个专用寄存器 来控制单片机的中断系统 定时器控 制寄存器 TCON 该寄存器用于保存外部中断请求以及定时器的计数溢出 进行字节操 作时 寄存器地址为 88H 按位操作时 各位的地址为 88H 8FH 当 CPU 采样到 INT0 或 INT1 端出现有效中断请求时 IE0 IE1 位由硬件置 1 当中断响应完成 转向中断服务程序时 由硬件把 IE0 或 IE1 清零 当计数器产生计数溢出时 相应 的溢出标志位由硬件置 1 当转向中断服务时 再由硬件自动清 0 计数溢出标志 位的使用有两种情况 采用中断方式时 作中断请求标志位来使用 采用查询方式时 作查询状态位来使用 串行口控制寄存器 SCON 进行字节操作时 寄存器地址为 98H 按位操作时 各位的地址为 98H 9FH 当发送完一帧串行数据后 由硬件置 1 在转向中断服务程序后 用软件清 0 当接收完一帧串行数据后 由硬件置 1 在 转向中断服务程序后 用软件清 0 串行中断请求由 TI 和 RI 的逻辑或得到 就是说 无论是发送标志还是接收标志 都会产生串行中断请求 中断允许控制寄存器 IE 进 行字节操作时 寄存器地址为 0A8H 按位操作时 各位的地址为 0A8H 0AFH 可见 MCS 51 单片机通过中断允许控制寄存器对中断的允许 开放 实行两级控制 即以 EA 位 作为总控制位 以各中断源的中断允许位作为分控制位 当总控制位为禁止时 关闭整 个中断系统 不管分控制为状态如何 整个中断系统为禁止状态 当总控制位为允许时 开放中断系统 这时才能由各分控制位设置各自中断的允许与禁止 MCS 51 单片机复位后 IE 00H 因此中断系统处于禁止状态 单片机在中断响应 后不会自动关闭中断 因此在转中断服务程序后 应根据需要使用有关指令禁止中断 即以软件方式关闭中断 中断优先级控制寄存器 IP MCS 51 单片机的中断优先级控制 比较简单 因为系统只定义了高 低 2 个优先级 高优先级用 1 表示 低优先级用 0 表示 各中断源的优先级由中断优先级寄存器 IP 进行设定 IP 寄存器地址 0B8H 位地址为 0BFH 0B8H 五 时钟电路模块的设计 DS1302 是美国 DALLAS 公司推出的一种高性能 低功耗 带 RAM 的实时时钟芯片 它可以对年 月 日 周 时 分 秒进行计时 具有闰年补偿功能 工作电压为 2 5V 5 5V 采用三线接口与 CPU 进行同步通信 并可采用突发方式一次传送多个字节 的时钟信号或 RAM 数据 DS1302 内部有一个 31 8 的用于临时性存放数据的 RAM 寄存器 DS1302 是 DS1202 的升级产品 与 DS1202 兼容 但增加了主电源 后背电源双电源引脚 同时提供了对后背电源进行涓细电流充电的能力 DS1302 的引脚排列 其中 Vcc1 为后备电源 VCC2 为主电源 在主电源关闭的情况下 也能保持时钟的连续运行 DS1302 由 Vcc1 或 Vcc2 两者中的较大者供电 当 Vcc2 大于 Vcc1 0 2V 时 Vcc2 给 DS1302 供电 当 Vcc2 小于 Vcc1 时 DS1302 由 Vcc1 供电 X1 和 X2 是振荡源 外接 32 768kHz 晶振 RST 是复位 片选线 通过把 RST 输入驱动置高电 平来启动所有的数据传送 RST 输入有两种功能 首先 RST 接通控制逻辑 允许地址 命令序列送入移位寄存器 其次 RST 提供终止单字节或多字节数据的传送手段 当 RST 为高电平时 所有的数据传送被初始化 允许对 DS1302 进行操作 如果在传送过程中 RST 置为低电平 则会终止此次数据传送 I O 引脚变为高阻态 上电运行时 在 Vcc 2 0V 之前 RST 必须保持低电平 只有在 SCLK 为低电平时 才能将 RST 置为高电平 I O 为串行数据输入输出端 双向 SCLK 为时钟输入端 DS1302 的控制字节的最高有效 位 位 7 必须是逻辑 1 如果它为 0 则不能把数据写入 DS1302 中 位 6 如果为 0 则表 示存取日历时钟数据 为 1 表示存取 RAM 数据 位 5 至位 1 指示操作单元的地址 最低有 效位 位 0 如为 0 表示要进行写操作 为 1 表示进行读操作 控制字节总是从最低位开始 输出 在控制指令字输入后的下一个 SCLK 时钟的上升沿时 数据被写入 DS1302 数据 输入从低位即位 0 开始 同样 在紧跟 8 位的控制指令字后的下一个 SCLK 脉冲的下降沿 读出 DS1302 的数据 读出数据时从低位 0 位到高位 7 DS1302 有 12 个寄存器 其中有 7 个寄存器与日历 时钟相关 存放的数据位为 BCD 码形式 此外 DS1302 还有年份寄 存器 控制寄存器 充电寄存器 时钟突发寄存器及与 RAM 相关的寄存器等 时钟突发 寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容 DS1302 与 RAM 相关的寄存 器分为两类 一类是单个 RAM 单元 共 31 个 每个单元组态为一个 8 位的字节 其命令 控制字为 C0H FDH 其中奇数为读操作 偶数为写操作 另一类为突发方式下的 RAM 寄 存器 此方式下可一次性读写所有的 RAM 的 31 个字节 命令控制字为 FEH 写 FFH 读 DS1302 与 CPU 的连接需要三条线 即 SCLK 7 I O 6 RST CE 5 实际上 在调试程 序时可以不加电容器 只加一个 32 768kHz 的晶振即可 只是选择晶振时 不同的晶振 误差也较大 另外 还可以在上面的电路中加入 DS18B20 同时显示实时温度 只要占用 CPU 一个口线即可 单片机与 DS1302 管脚图如图 3 所示 系统图如图 4 所示 六 温度采集模块设计简单特点 此类传感器仅需要一条数据线进行数据传输 使用 1 7 与 DS18B20 的 I O 口连接加一个上拉电阻 VCC 接电源 GND 接地 独特的一线 接口 只需要一条口线通信多点能力 简化了分布式温度传感应用无需外部元件可用数 据总线供电 电压范围为 3 0V 至 5 5V 无需备用电源 测量温度范围为 55 度至 125 度 10 度至 85 度范围内精度为 0 5 度温度传感器可编程的分辨率为 9 12 位 DS18B20 连线如图 5 图 3 DS1302 DS18B20 图 3 外部引脚分配 图 4 系统图 七 显示模块的设计 如下图 6 所示 采用 LCD12864 液晶显示器 单片机 P2 口作为数据输出口 RS R W E 分别通过 10K 的上拉电阻连接到单片机的 P2 0 P2 1 P2 2 VDD 接 5V 电源 VSS 接地 VEE 为液晶显示器对比度调整端 接正电源时对比度最弱 接地电源时对比度 最高 对比度过高时会产生 鬼影 使用时可以通过一个 10K 的电位器调整对比度 RS 为寄存器选择 高电平 1 时选择数据寄存器 低电平 0 时选择指令寄存器 R W 为读 写信号线 高电平 1 时进行读操作 低电平 0 时进行写操作 E 或 EN 端为使能端 下 降沿使能 P0 0 P0 7 对应 B0 DB7 为双向数据总线 同时最高位 DB7 也是忙信号检测位 BLA BLK 分别为显示器背光灯的正 负极 逻辑工作电压 VDD 4 5 5 5V 电源地 GND 0V 工作温度 Ta 0 60 常温 20 75 宽温 模块有并行和串行两种连接方法 时序如下 8 位并行连接时序 图 5 DS18B20 连接图 图 6 12864 功能图 三 各器件工作原理 一 时钟芯片 DS1302 的工作原理 DS1302 在每次进行读 写程序前都必须初始化 先把 SCLK 端置 0 接着把 RST 端置 1 最后才给予 SCLK 脉冲 读 写时序如下图 8 所示 图 7 为 DS1302 的控制字 此控制字的位 7 必须置 1 若为 0 则不能把对 DS1302 进行读写数据 对于位 6 若对程 序进行读 写时 RAM 1 对时间进行读 写时 CK 0 位 1 至位 5 指操作单元的地址 位 0 是读 写操作位 进行读操作时 该位为 1 该位为 0 则表示进行的是写操作 控制字节 总是从最低位开始输入 输出的 图 9 为 DS1302 的日历 时间寄存器内容 CH 是时 钟暂停标志位 当该位为 1 时 时钟振荡器停止 DS1302 处于低功耗状态 当该位为 0 时 时钟开始运行 WP 是写保护位 在任何的对时钟和 RAM 的写操作之前 WP 必须为 0 当 WP 为 1 时 写保护位防止对任一寄存器的写操作 1 DS1302 的控制字 DS1302 的控制字如图 7 所示 控制字节的高有效位 位 7 必须是逻辑 1 如果它为 0 则不能把数据写入 DS1302 中 位 6 如果 0 则表示存取日历时钟数据 为 1 表示存取 RAM 数据 位 5 至位 1 指示操作单元的地址 最低有效位 位 0 如为 0 表示要进行写操 作 为 1 表示进行读操作 控制字节总是从最低位开始输出 图 7 DS1302 的控制字 2 数据输入输出 在控制指令字输入后的下一个 SCLK 时钟的上升沿时 数据被写入 DS1302 数据输入 从低位即位 0 开始 同样 在紧跟 8 位的控制指令字后的下一个 SCLK 脉冲的下降沿读出 DS1302 的数据 读出数据时从低位 0 位到高位 7 如下图 8 所示 图 8 DS1302 读与写的时序图 3 DS1302 的寄存器 DS1302 有 12 个寄存器 其中有 7 个寄存器与日历 时钟相关 存放的数据位为 BCD 码形式 其日历 时间寄存器及其控制字见图 9 图 9 DS1302 的日历 时间寄存器 此外 DS1302 还有年份寄存器 控制寄存器 充电寄存器 时钟突发寄存器及与 RAM 相关的寄存器等 时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内 容 DS1302 与 RAM 相关的寄存器分为两类 一类是单个 RAM 单元 共 31 个 每个单元 组态为一个 8 位的字节 其命令控制字为 C0H FDH 其中奇数为读操作 偶数为写操作 另一类为突发方式下的 RAM 寄存器 此方式下可一次性读写所有的 RAM 的 31 个字节 命 令控制字为 FEH 写 FFH 读 二 LCD12864 工作原理及说明 1 MPU 写资料到模块 从模块读出资料 2 串行连接时序图 3 串行数据传送共分三个字节完成 第一字节 串口控制 格式 11111ABC A 为数据传送方向控制 H 表示数据从 LCD 到 MCU L 表示数据从 MCU 到 LCD B 为数据类型选择 H 表示数据是显示数据 L 表示数据是控制指令 C 固定为 0 第二字节 并行 8 位数据的高 4 位 格式 DDDD0000 第三字节 并行 8 位数据的低 4 位 格式 0000DDDD 串行接口时序参数 备注 1 当模块在接受指令前 微处理顺必须先确认模块内部处于非忙碌状态 即读取 BF 标志时 BF 需为 0 方可接受新的指令 如果在送出一个指令前并不检查 BF 标志 那么在 前一个指令和这个指令中间必须延迟一段较长的时间 即是等待前一个指令确实执行完 成 指令执行的时间请参考指令表中的个别指令说明 2 RE 为基本指令集与扩充指令集的选择控制位元 当变更 RE 位元后 往后 的指令集将维持在最后的状态 除非再次变更 RE 位元 否则使用相同指令集时 不 需每次重设 RE 位元 具体具体指令介绍指令介绍 1 清除显示 CODE RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 LLLLLLLLLH 功能 清除显示屏幕 把 DDRAM 位址计数器调整为 00H 2 位址归位 CODE RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 LLLLLLLLHX 功能 把 DDRAM 位址计数器调整为 00H 游标回原点 该功能不影响显示 DDRAM 3 位址归位 CODE RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 LLLLLLLHI DS 功能 把 DDRAM 位址计数器调整为 00H 游标回原点 该功能不影响显示 DDRAM 功能 执行该命令后 所设置的行将显示在屏幕的第一行 显示起始行是由 Z 地址计数器控制 的 该命令自动将 A0 A5 位地址送入 Z 地址计数器 起始地址可以是 0 63 范围内任意一 行 Z 地址计数器具有循环计数功能 用于显示行扫描同步 当扫描完一行后自动加一 4 显示状态 开 关 CODE RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 LLLLLLHDC B 功能 D 1 整体显示 ON C 1 游标 ON B 1 游标位置 ON 5 游标或显示移位控制 CODE RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 LLLLLHS CR LX X 功能 设定游标的移动与显示的移位控制位 这个指令并不改变 DDRAM 的内容 6 功能设定 CODE RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 LLLLHDLX0 REX X 功能 DL 1 必须设为 1 RE 1 扩充指令集动作 RE 0 基本指令集动作 7 设定 CGRAM 位址 CODE RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 LLLHAC5AC4AC3AC2AC1 AC0 功能 设定 CGRAM 位址到位址计数器 AC 8 设定 DDRAM 位址 CODE RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 LLHAC6AC5AC4AC3AC2AC1 AC0 功能 设定 DDRAM 位址到位址计数器 AC 9 读取忙碌状态 BF 和位址 CODE RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 LHBFAC6AC5AC4AC3AC2AC1 AC0 功能 读取忙碌状态 BF 可以确认内部动作是否完成 同时可以读出位址计数器 AC 的值 10 写资料到 RAM CODE RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 HLD7D6D5D4D3D2D1 D0 功能 写入资料到内部的 RAM DDRAM CGRAM TRAM GDRAM 11 读出 RAM 的值 CODE RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 HHD7D6D5D4D3D2D1 D0 功能 从内部 RAM 读取资料 DDRAM CGRAM TRAM GDRAM 12 待命模式 12H CODE RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 LLLLLLLLL H 功能 进入待命模式 执行其他命令都可终止待命模式 13 卷动位址或 IRAM 位址选择 13H CODE RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 LLLLLLLLH SR 功能 SR 1 允许输入卷动位址 SR 0 允许输入 IRAM 位址 14 反白选择 14H CODE RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 LLLLLLLHR1 R0 功能 选择 4 行中的任一行作反白显示 并可决定反白的与否 15 睡眠模式 015H CODE RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 LLLLLLHSLX X 功能 SL 1 脱离睡眠模式 SL 0 进入睡眠模式 16 扩充功能设定 016H CODE RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 LLLLHHX1 REG L 功能 RE 1 扩充指令集动作 RE 0 基本指令集动作 G 1 绘图显示 ON G 0 绘 图显示 OFF 17 设定 IRAM 位址或卷动位址 017H CODE RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 LLLHAC5AC4AC3AC2AC1 AC0 功能 SR 1 AC5 AC0 为垂直卷动位址 SR 0 AC3 AC0 写 ICONRAM 位址 18 设定绘图 RAM 位址 018H CODE RW RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 LLHAC6AC5AC4AC3AC2AC1 AC0 功能 设定 GDRAM 位址到位址计数器 AC 四 系统的软件设计 一 主程序流程框图如图 10 开始 初始化 读 写日期 时间和温度 分离日期 时间 温度显示值 显示子程序 日期 时间修改子程序 闰月 节假日子程序 返回 图 10 系统软件流程图 开始 控制键有效进入年调整程序 等待按键程序 加键有效 年减1年加1 减键有效 控制键有效进入小时调整程序 等待按键程序 加键有效 分钟减1小时加1 减键有效 控制键有效进入日调整程序 等待按键程序 加键有效 年减1日加1 减键有效 控制键有效进入月调整程序 等待按键程序 加键有效 月减1月加1 减键有效 控制键有效进入星期调整程序 等待按键程序 加键有效 星期减1星期加1 减键有效 控制键有效进入分钟调整程序 等待按键程序 加键有效 分钟减1分钟加1 减键有效 按键有效 跳出时间调整程序 进入主 循环程序 图 11 时间调整程序流程图 二 子程序 由于本系统程序涉及的可编程器件有 LCD12864 DS18B20 以及 DS1302 各芯片的控 制字及数据读写如果混杂 将会使程序可读性大大降低 因此采用子程序的方法进行调 用并将其封装于各自的头文件中 详尽的程序设计见附录 板上完成硬件的组装 在焊 接调试过程中遇到很多问题 只要细心 慢慢查找排除故障最终完成本次万年历的设计 认真检查这些问题都是可以避免的 主要问题及解决办法现列如下 1 接通电源后 LCD12864 没有正确的显示 在不通电状态下用万用表检测电路是否正常 连接 在检查回路时发现有的点之间看似连接 但由于虚焊导致其并无电气连接 只能 对焊脚进行在加工直到解决问题 2 电路工作一段时间之后有的芯片发热严重 经查发现原来是有尖锐的管脚刺破邻近的 漆包线造成短路 断掉该线并再次连接可解决问题 三 软件测试 由于本系统涉及到多个子程序 多个芯片的编程 首先必须对可编程芯片的控制字 即其控制指令要熟记于心 其次 芯片很多都有时钟输入端 需要晶振支持 对芯片的 读写都需要在相应的触发沿到来时才能进行 由于 DS18B20 是串行通信数据 只用一个 口线传输 在处理采集的模拟信号时需要一定的时间 会对延时有较高要求 秒 分 小时 公历日期 月份 年份 世纪 星期 节气 闹钟设置有音乐歌谱铃声等多种音 符供选择 DS1302 程序 定义时间芯片 DS1302 的数据线及相关函数 sbit DS1302 CLK P3 7 DS1302 的时钟信号线 7 sbit DS1302 IO P1 6 DS1302 的数据端口线 6 sbit DS1302 RST P1 5 DS1302 的片选信号线 5 void WriteDs1302byte unsigned char temp 给 DS1302 写一个字节 void WriteDs1302 unsigned char address unsigned char dat 给 DS1302 写入时 间 先确定地址 再确定要写入的数据 unsigned char ReadDs1302 unsigned char address 读取 DS1302 的数据 void InitDS1302 DS18B20 温度采集程序 定义温度传感器 DS18B20 的数据线和相关函数 sbit DS18B20 P1 7 DS18B20 的数据线 int temp void DS18B20Init void DS18B20 初始化函数 int GetTemp void void TempWriteByte unsigned char dat unsigned char TempRead void bit TempReadBit void void delayb unsigned int count void TempChange void void Conversion bit cen m unsigned char year unsigned char month unsigned char day bit GetMoonDay unsigned char month p unsigned int TableAddr void DisplayShengXiao void void DelayMs unsigned int a void Delay unsigned char num 按键程序 定义开关按键 及蜂鸣器的数据线 sbit SetKey P3 2 按键功能 设置 sbit SureKey P3 3 按键功能 确认 sbit PlusKey P3 4 按键功能 加 sbit ReduceKey P3 5 按键功能 减 void Key void LCD 程序 定义 LCD12864 的数据线和相关函数 sbit LCD RS P2 0 模式位 低电平输入指令 高电平输入数据 sbit LCD RW P2 1 读写位 低电平读 高电平写 sbit LCD E P2 2 LCD12864 使能位 低电平无效 高电平使能 sbit PSB P2 3 define Busy 0 x80 define LCD Data P0 LCD12864 的 8 位数据总线 单片机的 P0 端口 void WriteDataLCD unsigned char WDLCD 给 LCD12864 写数据 void WriteCommandLCD unsigned char WCLCD 给 LCD12864 写指令 void LCDInit void LCD12864 初始化 void LCDClear void LCD12864 清屏 void CheckBusy void 忙检测 void LCDSendWord unsigned char p 向 LCD 发送一个字符串 void LCDTestWord bit i unsigned char word void DisplaySec void 在 LCD 上显示秒钟 void DisplayMin void 在 LCD 上显示分钟 void DisplayHour void 在 LCD 上显示小时 void DisplayDay void 在 LCD 上显示日期 void DisplayYear void 在 LCD 上显示年份 void DisplayMonth void 在 LCD 上显示月份 void DisplayWeek void 在 LCD 上显示星期 void Holidays void 在 LCD 上显示节日 5 肖年显示程序 case 0 LCDTestWord 0 0 x93 LCDSendWord 龙 break case 1 LCDTestWord 0 0 x93 LCDSendWord 蛇 break case 2 LCDTestWord 0 0 x93 LCDSendWord 马 break case 3 LCDTestWord 0 0 x93 LCDSendWord 羊 break case 4 LCDTestWord 0 0 x93 LCDSendWord 猴 break case 5 LCDTestWord 0 0 x93 LCDSendWord 鸡 break case 6 LCDTestWord 0 0 x93 LCDSendWord 狗 break case 7 LCDTestWord 0 0 x93 LCDSendWord 猪 break case 8 LCDTestWord 0 0 x93 LCDSendWord 鼠 break case 9 LCDTestWord 0 0 x93 LCDSendWord 牛 break case 10 LCDTestWord 0 0 x93 LCDSendWord 虎 break case 11 LCDTestWord 0 0 x93 LCDSendWord 兔 break 6 节气生日显示程序 if LunarMonth 0 x01 if LunarMonth 0 x01 if LunarMonth 0 x01 if LunarMonth 0 x05 if LunarMonth 0 x06 if LunarMonth 0 x07 if LunarMonth 0 x08 if LunarMonth 0 x09 if LunarMonth 0 x09 if LunarMonth 0 x09 if LunarMonth 0 x09 if

温馨提示

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

评论

0/150

提交评论