液晶万年历的显示.doc_第1页
液晶万年历的显示.doc_第2页
液晶万年历的显示.doc_第3页
液晶万年历的显示.doc_第4页
液晶万年历的显示.doc_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

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

文档简介

毕业设计 论文 毕业设计 论文 设计 论文 题目 设计 论文 题目 液晶万年历的显示液晶万年历的显示 指指 导导 教教 师师 学学 生生 专专 业业 班班 级级 学学 生生 姓姓 名名 教教 研研室室主主任任 信信息息工工程程学学院院 二二 一一 年年 1 11 1 月月 1 10 0 日日 摘摘 要要 随着电子技术的迅速发展 特别是大规模集成电路的出现 人类生活发 生了根本性的变化 以单片机技术为核心的产品已走进了千家万户 数字万 年历的出现更是给人们的生活带来诸多方便 本文就实现了基于 AT89C52 单 片机的多功能数字万年历的设计 本设计以 AT89C52 单片机技术为核心 以各种硬件电路为基础 软件 采用 C 语言进行编写 为了便于扩展和更改 采用模块化的程序设计方法 使程序设计的逻辑关系更加简洁明了 系统升级更加简单方便 系统以 LCD1602 液晶模块为载体显示数据 所以具有人性化的操作界面和美观的页 面效果 可以显示公历日期 时间 农历日期 星期 温度 用户可以通过 按键调节系统时间 设定时间 左后完成了组装与调试 关键词 AT89C52 LCD1602 AbstractAbstract With the rapid development of electronic technology especially the emergence of large scale integrated circuits human life there has been a fundamental change The products have entered tens of thousands of household whose core is single chip technology the emergence of digital calendar is to bring a lot of people s lives easy This article worked out a design of multi functional digital calendar based on the single chip AT89S52 The design of single chip AT89S52 technology as the core based on a variety of hardware circuitry and used assembly language for the preparation of software In order to facilitate the expansion and changes to the design procedures for the used of modular design method so that the logic of the relationship between program design more concise the system more simple and convenient to upgrade System use dot matrix LCD Module 1602 font display as the data time Chinese data week temperature and has alarm functions User can adjust the system time or set the alarm time through the button I completed the assembly and commissioning finally Keywords AT89C51chip LCD1602 目录 第一章第一章 绪论绪论 1 1 11 1单片机的发展单片机的发展 1 1 21 2设计任务设计任务 1 1 31 3设计意义设计意义 1 1 41 4设计方案思路 设计方案思路 2 1 51 5 系统原理系统原理 2 第二章第二章 硬件电路设计硬件电路设计 3 2 12 1 芯片芯片 DS1302 DS1302 3 2 1 12 1 1 D DS S13021302 简介 简介 3 2 1 22 1 2 D DS S13021302 工作原理 工作原理 4 2 22 2 温度传感器 温度传感器 4 2 2 12 2 1 温度传感器 温度传感器 DS18B20DS18B20 芯片 简介 芯片 简介 4 2 2 22 2 2 DS18B20DS18B20 的主要特征的主要特征 5 2 2 32 2 3 引脚定义 引脚定义 5 2 2 42 2 4 DS18B20DS18B20 工作原理及应用 工作原理及应用 6 2 32 3 液晶显示器液晶显示器 6 2 3 12 3 1 引脚说明 引脚说明 6 2 3 22 3 2 液晶显示器的工作原理 液晶显示器的工作原理 8 2 42 4 AT89C52AT89C52 主控模块 主控模块 8 2 4 12 4 1 引脚功能特性 引脚功能特性 9 2 4 22 4 2 AT89S52AT89S52 的总线结构的总线结构 10 2 4 32 4 3 AT89C51AT89C51 的功能描述的功能描述 11 2 52 5硬件原理框图硬件原理框图 11 2 5 12 5 1 系统硬件概述系统硬件概述 12 2 5 22 5 2 主要单元电路主要单元电路 12 第三章第三章 系统软件设计系统软件设计 14 3 13 1 软件开发流程软件开发流程 14 3 1 13 1 1 系统的程序流程图系统的程序流程图 14 3 1 23 1 2 时钟设定模块设计流程图时钟设定模块设计流程图 15 3 1 33 1 3 温度设定模块设计流程图 温度设定模块设计流程图 22 第四章第四章 设计调试设计调试 27 4 14 1 开发环境介绍 开发环境介绍 27 4 24 2 PROTEUSPROTEUS调试与仿真调试与仿真 27 致谢致谢 30 附录 附录 31 液晶显示部分子程序 液晶显示部分子程序 31 按键部分子程序 按键部分子程序 34 第一章 绪论 0 第一章第一章 绪论绪论 1 11 1 单片机的发展单片机的发展 单片机是单片微型计算机的简称 也就是把微处理器 CPU 一定容量的程序存储 器 ROM 和数据存储器 RAM 输入 输出接口 I O 时钟及其他一些计算机外围电 路 通过总线连接在一起并集成在一个芯片上构成的微型计算机系统 单片机经过几十年的发展 在功能 体积 功耗 价格等各个方面已经达到非常优 异的水平 在未来的发展中 单片机将趋向实现性能化 存储器大容量化 接口多样化 集成化 低功耗化等特点 1 21 2 设计任务设计任务 万年历是我们日常生活中非常常用的功能 在液晶上显示 年 月 日 时 分 秒及星期信息 并具有可调整日期和时间 闹钟等功能 1 电路图的设计 2 在 proteus 软件下进行系统仿真 实现要求功能 3 在软件仿真完成后 进行实物制作与调试 实现题目要求的功能 4 在电路图中可以校正时间和温度的准确性 1 31 3 设计意义设计意义 随着电子技术的迅速发展 特别是随着大规模集成电路的出现 给人类生活带来了根 本性的改变 尤其是单片机技术的应用产品已经走进了千家万户 电子万年历的出现给 人们的生活带来的诸多方便 本文首先描述系统硬件工作原理 并附以系统结构框图加以说明 着重介绍了本系 统所应用的各硬件接口技术和各个接口模块的功能及工作过程 其次 详细阐述了程序 的各个模块和实现过程 第一章 绪论 1 本设计以数字集成电路技术为基础 单片机技术为核心 本文编写的主导思想是软 硬件相结合 以硬件为基础 来进行各功能模块的编写 本系统以单片机的汇编语言进 行软件设计 增加了程序的可读性和可移植性 为了便于扩展和更改 软件的设计采用 模块化结构 使程序设计的逻辑关系更加简洁明了 系统通过 LED 数码管为载体显示数 据 所以具有人性化的操作和美观的页面效果 数字万年历可以实现对 年 月 日等 时间显示的准确性 稳定性 并且实现年 月 日等的自动显示与校正 数据掉电保存 等功能及时间与阴 阳历能够总动关联 整点报时 闹铃等功能 1 41 4 设计方案思路 设计方案思路 方案一 万年历的单片机芯片选用 AT89C51 作主控制芯片 显示模块采用 LCD1602 温度检测模块采用 DS18B20 温度传感器 时钟芯片选用 DS1302 芯片 方案二 直接采用单片机定时计数器提供秒信号 使用程序实现年 月 日 星 期 时 分 秒计数 采用此种方案减少芯片的使用 节约成本 但是 实现的时间误 差较大 此次设计选择方案一 主要是因为 AT89C51 片内 ROM 全都采用 Flash ROM 能以 超低电压工作 具有在线编程可擦除技术 DS18B20 温度传感器 它具有耐磨耐碰 体 积小 使用方便 封装形式多样的优点 DS1302 芯片具有高性能 低功耗 可以对年 月 日 周日 时 分 秒进行计时 具有闰年补偿功能 工作电压为 2 5V 5 5V 满 足设计所需 1 51 5 系统原理系统原理 本系统是由 AT89C51 单片机为控制核心 时钟电路由 DS1302 提供 它可以对年 月 日 周日 时 分 秒进行计时 具有闰年补偿功能 温度的采集由 DS18B20 构成 LCD1602 用来显示数据 键盘输入电路可以调整日期 时间等的转换 通过用 C 语言编 程 从 DS1302 寄存器中读取年 月 日 周日 时 分 秒等数据信息 从 DS18B20 寄 存器中读取温度信息 再编程将以上信息送到 LCD1602 显示出来 同时 通过键扫描 编程实现调整日期 时间等的转换 第二章 硬件电路设计 2 第二章第二章 硬件电路设计硬件电路设计 2 12 1 芯片芯片DS1302 DS1302 2 1 12 1 1 Ds1302Ds1302简介 简介 实时时钟可提供秒 分 时 星期 月和年 一个月小与 31 天时可自动调整 且具 有闰年自动调整 工作电压 2 5 5 5v ds1302 内部结构 移位寄存器 控制逻辑 振荡 器 实时时钟以及 RAM RST 5 SCLK 7 I O 6 X1 2 X2 3 VCC1 8 VCC2 1 U1 DS1302 图 2 1 DS1302 是由 DS1202 改进而来 增加了以下的特性 双电源管脚用于主电源和备份 电源供应 Vcc1 为可编程涓流充电电源 附加七个字节存储器 它广泛应用于电话 传 真 便携式仪器以及电池供电的仪器仪表等产品领域 主要的性能指标 实时时钟具有能计算 2100 年之前的秒 分 时 日 日期 星期 月 年 的能力 还有闰年调整的能力 31 8 位暂存数据存储 RAM 串行 I O 口方式使得管脚数量最少 宽范围工作电压 2 0 5 5V 工作电流 2 0V 时 小于 300nA 第二章 硬件电路设计 3 读 写时钟或 RAM 数据时 有两种传送方式 单字节传送和多字节传送字符 组方式 8 脚 DIP 封装或可选的 8 脚 SOIC 封装根据表面装配 简单 3 线接口 与 TTL 兼容 Vcc 5V 可选工业级温度范围 40 85 与 DS1202 兼容 在 DS1202 基础上增加的特性 对 Vcc1 有可选的涓流充电能力 双电源管用于主电源和备份电源供应 备份电源管脚可由电池或大容量电容输入 附加的 7 字节暂存存储器 2 1 22 1 2 Ds1302Ds1302工作原理 工作原理 DS1302 与单片机之间能简单地采用同步串行的方式进行通信 仅需用到三个口线 1 RST 复位 2 I O 数据线 3 SCLK 串行时钟 其中 RST 从低电平变成高 电平启动一次数据传输过程 SCLK 一般数据写入有效是在上升沿 读出有效是在下降沿 平时 SCLK 保持低电平 在时钟变动前设置数据 在时钟变动后读取数据 即数据操作总 是在 SCLK 保持为低电平的时候 相邻的操作之间间隔一个上升沿和一个下降沿 2 1 32 1 3 管脚描述 管脚描述 X1 X2 32 768KHz 晶振管脚 GND 地 RST 复位脚 I O 数据输入 输出引脚 SCLK 串行时钟 Vcc1 Vcc2 电源供电管脚 2 22 2 温度传感器 温度传感器 2 2 12 2 1 温度传感器 温度传感器 DS18B20DS18B20芯片 简介 芯片 简介 DS18B20 是美国 DALLAS 半导体公司继 DS1820 之后最新推出的一种改进型智能温度 第二章 硬件电路设计 4 传感器 与传统的热敏电阻相比 他能够直接读出被测温度并且可根据实际要求通过简 单的编程实现 9 12 位的数字值读数方式 DS18B20 具有耐磨耐碰 体积小 使用方便 封装形式多样 适用于各种狭小空间设备数字测温和控制领域 DS18B20 内部结构主要由四部分组成 64 位光刻 ROM 温度传感器 非挥发的温度报 警触发器 TH 和 TL 配置寄存器 图 2 2 2 2 22 2 2 DS18B20DS18B20的主要特征的主要特征 全数字温度转换及输出 先进的单总线数据通信 最高 12 位分辨率 精度可达 0 5 摄氏度 12 位分辨率时的最大工作周期为 750 毫秒 可选择寄生工作方式 检测温度范围为 55 125 67 257 内置 EEPROM 限温报警功能 64 位光刻 ROM 内置产品序列号 方便多机挂接 多样封转形式 适应不同硬件系统 2 2 32 2 3 引脚定义 引脚定义 DQ 4 脚 为数字信号输入 输出端 GND 5 脚 为电源地 VDD 3 脚 为外接供电电源输入端 在寄生电源接线方式时接地 第二章 硬件电路设计 5 NC 1 2 6 7 8 脚 空引脚 悬空不使用 2 2 42 2 4 DS18B20DS18B20工作原理及应用 工作原理及应用 DS18B20 的读写时序和测温原理与 DS1820 相同 只是得到的温度值的位数因分辨率 不同而不同 且温度转换时的延时时间由 2S 减为 750ms 低温度系数晶振的振荡频率受 温度影响很小 用于产生固定频率的脉冲信号送给计数器 1 高温度系数晶振随温度变 化其振荡率明显改变 所产生的信号作为计数器 2 的脉冲输入 计数器 1 和温度寄存器 被预置在 55 所对应的一个基数值 计数器 1 对低温度系数晶振产生的脉冲信号减法计 数 当计数器 1 的预置值减到 0 时 温度寄存器的值将加 1 计数器 1 的预置将重新被 装入 计数器 1 重新开始对低温度系数晶振产生的脉冲信号进行计数 如此循环直到计 数器 2 计数到 0 时 停止温度寄存器值的累加 此时温度寄存器中的数值即为所测温度 2 32 3 液晶显示器液晶显示器 采用 LM016L 作为显示器件输出信息 与传统的 LED 数码管显示器件相比 液晶显示 模块具有体积小 功耗小 显示内容丰富等优点 而且不需要外加驱动电路 现在液晶 显示模块已经是单片机应用设计中最常用的显示器件了 LCD1602 可以显示 2 行 16 个字 符 具有 8 位数据总线 D0 D7H 和 RS R W E 三个控制端口 工作电压为 5V 并且带 有字符对比度调节和背光设置 液晶显示的分类方法很多 通常可按显示方式分为段式 字符式 点阵式等 2 3 12 3 1 引脚说明 引脚说明 第二章 硬件电路设计 6 表2 1 第 1 脚 VSS 为地电源 第 2 脚 VDD 接 5V 正电源 第 3 脚 VL 为液晶显示器对比度调整端 接正电源时对比度最弱 接地时对比度最 高 对比度过高时会产生 鬼影 使用时可以通过一个 10K 的电位器调整对比度 第 4 脚 RS 为寄存器选择 高电平时选择数据寄存器 低电平时选择指令寄存器 第 5 脚 R W 为读写控制端 高电平时进行读操作 低电平时进行写操作 当 RS 和 R W 共同为低电平时可以写入指令或者显示地址 当 RS 为低电平 R W 为高电平时可以读 忙信号 当 RS 为高电平 R W 为低电平时可以写入数据 第 6 脚 E 端为使能端 当 E 端由高电平跳变成低电平时 液晶模块执行命令 第 7 14 脚 D0 D7 为 8 位双向数据线 第 15 脚 BLA 背光源正极 第 16 脚 BLK 背光源负极 第二章 硬件电路设计 7 1602 液晶显示模块可以和单片机 AT89C52 直接接口图 图 2 3 2 3 22 3 2液晶显示器的工作原理 液晶显示器的工作原理 液晶显示的原理是利用液晶的物理特性 通过电压对其显示区域进行控制 有电就 有显示 这样即可以显示出图形 液晶显示器具有厚度薄 适用于大规模集成电路直接 驱动 易于实现全彩色显示的特点 目前已经被广泛应用在便携式电脑 数字摄像机 PDA 移动通信工具等众多领域 2 42 4 AT89C52AT89C52主控模块 主控模块 第二章 硬件电路设计 8 图 2 4 2 4 12 4 1 引脚功能特性 引脚功能特性 P0 口 32 脚 39 脚 P0 口是一个 8 位漏极开路的双向 I O 口 作为输出口 每位 能驱动 8 个 TTL 逻辑电平 P1 口 1 脚 8 脚 P1 口是一个具有内部上拉电阻的 8 位双向 I O 口 P1 输出缓 冲器能驱动 4 个 TTL 逻辑电平 引脚号第二功能 P1 0 T2 定时器 计数器 T2 的外部计数输入 时钟输出 P1 1 T2EX 定时器 计数器 T2 的捕捉 重载触发信号和方向控制 P1 5 MOSI 在系统编程用 P1 6 MISO 在系统编程用 P1 7 SCK 在系统编程用 表 2 2 P2 口 21 脚 28 脚 P2 口是一个具有内部上拉电阻的 8 位双向 I O 口 P2 输出 缓冲器能驱动 4 个 TTL 逻辑电平 P3 口 10 脚 17 脚 P3 口是一个具有内部上拉电阻的 8 位双向 I O 口 P3 输出 缓冲器能驱动 4 个 TTL 逻辑电平 P3 口同时为闪烁编程和编程效验接受一些控制信号 引脚号第二功能 第二章 硬件电路设计 9 P3 0RXD 串行输入 P3 1TXD 串行输出 P3 2INT0 外部中断 0 P3 3INT0 外部中断 0 P3 4T0 定时器 0 外部输入 P3 5T1 定时器 1 外部输入 P3 6WR 外部数据存储器写选通 P3 7RD 外部数据存储器读选通 表 2 3 RST 复位输入 当振荡器复位器件时 要保持 RST 脚两个机器周期的高电平时间 ALE PROG 地址锁存控制信号 在系统扩展时 ALE 用于控制把 P0口输出低 8 位地 址锁存起来 以实现低位地址和数据的隔离 此外由于 ALE 是以晶振六分之一的固定频 率输出的正脉冲 因此可作为外部时钟或外部定时脉冲作用 PSEN外部程序存储器读选取通信号 在读外部 ROM 时PSEN有效 低电平 以实 现外部 ROM 单元的读操作 XTAL1和 XTAL2外接晶体引线端 当使用芯片内部时钟时 此二引线端用于外接石英 晶体和微调电容 当使用外部时钟时 用于拉外部的时钟脉冲信号 EA访问程序存储器控制信号 当EA信号为低电平时 对 ROM 的读操作限 定在外部程序存储器 而当EA信号为高电平时 则对 ROM 的读操作是从内部程序存 储器开始 并可延至外部程序存储器 VSS 地线 VCC 5V 电源 2 4 22 4 2 AT89S52AT89S52的总线结构的总线结构 AT89S52 的管脚除了电源 复位 时钟接入 用户 I O 口部分 P3 外 其余管脚都是为实 现系统扩展而设置的 这些管脚构成了三总线形式 即 1 地址总线 AB 地址总线宽度为 16 位 因此 其外部存储器直接地址外围为 64K 字节 16 位地址总线由 P0 经地址锁存器提供低 8 位地址 A0 A7 P2 口直接提供 高 8 位地址 A8 A15 2 数据总线 DB 数据总线宽度为 8 位 由 P0 口提供 3 控制总线 CB 由部分 P3 口的第二功能状态和 4 根独立控制线 RESET EA ALE PSE组成 第二章 硬件电路设计 10 2 4 32 4 3 AT89C51AT89C51的功能描述的功能描述 AT89C51是一种低功耗 高性能 CNOS八位微处理器 片内有4K字节的在线课重复 编程 快速擦除快速写入程序的存储器 能重复写入 擦除1000次 数据保存时间为十年 它与MCA 51系列单片机在指令系统和引脚上完全兼容 不仅可完全代替MCA 51系列单片 机 而且能使系统具有许多MCA 51系列产品没有的功能 AT89C51 可构成真正的单片机最小应用系统 缩小系统体积 增加系统的可靠性 降低 系统的成本 只要程序长度小于 4K 四个 I O 全部提供给用户 可用 5V 电压编程 而 且擦写时间仅需 10 毫秒 仅为 8751 87C51 的擦除时间看的百分之一 与 8751 87C51 的 12V 电压擦写相比 不易损坏器件 没有两种电源的要求 改写时不拔下芯片 适合 许多嵌入式控制领域 工作电压范围 2 7 6V 全静态工作 工作频率宽在 0HZ 24MHZ 中间 比 8751 87C51 等 51 系列的 6MHZ 12MHZ 更具有灵活性 系统能快能慢 AT89C51 芯片提供三级程序存储器加密 提供了方便灵活而可靠的硬加密手段 能完全保证程序 或系统不被仿制 P0 口是三态双相口 通称数据总线口 因为只有该口能直接对外部存 储器的读 写操作 2 52 5硬件原理框图硬件原理框图 主主 控控 芯芯 片片 液晶显示电液晶显示电 路路 时钟电路时钟电路 Ds1302Ds1302 时时 钟控制电路钟控制电路 DS18B20DS18B20 温度温度 检测系统检测系统 复位电路复位电路 按键按键 第二章 硬件电路设计 11 原理框图 2 5 模块说明 DS1302 时钟模块可以输出其当前日期 时间及星期 键盘输入电路可以调整日期 时间等的转换 DS18B20 温度模块可以测量当前室内的温度 显示电路则显示当前的系统运行情况 2 5 12 5 1 系统硬件概述系统硬件概述 本电路是由 AT89C52 单片机为控制核心 具有在线编程功能 低功耗 能在 3v 超低 压下工作 时钟电路由 DS1302 提供 它是一种高性能 低功耗 带 RAM 的实时时钟电路 它可以对年 月 日 每周 时 分 秒进行计时 具有闰年补偿功能 工作电压为 2 5 5 5v 采用三线接口与 CPU 进行同步通信 并可采用突发方式一次传送多个字节的 时钟信号或 RAM 数据 DS1302 内部有一个用于临时性存放数据的 RAM 寄存器 可产生年 月 日 时 分 秒 具有实用寿命长 精度高和低功耗等特点 同时具有掉电自动保 存功能 显示部分由 LM016L 液晶显示屏显示 2 5 22 5 2 主要单元电路主要单元电路 第二章 硬件电路设计 12 单片机最小系统图2 6 显示模块电路 2 7 第三章 系统软件设计 13 第三章第三章 系统软件设计系统软件设计 3 13 1 软件开发流程软件开发流程 3 1 13 1 1 系统的程序流程图系统的程序流程图 万年历的程序主要包括 延时程序 键盘调整 温度显示模块程序 时钟显示模块程序 液晶 数据显示程序等 读取温度 时间 LCD 关闭 LCD 显示 扫描按键 NOYES 图3 1 开始 初始化 LCD 1302 18B20 允许 LCD 显 示 时间设定 第三章 系统软件设计 14 3 1 23 1 2 时钟设定模块设计流程图时钟设定模块设计流程图 DS1302可以对年 月 日 星期 时 分 秒进行计时 且具有闰年补偿功能 设 计时不需要加电容 只需加一个晶振就可以了 DS1302 初始化 从 DS1302 中读出数据 放入 RAM 调用显示程序 LCD 显示时间 时间设置 图3 2 相关程序 typedef struct SYSTEMTIME unsigned char Second unsigned char Minute unsigned char Hour unsigned char Week unsigned char Day 开始 数据写回 DS1302 保存 返回 第三章 系统软件设计 15 unsigned char Month unsigned char Year unsigned char DateString 11 unsigned char TimeString 9 SYSTEMTIME 定义的时间类型 SYSTEMTIME CurrentTime define AM X X define PM X X 12 转成24小时制 define DS1302 SECOND0 x80 时钟芯片的寄存器位置 存放时间 define DS1302 MINUTE0 x82 define DS1302 HOUR0 x84 define DS1302 WEEK0 x8A define DS1302 DAY0 x86 define DS1302 MONTH0 x88 define DS1302 YEAR0 x8C void DS1302InputByte unsigned char d 实时时钟写入一字节 内部函数 unsigned char i ACC d for i 8 i 0 i DS1302 IO ACC0 相当于汇编中的 RRC DS1302 CLK 1 DS1302 CLK 0 ACC ACC 1 第三章 系统软件设计 16 unsigned char DS1302OutputByte void 实时时钟读取一字节 内部函数 unsigned char i for i 8 i 0 i ACC ACC 1 相当于汇编中的 RRC ACC7 DS1302 IO DS1302 CLK 1 DS1302 CLK 0 return ACC void Write1302 unsigned char ucAddr unsigned char ucDa ucAddr DS1302地址 ucData 要写的数据 DS1302 RST 0 DS1302 CLK 0 DS1302 RST 1 DS1302InputByte ucAddr 地址 命令 DS1302InputByte ucDa 写1Byte数据 DS1302 CLK 1 DS1302 RST 0 unsigned char Read1302 unsigned char ucAddr 读取DS1302某地址的数据 unsigned char ucData DS1302 RST 0 第三章 系统软件设计 17 DS1302 CLK 0 DS1302 RST 1 DS1302InputByte ucAddr 0 x01 地址 命令 ucData DS1302OutputByte 读1Byte数据 DS1302 CLK 1 DS1302 RST 0 return ucData void DS1302 GetTime SYSTEMTIME Time 获取时钟芯片的时钟数据到自定义 的结构型数组 unsigned char ReadValue ReadValue Read1302 DS1302 SECOND Time Second ReadValue ReadValue Read1302 DS1302 MINUTE Time Minute ReadValue ReadValue Read1302 DS1302 HOUR Time Hour ReadValue ReadValue Read1302 DS1302 DAY Time Day ReadValue ReadValue Read1302 DS1302 WEEK Time Week ReadValue ReadValue Read1302 DS1302 MONTH Time Month ReadValue ReadValue Read1302 DS1302 YEAR Time Year ReadValue 第三章 系统软件设计 18 void DateToStr SYSTEMTIME Time 将时间年 月 日 星期数据转换成液晶 显示字符串 放到数组里DateString if hide year 2 这里的if else语句都是判断位闪烁 2就不显示 输出字符串为 2007 07 22 Time DateString 0 2 Time DateString 1 0 Time DateString 2 Time Year 10 0 Time DateString 3 Time Year 10 0 else Time DateString 0 Time DateString 1 Time DateString 2 Time DateString 3 Time DateString 4 if hide monthDateString 5 Time Month 10 0 Time DateString 6 Time Month 10 0 else Time DateString 5 Time DateString 6 Time DateString 7 第三章 系统软件设计 19 if hide dayDateString 8 Time Day 10 0 Time DateString 9 Time Day 10 0 else Time DateString 8 Time DateString 9 if hide weekWeek 10 0 星期的数据另外放到 week value 数组里 跟年 月 日的分开存放 因为等一下要在最后显示 else week value 0 week value 1 0 Time DateString 10 0 字符串末尾加 0 判断结束字符 void TimeToStr SYSTEMTIME Time 将时 分 秒数据转换成液晶显示字符放到 数组 TimeString if hide hourTimeString 0 Time Hour 10 0 Time TimeString 1 Time Hour 10 0 第三章 系统软件设计 20 else Time TimeString 0 Time TimeString 1 Time TimeString 2 if hide minTimeString 3 Time Minute 10 0 Time TimeString 4 Time Minute 10 0 else Time TimeString 3 Time TimeString 4 Time TimeString 5 if hide secTimeString 6 Time Second 10 0 Time TimeString 7 Time Second 10 0 else Time TimeString 6 Time TimeString 7 Time DateString 8 0 第三章 系统软件设计 21 void Initial DS1302 void 时钟芯片初始化 unsigned char Second Read1302 DS1302 SECOND if Second 写入允许 Write1302 0 x8c 0 x07 以下写入初始化时间 日期 07 07 25 星期 3 时间 23 59 55 Write1302 0 x88 0 x07 Write1302 0 x86 0 x25 Write1302 0 x8a 0 x07 Write1302 0 x84 0 x23 Write1302 0 x82 0 x59 Write1302 0 x80 0 x55 Write1302 0 x8e 0 x80 禁止写入 3 1 33 1 3 温度设定模块设计流程图 温度设定模块设计流程图 DS18B20的初始化 先将数据线置高电平 1 延时 数据线拉到低电平 0 延时750微秒 该时间的时间范围可以从480到960微秒 数据拉到高电平 1 延时等待 如果初始化成功则在15到60毫秒时间之内产生一个由DS18B20所返回的 低电平 0 据该状态可以来确定它的存在 但是不能无限的进行等待 不然会使程序 第三章 系统软件设计 22 进入死循环 所以要进行超时控制 若CPU读到了数据线上的低电平 0 后 还要做延时 其延时的时间从发出的高 电平算起最少要480微秒 将数据线再次拉高到高电平 1 后结束 图3 3 相关程序 void delay 18B20 unsigned int i while i ds18b20初始化函数 void Init DS18B20 void unsigned char x 0 DQ 1 DQ复位 delay 18B20 8 稍做延时 DQ 0 单片机将DQ拉低 delay 18B20 80 精确延时 大于 480us 开始 DS18B20 初始化 从 DS18B20 中读出数据 放入 RAM LCD 模块显示温度 返回 第三章 系统软件设计 23 DQ 1 拉高总线 delay 18B20 14 x DQ 稍做延时后 如果x 0则初始化成功 x 1则初始化失败 delay 18B20 20 ds18b20读一个字节 unsigned char ReadOneChar void uchar i 0 uchar dat 0 for i 8 i 0 i DQ 0 给脉冲信号 dat 1 DQ 1 给脉冲信号 if DQ dat 0 x80 delay 18B20 4 return dat ds18b20写一个字节 void WriteOneChar uchar dat unsigned char i 0 for i 8 i 0 i 第三章 系统软件设计 24 DQ 0 DQ dat delay 18B20 5 DQ 1 dat 1 读取ds18b20当前温度 void ReadTemp void unsigned char a 0 unsigned char b 0 unsigned char t 0 Init DS18B20 WriteOneChar 0 xCC 跳过读序号列号的操作 WriteOneChar 0 x44 启动温度转换 delay 18B20 100 this message is wery important Init DS18B20 WriteOneChar 0 xCC 跳过读序号列号的操作 WriteOneChar 0 xBE 读取温度寄存器等 共可读9个寄存器 前两个就是温度 delay 18B20 100 a ReadOneChar 读取温度值低位 第三章 系统软件设计 25 b ReadOneChar 读取温度值高位 temp value b 4 void temp to str 温度数据转换成液晶字符显示 TempBuffer 0 temp value 10 0 十位 TempBuffer 1 temp value 10 0 个位 TempBuffer 2 0 xdf 温度符号 TempBuffer 3 C TempBuffer 4 0 void Delay1ms unsigned int count unsigned int i j for i 0 i count i for j 0 j0 delay for i 0 i0 x59 超过59秒 清零 temp 0 break case 2 temp Read1302 DS1302 MINUTE 读取分数 temp temp 1 分数加1 up flag 1 if temp 0 x59 超过59分 清零 temp 0 break case 3 temp Read1302 DS1302 HOUR 读取小时数 附录 34 temp temp 1 小时数加1 up flag 1 if temp 0 x23 超过23小时 清零 temp 0 break case 4 temp Read1302 DS1302 WEEK 读取星期数 temp temp 1 星期数加1 up flag 1 if temp 0 x7 temp 1 break case 5 temp Read1302 DS1302 DAY 读取日数 temp temp 1 日数加1 up flag 1 if temp 0 x31 temp 1 break case 6 temp Read1302 DS1302 MONTH 读取月数 temp temp 1 月数加1 up flag 1 if temp 0 x12 temp 1 break case 7 temp Read1302 DS1302 YEAR 读取年数 temp temp 1 年数加1 up flag 1 附录 35 if temp 0 x85 temp 0 break default break while Up 0 while wireless 2 1 void Downkey 降序按键 Down 1 if Down 0 wireless 3 1 mdelay 8 switch count case 1 temp Read1302 DS1302 SECOND 读取秒数 temp temp 1 秒数减1 down flag 1 数据调整后更新标志 if temp 0 x7f 小于0秒 返回59秒 temp 0 x59 break case 2 temp Read1302 DS1302 MINUTE 读取分数 temp temp 1 分数减1 down flag 1 if temp 1 temp 0 x59 小于0秒 返回59秒 break 附录 36 case 3 temp Read1302 DS1302 HOUR 读取小时数 temp temp 1 小时数减1 down flag 1 if temp 1 temp 0 x23 break case 4 temp Read1302 DS1302 WEEK 读取星期数 temp temp 1 星期数减1 down flag 1 if temp 0 temp 0 x7 break case 5 temp Read1302 DS1302 DAY 读取日数 temp temp 1 日数减1 down flag 1 if temp 0 temp 31 break case 6 temp Read1302 DS1302 MONTH 读取月数 temp temp 1 月数减1 down flag 1 if temp 0 temp 12 break case 7 temp Read1302 DS1302 YEAR 读取年数 附录 37 temp temp 1 年数减1 down flag 1 if temp 1 temp 0 x85 break default break while Down 0 while wireless 3 1 void Setkey 模式选择按键 Set 1 if Set 0 wireless 4 1 mdelay 8 count count 1 Setkey按一次 count就加1 done 1 进入调整模式 while Set 0 while wireless 4 1 void keydone 按键功能执行 uchar Second if flag 0 关闭时钟 停止计时 Write1302 0 x8e 0 x00 写入允许 temp Read1302 0 x80 Write1302 0 x80 temp 0 x80 Write1302 0 x8e 0 x80 禁止写入 附录 38 flag 1 Setkey 扫描模式切换按键 switch count case 1 do count 1 调整秒 outkey 扫描跳出按钮 Upkey 扫描加按钮 Downkey 扫描减按钮 if up flag 1 down flag 1 数据更新 重新写入新的数据 Write1302 0 x8e 0 x00 写入允许 Write1302 0 x80 temp 0 x80 写入新的秒数 Write1302 0 x8e

温馨提示

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

评论

0/150

提交评论