基于单片机的电子万年历的设计.doc_第1页
基于单片机的电子万年历的设计.doc_第2页
基于单片机的电子万年历的设计.doc_第3页
基于单片机的电子万年历的设计.doc_第4页
基于单片机的电子万年历的设计.doc_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

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

文档简介

信息职业技术学院 毕业设计说明书 论文 设计 论文 题目 基于单片机的万年历系统设计 专 业 应用电子技术 班 级 应电 08 2 学 号 姓 名 指导教师 二 一 年九月十日 信息职业技术学院毕业设计 论文 任务书信息职业技术学院毕业设计 论文 任务书 学 生 姓 名 学号 01 班级应电 08 2专业应用电子技术 设计 或论文 题目电子万年历的设计 指导教师姓名职 称工作单位及所从事专业联系方式备 注 讲师学院 21 设计 论文 内容 利用单片机控制和高性能时钟芯片设计一电子万年历 要求该系统具有如下特点和功能 1 可显示公历及农历年 月 日和时 分 秒 2 走时准确 可调整公历年 月 日和时 分 秒 3 采用市电通过电源适配器供电 当市电停电时 不但万年历所有数据不丢失 且万年历照常运行 有后备电池供电 可供数年 4 万年历设置运行到 2099 年 进度安排 要有较为详细的时间安排 时间具体到周 第 2 4 周 查找资料 选择参考方案 第 5 6 周 确定方案 第 7 8 周 查找资料 进行单元电路的设计 第 9 10 周 整机电路整机与分析 第 11 12 周 整理报告 定稿 第 13 14 周 制作 PPT 准备答辩 第 15 周 答辩 主要参考文献 资料 写清楚参考文献名称 作者 出版单位 1 王新颖 单片机原理及应用 北京 北京大学出版社 2008 2 陈忠平 单片机基础与最小系统实践 北京 北京航空航天大学出版社 2006 6 沈庆阳 8051 单片机实践与应用 北京 清华大学出版社 2003 4 侯玉宝 基于 Proteus 的 51 系列单片机设计与仿真 北京 电子工业出版社 2008 5 何立民 单片机应用技术选编 北京 北京航空航天出版社 2006 6 杨振江 流行单片机实用子程序及应用实例 西安 西安电子科技大学出版社 2007 7 王明顺 可涓流充电的串行实时时钟芯片 DS1302 北京 电子工业出版社 2009 8 刘和平 单片机原理及接口程序设计 北京 北京航天航空大学出版社 2008 审 批 意 见 教研室负责人 年 月 日 备注 任务书由指导教师填写 一式二份 其中学生一份 指导教师一份 目 录 摘 要 1 第 1 章 绪论 2 第 2 章 设计方案 3 2 1 系统基本方案选择和论证 3 2 1 1 单片机的选择 3 2 1 2 显示模块的选择 3 2 1 3 键盘模块的选择 3 2 1 4 时钟芯片的选择 4 2 1 5 温度传感器的选择 4 2 2 电路设计最终方案决定 5 第 3 章 硬件设计 6 3 1 AT89C52 单片机 6 3 1 1 AT89C52 的信号引脚 8 3 2 DS1302 时钟模块 10 3 2 1 内部结构及引脚 11 3 2 2 工作原理 12 3 2 3 寄存器和控制命令 12 3 3 DS18B20 温度采集模块 14 3 3 1 内部结构及引脚 15 3 3 2 测温原理 15 3 3 3 工作过程及时序 16 3 4 键盘模块 20 3 5 LCD 显示模块 21 第 4 章 软件设计 23 4 1 温度采集软件 23 4 2 阳历软件设计 24 4 3 阴历软件设计 26 4 4 LCD 显示系统 29 4 5 按键系统 30 4 6 系统主流程图 31 第 5 章 系统调试 32 5 1 调试过程 32 5 2 仿真结果 33 总 结 34 参考文献 35 附录 1 整机电路图 36 附录 2 元件明细表 37 附录 3 系统主程序 38 摘 要 电子万年历能显示 年 月 日 时 分 秒及星期信息 并具有可调整日期和 时间功能 选用的是单片机 AT89C52 来实现电子万年历的功能 该电子万年历主要由单片机 LCD 显示电路 DS18B20 温度采集模块 DS1302 时钟 电路模块组成 系统以硬件软件化为指导思想 充分发挥单片机功能 大部分功能通 过软件编程来实现 电路简单明了 系统稳定性高 同时该系统还具有功耗小 成本 低的特点 具有很强的实用性 由于该系统所用元器件较少 单片机所被占用的 I O 口不多 因此系统具有较强的可扩展性 软件程序均采用 C 语言编写 便于移植与升 级 报告详细介绍了整个系统的硬件组成结构 工作原理和系统的软件程序设计 关键词关键词 万年历 AT89C52 DS1302 DS18B20 第 1 章 绪论 随着人们生活水平的提高和生活节奏的加快 对时间的要求越来越高 精准数字 计时的消费需求也是越来越多 二十一世纪的今天 最具代表性的计时产品就是电子万年历 它是近代世界钟表 业界的第三次革命 第一次是摆和摆轮游丝的发明 相对稳定的机械振荡频率源使钟 表的走时差从分级缩小到秒级 代表性的产品就是带有摆或摆轮游丝的机械钟或表 第二次革命是石英晶体振荡器的应用 发明了走时精度更高的石英电子钟表 使钟表 的走时月差从分级缩小到秒级 第三次革命就是单片机数码计时技术的应用 电子万 年历 使计时产品的走时日差从分级缩小到 1 600 万秒 从原有传统指针计时的方式 发展为人们日常更为熟悉的夜光数字显示方式 直观明了 并增加了全自动日期 星 期 温度以及其他日常附属信息的显示功能 它更符合消费者的生活需求 因此 电 子万年历的出现带来了钟表计时业界跨跃性的进步 本文介绍了基于 AT89C52 单片机设计的电子万年历 首先介绍单片机的发展与其在中低端领域中的优势以及课题的开发意义 接着介 绍了 AT89C52 单片机的硬件结构 并在此基础上实现了万年历基本电路的设计 然后 使用单片机 C 语言进行万年历程序的设计 程序采用模块化结构 使得逻辑关系简单 明了 维护方便 第 2 章 设计方案 2 1 系统基本方案选择和论证 2 1 1 单片机的选择 方案一 采用传统的 AT89C52 作为电机的控制核心 单片机算术运算功能强 软 件编程灵活 自由度大 可用软件编程实现各种算法和逻辑控制 并且由于其功耗低 体积小 技术成熟和成本低等优点 使其在各个领域应用广泛 方案二 采用 FTC10F04 单片机 还带有非易失性 Flash 程序存储器 它是一种高 性能 低功耗的 8 位 CMOS 微处理芯片 市场应用最多 其主要特点如下 8KB Flash ROM 可以擦除 1000 次以上 数据保存 10 年 方案比较 由于本系统对 CPU 运算速度要求很高 需要执行很复杂的运算 方案 一成本比较低 适合做设计 方案二运算速度高 性能好 所以两种方案都有可取之 处 选用方案一作为主方案 方案二作为备用方案 2 1 2 显示模块的选择 方案一 使用传统的 LED 数码管显示 数码管具有 低能耗 低损耗 低压 寿 命长 耐老化 防晒 防潮 防火 防高 低 温 对外界环境要求低 易于维护 同时其精度比较高 称重轻 精确可靠 操作简单 数码管采用 BCD 编码显示数字 程序编译容易 资源占用较少 但显示不够直观 太过单调 电源设计复杂 方案二 使用液晶显示屏显示时间数字 液晶显示屏 LCD 具有轻薄短小 低 耗电量 无辐射危险 平面直角显示以及影象稳定不闪烁等优势 可视面积大 画面 效果好 分辨率高 抗干扰能力强等特点 方案比较 LED 数码管虽然操作简单 实用性高 但显示太过单调 而本设计显示 内容量大 采用 LCD 液晶显示画面效果好 直观明了 故选用方案二 2 1 3 键盘模块的选择 在对日期和时间进行控制 对日期和时间进行调节校准过程中 系统需要产生激 励电流 因此需要用按键 方案一 使用独立式键盘 独立式键盘是指直接用 I O 口线构成的单个按键电路 独立式按键电路配置灵活 软件结构简单 方案二 使用矩阵式键盘 矩阵式键盘是由行线和列线组成 按键位于行 列的 交叉点上 行线 列线分别连接到按键开关的两端 其特点是简单且不增加成本 这 种键盘适合按键数量较多的场合 方案比较 因为本设计键盘部分简单需要的按键少 故采用独立式按键选择方案 二 2 1 4 时钟芯片的选择 方案一 直接采用单片机定时计数器提供秒信号 使用程序实现年 月 日 星期 时 分 秒计数 采用此种方案虽然减少芯片的使用 节约成本 但是 实现的时间误差 较大 方案二 采用 DS1302 时钟芯片实现时钟 DS1302 芯片是一种高性能的时钟芯片 可自动对 秒 分 时 日 周 月 年以及闰年补偿的年进行计数 而且精度高 位的 RAM 做 为数据暂存区 工作电压 2 5V 5 5V 范围内 2 5V 时耗电小于 300nA 方案比较 虽然采用单片机定时计数器提供秒信号可实现功能且减少芯片的使用 但误差较大 而 DS1302 时钟芯片是一种高性能芯片 精度高还具有闰年补偿功能 所 以采用方案二 2 1 5 温度传感器的选择 方案一 使用热敏电阻作为传感器 用热敏电阻与一个相应阻值电阻相串联分压 利用热敏 电阻阻值随温度变化而变化的特性 采集这两个电阻变化的分压值 并进行 A D 转换 此设计方案需用 A D 转换电路 增加硬件成本而且热敏电阻的感温特性曲线并不是严 格线性的 会产生较大的测量误差 方案二 采用数字式温度传感器 DS18B20 此类传感器为数字式传感器而且仅需要一条数据 线进行数据传输 易于与单片机连接 可以去除 A D 模块 降低硬件成本 简化系统 电路 另外 数字式温度传感器还具有测量精度高 测量范围广等优点 方案比较 选用 DS18B20 数字式温度传感器 与单片机连接简单 成本低 还具有 测量精度高 测量范围广等优点 而热敏电阻作为传感器 成本高 误差大 所以选 用方案二 2 2 电路设计最终方案决定 综上各方案所述 对此次作品的方案选定 AT89C52 单片机 内部自带有 6KB 的 Flash 存储器及 256KB RAM 单元 不需另外扩展 EEPROM 及静态 RAM 可以在线下载程 序 易于日后的升级 DS1302 时钟日历芯片 稳定性高误差小 数字式温度传感器 DS18B20 测量准确 误差小范围广 LCD 液晶显示 显示清晰直观明了 第 3 章 硬件设计 该系统硬件设计总体思想是以单片机为控制系统 接受感应信息并进行处理后 将控制指令传出 对各个系统进行对应操作 硬件设计总体框图如图 3 1 所示 AT89C52 主控模块 键盘模块 DS18B20 温 度采集模块 LCD 显示模块 DS1302 时钟模块 图 3 1 硬件设计框图 主控模块 根据输入信息进行处理 并将控制数据传出 显示模块 显示相关的内容 时钟模块 提供时钟数据 温度采集模块 感应和提供温度 键盘模块 对系统进行操作 3 1 AT89C52 单片机 单片机实质上是一个芯片 它具有结构简单 控制功能强 可靠性高 体积小 价格低等优点 单片机技术作为计算机技术的一个重要分支 广泛的应用于工业控制 智能化仪器仪表 家用电器 电子玩具等各个领域 ATMEL 公司生产的 AT89C52 单片机采用高性能的静态 80C51 设计 并采用先进工 艺制造 还带有非易失性 Flash 程序存储器 它是一种高性能 低功耗的 8 位 CMOS 微 处理芯片 市场应用最多 其主要特点如下 8KB Flash ROM 可以擦除 1000 次以上 数据保存 10 年 技术特点有 256 字节内部 RAM 电源控制模式 时钟可停止和恢复 空闲 掉电模式 6 个中断源 4 个中断优先级 4 个 8 位 I O 口 全双工增强型 TUAR 3 个 16 位定时 计数器 T0 T1 标准 80C51 和增加的 T2 捕获和比较 全静 态工作方式 0 24MHZ AT89C52 单片机的基本结构请参见图 3 2 各部分情况介绍如 下 中央处理器 CPU 中央处理器是单片机的核心 完成运算和控制功能 AT89C52 的 CPU 能处理 8 位二进制数或代码 内部数据存储器 内部 RAM AT89C52 芯片中共有 256 个 RAM 单元 但其中后 128 单元被专用寄存器占用 能作为寄存器供用户使用的只是前 128 单元 用于存放可 读写的数据 因此通常所说的内部数据存储器就是指前 128 单元 简称内部 RAM 内部程序存储器 内部 ROM AT89C52 共有 8KB 掩膜 ROM 用于存放程序 原始 数据或表格 因此称之为程序存储器 简称内部 ROM 定时器 计数器 AT89C52 共有 2 个 16 位的定时器 计数器 以实现定时或计数功 能 并以其定时或计数结果对计算机进行控制 CPU 时钟电路ROM定时 计数器RAM 中断系统并行接口串行接口 P3 TxD x P RxD INT0INT1P2P1P0 T1 图 3 2 AT89C52 单片机结构框图 并行 I O 口 AT89C52 共有四个 8 位的 I O 口 P0 P1 P2 P3 以实现数据的 并行输入输出 串行口 AT89C52 单片机有一个全双工的串行口 以实现单片机和其它设备之间的 串行数据传送 该串行口功能较强 既可作为全双工异步通信收发器使用 也可作为 同步移位器使用 中断控制系统 AT89C52 单片机的中断功能较强 以满足控制应用的需要 AT89C52 共有 5 个中断源 即外中断 2 个 定时 计数中断 2 个 串行中断 1 个 全部 中断分为高级和低级共二个优先级别 T0 时钟电路 AT89C52 芯片的内部有时钟电路 但石英晶体和微调电容需外接 时钟 电路为单片机产生时钟脉冲序列 系统允许的晶振频率一般为 6MHZ 和 12MHZ 从上述内容可以看出 AT89C52 虽然是一个单片机芯片 但作为计算机应该具有的 基本部件它都包括 因此实际上它已是一个简单的微型计算机系统了 3 1 1 AT89C52 的信号引脚 AT89C52 是标准的 40 引脚双列直插式集成电路芯片 引脚排列请参见图 3 2 信号引脚介绍 P0 0 P0 7 低八位地址 数据总线分时复用 P1 0 P1 7 只能做一般 I O 口 P2 0 P2 7 高八位地址总线 P3 0 P3 7 8 位双向口线 ALE 地址锁存控制信号 在系统扩展时 ALE 用于控制把 P0 口输出的低 8 位地址锁存器锁存起来 以实现 低位地址和数据的隔离 此外由于 ALE 是以晶振六分之一的固定频率输出的正脉冲 因此可作为外部时钟或外部定时脉冲使用 外部程序存储器读选通信号 在读外部 ROM 时有效 低电平 以PSENPSEN 实现外部 ROM 单元的读操作 访问程序存储控制信号 当信号为低电平时 对 ROM 的读操作限定在外EAEA 部程序存储器 而当信号为高电平时 则对 ROM 的读操作是从内部程序存储器开始 EA 并可延至外部程序存储器 RST 复位信号 当输入的复位信号延续 2 个机器周期以上高电平即为有效 用以 完成单片机的复位初始化操作 XTAL1 和 XTAL2 外接晶体引线端 当使用芯片内部时钟时 此二引线端用于外接 石英晶体和微调电容 当使用外部时钟时 用于接外部时钟脉冲信号 VSS 地线 VCC 5V 电源 以上是 AT89C52 单片机芯片 40 条引脚的定义及简单功能说明 P1 0 1 P1 1 2 P1 2 3 P1 3 4 P1 4 5 P1 5 6 P1 6 7 P1 7 8 RST VPD 9 RXD P3 0 10 TXD P3 1 11 INT0 P3 2 12 INT1 P3 3 13 T0 P3 4 14 T1 P3 5 15 WR P3 6 16 RD P3 7 17 XTAL2 18 XTAL1 19 VSS 2021 P2 1 22 P2 2 23 P2 3 24 P2 4 25 P2 5 26 P2 6 27 P2 7 28 PSEN 29 ALE PROG 30 EA VPP 31 P0 7 32 P0 6 33 P0 5 34 P0 4 35 P0 3 36 P0 2 37 P0 1 38 P0 0 39 VCC 40 图 3 3 AT89C52 引脚图 信号引脚的第二功能 由于工艺及标准化等原因 芯片的引脚数目是有限制的 例如 AT89C52 系列把芯 片引脚数目限定为 40 条 但单片机为实现其功能所需要的信号数目却远远超过此数 因此就出现了需要与可能的矛盾 如何解决这个矛盾 兼职是唯一可行的办法 即给 一些信号引脚赋以双重功能 如果把前述的信号定义为引脚第一功能的话 则根据需 要再定义的信号就是它的第二功能 下面介绍一些信号引脚的第二功能 P3 口线的第二功能 P3 的 8 条口线都定义有第二功能 详见表 3 1 EPROM 存储器程序固化所需要的信号 有内部 EPROM 的单片机芯片 为写入程序需提供专门的编程脉冲和编程电源 这 些信号也是由信号引脚以第二功能的形式提供的 即 编程脉冲 30 脚 ALE PROG 编程电压 25V 31 脚 VPP EA 备用电源引入 由于万年历在运行过程中需要电源 而在运行过程中有可能出现突发情况 所以 引入备用电源 AT89C52 单片机的备用电源也是以第二功能的方式由 9 脚 RST VPD 引入的 当电源发生故障电压降低到下限值时 备用电源经此端向内部 RAM 提供电压 以保护内部 RAM 中的信息不丢失 表 3 1 P3 口各引脚与第二功能表 以上把 AT89C52 单片机的全部信号 分别以第一功能和第二功能的形式列出 各 种型号的芯片 其引脚的第一功能信号是相同的 所不同的只在引脚的第二功能信号 对于 9 30 和 31 三个引脚 由于第一功能信号与第二功能信号是单片机在不同工 作方式下的信号 因此不会发生使用上的矛盾 但是 P3 口的情况却有所不同 它的第 二功能信号都是单片机的重要控制信号 因此在实际使用时 都是先按需要选用第二 功能信号 剩下的才以第一功能的身份作数据位的输入输出使用 3 2 DS1302 时钟模块 DS1302 是 DALLAS 半导体公司推出的时钟芯片 内含一个实时时钟 日历和 31 字节 静态 RAM 可以通过串行接口与单片机进行通信 实时时钟 日历电路提供秒 分 时 日 星期 月 年的信息 每个月的天数和闰年的天数可自动调整 时钟操作可通过 AM PM 标志位决定采用 24 或 12 小时时间格式 DS1302 与单片机之间能简单地采用同 步串行的方式进行通信 仅需三根 I O 线 复位 RST I O 数据线 串行时钟 SCLK 时钟 RAM 的读 写数据以一字节或多达 31 字节的字符组方式通信 DS1302 工作时功耗很低 保持数据和时钟信息时 功耗小于 1mW 此外 DS1302 还有年份寄存器 控制寄存器 充电寄存器 时钟突发寄存器及 与 RAM 相关的寄存器等 时钟突发寄存器可一次性顺序读写除充电寄存器外的所有 寄存器内容 引脚第二功能第二功能信号名称 P3 0RXD 串行数据接收 P3 1TXD 串行数据发送 P3 20INT 外部中断 0 申请 P3 31INT 外部中断 1 申请 P3 4T0 定时器 计数器 0 的外部输入 P3 5T1 定时器 计数器 1 的外部输入 P3 6WR 外部 RAM 写选通 P3 7RD 外部 RAM 读选通 3 2 1 内部结构及引脚 电 源 控 制 输入移位 寄存器 振荡器与 分频器 实时时钟 命令与控制 逻辑 31 8RAM Vcc1 Vcc2 GND I O SCLK RST X1X2 图 3 4 DS1302 内部结构图 图 3 5 ds1302 引脚排列 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 为时钟输入端 3 2 2 工作原理 DS1302 工作时为了对任何数据传送进行初始化 需要将复位脚 RST 置为高电平 且将 8 位地址和命令信息装入移位寄存器 数据在时钟 SCLK 的上升沿串行输入 前 8 位指定访问地址 命令字装入移位寄存器后 在之后的时钟周期 读操作时输出 数据 写操作时输出数据 时钟脉冲的个数在单字节方式下为 8 8 8 位地址 8 位数据 在多字节方式下为 8 加最多可达 248 的数据 3 2 3 寄存器和控制命令 对 DS1302 的操作就是对其内部寄存器的操作 DS1302 内部共有 12 个寄存器 其 中有 7 个寄存器与日历 时钟相关 存放的数据位为 BCD 码形式 此外 DS1302 还有 年份寄存器 控制寄存器 充电寄存器 时钟突发寄存器及与 RAM 相关的寄存器等 时钟突发寄存器可一次性顺序读写除充电寄存器以外的寄存器 日历 时间寄存器及 控制字如表 3 2 所示 表 3 2 日历 时钟寄存器与控制字对照表 76543210 寄存器名称 1RAM CKA4A3A2A1A0RD W 秒寄存器 1000000 分寄存器 1000001 小时寄存器 1000010 日寄存器 1000011 月寄存器 1000100 星期寄存器 1000101 年寄存器 1000110 写保护寄存器 1000111 慢充电寄存器 1001000 时钟突发寄存器 1011111 最后一位 RD W 为 0 时表示进行写操作 为 1 时表示读操作 DS1302 内部寄存器列表如表 3 3 所示 表 3 3 DS1302 内部主要寄存器分布表 命令字各位内容 寄存器名称 写读 取值范围 76543210 秒寄存器 80H81H00 59CH10SECSEC 分寄存器 82H83H00 59010MINMIN 小时寄存器 84H85H 01 12 或 00 2312 24 0 AHRHR 日期寄存器 86H87H01 28 29 30 3 1 0010DATEDATE 月份寄存器 88H89H01 1200010MMONTH 周寄存器 8AH8BH01 0700000DAY 年份寄存器 8CH8DH00 9910YEARYEAR DS1302 内部的 RAM 分为两类 一类是单个 RAM 单元 共 31 个 每个单元为一个 8 位的字节 其命令控制字为 COH FDH 其中奇数为读操作 偶数为写操作 再一类为突 发方式下的 RAM 此方式下可一次性读写所有的 RAM 的 31 个字节 命令控制字为 FEH 写 FFH 读 我们现在已经知道了控制寄存器和 RAM 的逻辑地址 接着就需要知道如何通过外 部接口来访问这些资源 单片机是通过简单的同步串行通讯与 DS1302 通讯的 每次通 讯都必须由单片机发起 无论是读还是写操作 单片机都必须先向 DS1302 写入一个命 令帧 这个帧的格式如表 3 2 所示 最高位 BIT7 固定为 1 BIT6 决定操作是针对 RAM 还是时钟寄存器 接着的 5 个 BIT 是 RAM 或时钟寄存器在 DS1302 的内部地址 最后一 个 BIT 表示这次操作是读操作抑或是写操作 物理上 DS1302 的通讯接口由 3 个口线组成 即 RST SCLK I O 其中 RST 从 低电平变成高电平启动一次数据传输过程 SCLK 是时钟线 I O 是数据线 具体的读 写时序参考图 3 5 但是请注意 无论是哪种同步通讯类型的串行接口 都是对时钟信 号敏感的 而且一般数据写入有效是在上升沿 读出有效是在下降沿 DS1302 正是如 此的 但是在芯片手册里没有明确说明 如果不是特别确定 则把程序设计成这样 平时 SCLK 保持低电平 在时钟变动前设置数据 在时钟变动后读取数据 即数据操作 总是在 SCLK 保持为低电平的时候 相邻的操作之间间隔有一个上升沿和一个下降沿 RST I O 图 3 6 DS1302 的命令字结构 SCLK 为 0 写入的数据 SCLK 为 1 SCLK 为 0 读出的数据 图 3 7 DS1302 时钟模块 3 3 DS18B20 温度采集模块 DS18B20 是美国 DALLAS 半导体公司继 DS1820 之后最新推出的一种改进型智能温度 传感器 与传统的热敏电阻相比 他能够直接读出被测温度并且可根据实际要求通过 简单的编程实现 9 12 位的数字值读数方式 可以分别在 93 75 ms 和 750 ms 内完成 9 位和 12 位的数字量 并且从 DS18B20 读出的信息或写入 DS18B20 的信息仅需要一根 口线读写 温度变换功率来源于数据总线 总线本身也可以向所挂接的 DS18B20 供电 而无需额外电源 因而使用 DS18B20 可使系统结构更趋简单 可靠性更高 他在测温 精度 转换时间 传输距离 分辨率等方面较 DS1820 有了很大的改进 给用户带来了 更方便的使用和更令人满意的效果 SCLK 3 3 1 内部结构及引脚 高速缓存储 存器 8 位 CRC 生成 器 储存器和控制器温度灵敏器件 低温触发器 TL 高温触发器 TH 64 位 ROM 和单 线接 口 电 源 检 测 配置寄存器 图 3 8 DS18B20 内部结构图 VCC DQ GND 图 3 9 DS18B20 引脚排列 3 3 2 测温原理 DS18B20 的测温原理如图 3 9 所示 图中低温度系数晶振的振荡频率受温度的影响 很小 用于产生固定频率的脉冲信号送给减法计数器 1 高温度系数晶振随温度变化其 震荡频率明显改变 所产生的信号作为减法计数器 2 的脉冲输入 图中还隐含着计数 门 当计数门打开时 DS18B20 就对低温度系数振荡器产生的时钟脉冲后进行计数 进 而完成温度测量 计数门的开启时间由高温度系数振荡器来决定 每次测量前 首先 将 55 所对应的基数分别置入减法计数器 1 和温度寄存器中 减法计数器 1 和温度寄 存器被预置在 55 所对应的一个基数值 减法计数器 1 对低温度系数晶振产生的脉冲 信号进行减法计数 当减法计数器 1 的预置值减到 0 时温度寄存器的值将加 1 减法计 数器 1 的预置将重新被装入 减法计数器 1 重新开始对低温度系数晶振产生的脉冲信 号进行计数 如此循环直到减法计数器 2 计数到 0 时 停止温度寄存器值的累加 此 时温度寄存器中的数值即为所测温度 图 3 9 中的斜率累加器用于补偿和修正测温过 程中的非线性 其输出用于修正减法计数器的预置值 只要计数门仍未关闭就重复上 述过程 直至温度寄存器值达到被测温度值 这就是 DS18B20 的测温原理 预置 低温度系数 振荡器 高温度系数 振荡器 减法计数器 2 斜率累加器 减法计数器 1 0 0 比较器 预置 温度寄存器 LSB 置 1 清零 1 停止 图 3 10 DS18B20 的测温原理框图 3 3 3 工作过程及时序 DS18B20 内部的低温度系数振荡器是一个振荡频率随温度变化很小的振荡器 为计 数器 1 提供一频率稳定的计数脉冲 高温度系数振荡器是一个振荡频率对温度很敏感的振荡器 为计数器 2 提供一个 频率随温度变化的计数脉冲 初始时 温度寄存器被预置成 55 每当计数器 1 从预置数开始减计数到 0 时 温度寄存器中寄存的温度值就增加 1 这个过程重复进行 直到计数器 2 计数到 0 时 便停止 初始时 计数器 1 预置的是与 55 相对应的一个预置值 以后计数器 1 每一个循 环的预置数都由斜率累加器提供 为了补偿振荡器温度特性的非线性性 斜率累加器 提供的预置数也随温度相应变化 计数器 1 的预置数也就是在给定温度处使温度寄存 器寄存值增加 1 计数器所需要的计数个数 DS18B20 内部的比较器以四舍五入的量化方式确定温度寄存器的最低有效位 在计 数器 2 停止计数后 比较器将计数器 1 中的计数剩余值转换为温度值后与 0 25 进行 比较 若低于 0 25 温度寄存器的最低位就置 0 若高于 0 25 最低位就置 1 若高于 0 75 时 温度寄存器的最低位就进位然后置 0 这样 经过比较后所得的温 度寄存器的值就是最终读取的温度值了 其最后位代表 0 5 四舍五入最大量化误差 为 1 2LSB 即 0 25 温度寄存器中的温度值以 9 位数据格式表示 最高位为符号位 其余 8 位以二进 制补码形式表示温度值 测温结束时 这 9 位数据转存到暂存存储器的前两个字节中 符号位占用第一字节 8 位温度数据占据第二字节 DS18B20 测量温度时使用特有的温度测量技术 DS18B20 内部的低温度系数振荡器 能产生稳定的频率信号 同样的 高温度系数振荡器则将被测温度转换成频率信号 当计数门打开时 DS18B20 进行计数 计数门开通时间由高温度系数振荡器决定 芯片 内部还有斜率累加器 可对频率的非线性度加以补偿 测量结果存入温度寄存器中 一般情况下的温度值应该为 9 位 但因符号位扩展成高 8 位 所以最后以 16 位补码形 式读出 DS18B20 工作过程一般遵循以下协议 初始化 ROM 操作命令 存储器操作命 令 处理数据 1 初始化 单总线上的所有处理均从初始化序列开始 初始化序列包括总线主机发出一复位 脉冲 接着由从属器件送出存在脉冲 存在脉冲让总线控制器知道 DS18B20 在总线上 且已准备好操作 2 ROM 操作命令 一旦总线主机检测到从属器件的存在 它便可以发出器件 ROM 操作命令之一 所 有 ROM 操作命令均为 8 位长 这些命令列表如下 Read ROM 读 ROM 33h 此命令允许总线主机读 DS18B20 的 8 位产品系列编码 唯一的 48 位序列号 以及 8 位的 CRC 此命令只能在总线上仅有一个 DS18B20 的情况下可以使用 如果总线上存 在多于一个的从属器件 那么当所有从片企图同时发送时将发生数据冲突的现象 漏 极开路会产生线与的结果 Match ROM 符合 ROM 55h 此命令后继以 64 位的 ROM 数据序列 允许总线主机对多点总线上特定的 DS18B20 寻址 只有与 64 位 ROM 序列严格相符的 DS18B20 才能对后继的存贮器操作命令作出响 应 所有与 64 位 ROM 序列不符的从片将等待复位脉冲 此命令在总线上有单个或多个 器件的情况下均可使用 Skip ROM 跳过 ROM CCh 在单点总线系统中 此命令通过允许总线主机不提供 64 位 ROM 编码而访问存储器 操作来节省时间 如果在总线上存在多于一个的从属器件而且在 Skip ROM 命令之后发 出读命令 那么由于多个从片同时发送数据 会在总线上发生数据冲突 漏极开路下 拉会产生线与的效果 Search ROM 搜索 ROM F0h 当系统开始工作时 总线主机可能不知道单线总线上的器件个数或者不知道其 64 位 ROM 编码 搜索 ROM 命令允许总线控制器用排除法识别总线上的所有从机的 64 位编 码 Alarm Search 告警搜索 ECh 此命令的流程与搜索 ROM 命令相同 但是 仅在最近一次温度测量出现告警的情 况下 DS18B20 才对此命令作出响应 告警的条件定义为温度高于 TH 或低于 TL 只要 DS18B20 一上电 告警条件就保持在设置状态 直到另一次温度测量显示出非告警值或 者改变 TH 或 TL 的设置 使得测量值再一次位于允许的范围之内 贮存在 EEPROM 内的 触发器值用于告警 3 存储器操作命令 Write Scratchpad 写暂存存储器 4Eh 这个命令向 DS18B20 的暂存器中写入数据 开始位置在地址 2 接下来写入的两个 字节将被存到暂存器中的地址位置 2 和 3 可以在任何时刻发出复位命令来中止写入 Read Scratchpad 读暂存存储器 BEh 这个命令读取暂存器的内容 读取将从字节 0 开始 一直进行下去 直到第 9 字 节 8 CRC 字节读完 如果不想读完所有字节 控制器可以在任何时间发出复位命令 来中止读取 Copy Scratchpad 复制暂存存储器 48h 这条命令把暂存器的内容拷贝到 DS18B20 的 E2 存储器里 即把温度报警触发字节 存入非易失性存储器里 如果总线控制器在这条命令之后跟着发出读时间隙 而 DS18B20 又正在忙于把暂存器拷贝到 E2 存储器 DS18B20 就会输出一个 0 如果拷 贝结束的话 DS18B20 则输出 1 如果使用寄生电源 总线控制器必须在这条命令 发出后立即起动强上拉并最少保持 10ms Convert T 温度变换 44h 这条命令启动一次温度转换而无需其他数据 温度转换命令被执行 而后 DS18B20 保持等待状态 如果总线控制器在这条命令之后跟着发出读时间隙 而 DS18B20 又忙 于做时间转换的话 DS18B20 将在总线上输出 0 若温度转换完成 则输出 1 如 果使用寄生电源 总线控制器必须在发出这条命令后立即起动强上拉 并保持 500ms Recall E2 重新调整 E2 B8h 这条命令把贮存在 E2 中温度触发器的值重新调至暂存存储器 这种重新调出的操 作在对 DS18B20 上电时也自动发生 因此只要器件一上电 暂存存储器内就有了有效 的数据 在这条命令发出之后 对于所发出的第一个读数据时间片 器件会输出温度 转换忙的标识 0 忙 1 准备就绪 Read Power Supply 读电源 B4h 对于在此命令发送至 DS18B20 之后所发出的第一读数据的时间片 器件都会给出 其电源方式的信号 0 寄生电源供电 1 外部电源供电 4 处理数据 DS18B20 的高速暂存存储器由 9 个字节组成 当温度转换命令发布后 经转换所得 的温度值以二字节补码形式存放在高速暂存存储器的第 0 和第 1 个字节 单片机可通 过单线接口读到该数据 读取时低位在前 高位在后 表 3 4 DS18B20 温度数据表 温度 二进制十六进制 125 0000 0111 1101 0000 07D0h 85 0000 0101 0101 0000 0550h 25 0625 0000 0001 1001 0001 0191h 10 125 0000 0000 1010 0010 00A2h 0 5 0000 0000 0000 1000 0008h 0 0 0000 0000 0000 0000 0000h 0 5 1111 1111 1111 1000 FFF8h 10 125 1111 1111 0101 1110 FF5Eh 25 0625 1111 1110 0110 FE6Fh 1111 55 1111 1100 1001 0000 FC90h 上表是 DS18B20 温度采集转化后得到的 12 位数据 存储在 DS18B20 的两个 8 比特 的 RAM 中 二进制中的前面 5 位是符号位 如果测得的温度大于或等于 0 这 5 位为 0 只要将测到的数值乘于 0 0625 即可得到实际温度 如果温度小于 0 这 5 位为 1 测到的数值需要取反加 1 再乘于 0 0625 即可得到实际温度 温度转换计算方法举例 例如当 DS18B20 采集到 125 的实际温度后 输出为 07D0H 则 实际温度 07D0H 0 0625 2000 0 0625 1250C 例如当 DS18B20 采集到 55 的实际温度后 输出为 FC90H 则应先将 11 位数据位 取反加 1 得 370H 符号位不变 也不作为计算 则 实际温度 370H 0 0625 880 0 0625 550C 图 3 11 DS18B20 温度采集模块 3 4 键盘模块 按照键盘与 CPU 的连接方式可以分为查询按键和矩阵式键盘 由于程序操作简单 只需 4 个按键 所以选有查询式按键 查询式按键是各按键相互独立 每个按键占用 一根 I O 口线 每根 I O 口线上的按键工作状态不会影响其他 I O 口线上按键的工作 状态 查询式按键电路配置灵活 软件结构简单 但每个按键必须占用一根 I O 口线 在按键数量较多时 I O 口线浪费较大 且电路结构显得繁杂 故这种形式适用于按键 数量较少的场合 此设计因为需要的按键少 决定选用 4 个按钮的小键盘 四个按钮的功能分别为 up 键 具有向上和加 1 的功能 Down 键 具有向下和减 1 的功能 Clear 键 具有清 除返回的功能 Function 键具有运行进入的功能 它们与单片机的 P0 口相连 依次接 P0 0 P0 1 P0 2 P0 3 图 3 12 键盘模块 3 5 LCD 显示模块 就时钟而言 通常可采用液晶显示或数码管显示 由于一般的段式液晶屏 需要 专门的驱动电路 而且可视性相对较差 对于具有驱动电路和微处理器接口的液晶显 示模块 字符或点阵 一般多采用并行接口 对微处理器的接口要求较高 占用资源 多 因此 本设计采用 LGM12641BS1R 显示 LGM12641BS1R 的指令可带一个 两个参数 或无参数 若指令中含有参数 则每条指令执行时均须先送入参数 再送入指令代码 由于状态位作用不一样 因此执行不同指令必须检测不同状态位 其引脚功能如下 VCC 电源 GND 接地 DB0 DB7 数据线 复位信号 RST E 数据读写操作控制位 E 线向 LCD 模块发送一个脉冲 LCD 模块与单片机之间 将进行一次数据交换 R W 读写控制线 R W 0 写操作 R W 1 读操作 DI 显示指令控制端 Vo 液晶显示器驱动电源 Vout LCD 驱动负电压 CS1 右半屏选屏信号 CS2 左半屏选屏信号 图 3 13 LCD 显示模块 第 4 章 软件设计 本系统的软件采用 C 语言编写 主要由时钟系统 温度采集系统 控制系统和显 示系统组成 单片机向时钟芯片和测温元件发出命令使其完成读或写操作 将读出的 信息转为 BCD 码 最后送入显示系统实现功能 软件系统框图如下 控制系统 显示系统 时钟系统 温度采集系统 图 4 1 软件系统框图 4 1 温度采集软件 因为 DS18B20 温度传感器在测温时是通过累加来 记录温度的 为了温度传感器正常稳定的运行 需要 加延时子程序 程序如下 void Sensor Delay uchar count while count count 表示延时参数 值越大 延时时间越长 单总线上的所有处理都要从初始化开始 初始化 序 图 4 2 温度采集流程图 列包括总线主机发出一复位脉冲 接着由从属器件送出 存在脉冲 存在脉冲让总线控制器知道 DS18B20 在总线上且已准备好操作 初始化程 序如下 uchar Sensor Initial void 初始化模块 DS18B20 取得温度值 存入储存器 处理温度值 换成 BCD 码 显示温度 uchar i 0 dq 1 DQ 复位 Sensor Delay 8 稍做延时 dq 0 单片机将 DQ 拉低 Sensor Delay 80 精确延时 大于 480us dq 1 拉高总线 Sensor Delay 14 稍做延时后 i dq 若 x 0 则初始化成功 若 x 1 则初始化失 败 Sensor Delay 20 return i 一旦总线主机检测到从属器件的存在 它便可以发出器件 ROM 操作命令之一 所 有 ROM 操作命令均为 8 位长 ROM 操作命令 Read T 读区温度寄存器 BEh Skip ROM 跳过 ROM CCh Convert T 温度变换 44h Sensor Write Byte 0 xCC 跳过读序号列号的操作 Sensor Write Byte 0 x44 启动温度转换 Sensor Write Byte 0 xCC 跳过读序号列号的操作 Sensor Write Byte 0 xBE 读取温度寄存器 4 2 阳历软件设计 因为使用了时钟芯片 DS1302 阳历程序只需从 DS1302 各寄存器中读出年 周 月 日 时 分 秒等 数据 再处理即可 单片机是通过简单的同步串行通讯与 DS1302 通讯的 每次通讯都必须由单片机发起 无论是读还是写操作 单 片机都必须先向 DS1302 写入一个命令帧 此命令帧是由 八位二进制组成 最高位 BIT7 固定为 1 BIT6 决定操作 是针对 RAM 还是时钟寄存器 接着的 5 个 BIT 是 RAM 或时 钟寄存器在 DS1302 的内部地址 最后一个 BIT 表示这次 子程序入口 初始化 1302 时钟芯片 从 1302 时钟芯片中读 出时间和日期 读出数据为 BCD 码 送入显示缓冲单元 操作是 图 4 3 阳历流程图 读操作抑或是写操作 详细格式可见表 3 2 由此可定义位变 量 sbit ACC0 ACC 0 定义最低位 sbit ACC7 ACC 7 定义最高位 define second address0 x80 秒寄存器 define minute address0 x82 分寄存器 define hour address 0 x84 小时寄存器 define day address 0 x86 日期寄存器 define month address 0 x88 月份寄存器 define year address 0 x8C 年寄存器 首次对 DS1302 进行操作之前 必须对它进行初始化 然后从 DS1302 中读出数据 再经过处理后 送给显示缓冲单元 初始化相应程序如下 Clock Write Time 0 x8e 0 x00 WP 0 写操作 最高位为 0 时钟芯片工作 Clock Write Time second address clock time 秒 clock time 指向分 Clock Write Time minute address clock time 分 Clock Write Time hour address clock time 时 Clock Write Time day address clock time 日 Clock Write Time month address clock time 月 Clock Write Time year address clock time 年 Clock Write Time 0 x8e 0 x80 WP 1 读保护 现在已经对程序进行了初始化并且定义了寄存器 可以从 DS1302 时钟芯片中读出 时间与日期 例如 clock time Clock Read Time second add

温馨提示

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

评论

0/150

提交评论