电子万年历的设计毕业论文一稿.doc_第1页
电子万年历的设计毕业论文一稿.doc_第2页
电子万年历的设计毕业论文一稿.doc_第3页
电子万年历的设计毕业论文一稿.doc_第4页
电子万年历的设计毕业论文一稿.doc_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

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

文档简介

学士学位论文学士学位论文 电子万年历的设计电子万年历的设计 目录目录 内容摘要 1 关键词 1 Abstract 1 Key words 1 1 引言 2 2 设计要求与方案论证 2 2 1 设计要求 2 2 2 系统基本方案选择和论证 2 2 2 1 单片机芯片的选择方案和论证 2 2 2 2 显示模块选择方案和论证 3 2 2 3 时钟芯片的选择方案和论证 3 2 2 4 温度传感器的选择方案与论证 4 2 3 电路设计最终方案决定 4 3 系统的硬件设计与实现 4 3 1 电路设计框图 4 3 2 系统硬件概述 5 3 3 主要单元电路的设计 5 3 3 1 单片机主控制模块的设计 5 3 3 2 时钟电路模块的设计 6 3 3 3 温度采集模块设计 7 3 3 4 显示模块的设计 8 3 3 5 相关电路原理及说明 8 4 系统的软件设计 10 4 1 程序流程框图 10 4 2 阳历显示程序设计 11 4 3 时间调整程序设计 11 4 4 温度数据采集与显示程序设计 13 4 4 1 基本功能实现程序 13 4 4 2 读出温度子程序 13 4 4 3 温度转换命令子程序 13 4 4 4 温度计算子程序 14 4 4 5 显示数据刷新子程序 14 5 系统仿真与调试 15 5 1 系统仿真 15 5 2 硬件制作与调试 16 5 2 1 硬件制作 16 5 2 2 硬件调试 16 6 结束语 17 参考文献 18 致谢 19 附录 1 系统电路图 20 附录 2 系统程序清单 21 内容摘要 内容摘要 电子万年历是单片机系统的一个应用 由硬件和软件 相配合使用 硬件由主控器 时钟电路 温度检测电路 显示电路 键盘接口 5 个模块组成 本设计的主控模块使用 AT89C52 时钟电路 使用时钟芯片 DS1302 显示模块使用液晶显示器 LCD1602 温度检测 使用 DS18B20 温度传感器 键盘接口电路使用普通按键接上拉电阻完 成 软件利用 C 语言编程实现单片机程序控制 单片机通过时钟芯片 DS1302 获取时间数据 DS18B20 采集温度信号送给单片机处理 单片 机再把时间数据和温度数据送给液晶显示器 LCD1602 从而显示阳历 年 月 日 时 秒 闹钟 星期 温度 关键词关键词 电子万年历 单片机 温度传感器 时钟 液晶显示器 AbstractAbstract Electronic perpetual calendar which is an application of the single chip processor system is utilized by combining hardware and software And Hardware is composed of five modules Main control unit clock circuit temperature test circuit display circuit keyboard interface Main control board adopts AT89S52 clock circuit adopts the DS1302 clock chip display module adopts the liquid crystal display 1602 and temperature test adopts the DS18B20 temperature sensor keyboard interface circuit is completed by connecting ordinary button with pull up resistor Software takes advantage of C to program so as to realize the programmed control of single chip processor Single chip processor gets the time data through using the DS1302 clock chip The DS18B20 gathers temperature signals and transmits them to single chip processor Then the single chip processor transmits the time data and the temperature data to the LCD1602 Lastly the LCD displays the solar calendar year with year month day hour minute second alarm clock week and temperature KeyKey wordswords Electronic perpetual calendar single chip processor temperature sensor clock liquid crystal display 1 1 引言引言 随着微电子技术和超大规模集成电路技术的不断发展 家用电子 产品不但种类日益丰富 而且变得更加经济实用 单片微型计算机体 积小 性价比高 功能强 可靠性高等独有的特点 在各个领域得到 了广泛的应用 电子万年历是一种应用非常广泛的日常计时工具 数 字显示的日历钟已经越来越流行 特别是适合在家庭居室 办公室 大厅 会议室 车站和广场等使用 LCD 液晶显示的日历钟显示清晰 直观 走时准确 可以进行夜视 并且还可以扩展出多种功能 可以 实现公历年月日 时分秒 星期 温度显示等功能 但通过我们对各 种电子钟表 日历的不断观察和总结 发现目前市场的电子钟表 日 历都存在一些不足之处 比如 时钟不精确 产品成本太高 无环境 温度显示等 这都给人们的使用带来了某些不便 因此 研制一种结 构简单 价格低廉 功能齐全的电子万年历是非常有必要的 它具有 非常广阔的市场空间与发展前景 有着很大的现实意义 为此我设计 了这种基于 52 单片机的电子万年历 2 2 设计要求与方案论证设计要求与方案论证 2 12 1 设计要求设计要求 显示部分可采用数码管或液晶显示器 可显示当前时间 用阳历 显示年 月 日 时间用 24 小时制显示 这里 可以将万年历的功能进行扩展 使其 1 具有显示年 月 日 星期 时 分 秒的功能 2 时间与日期能够自动关联 3 具有温度计功能 4 具有年 月 日 星期 时 分 秒的设置功能 2 22 2 系统基本方案选择与论证系统基本方案选择与论证 2 2 12 2 1 单片机芯片的选择方案和论证单片机芯片的选择方案和论证 方案一 采用 AT89C51 作为主控制芯片 AT89C51 片内 ROM 采用 Flash ROM 内部具有 4KB ROM 存储空间 能在 3V 的超低压下工作 而且与 MCS 51 系列单片机完全兼容 但是 在运用于电路设计时 由于不具备 ISP 在线编程技术 当在对电路进 行调试时 由于程序的错误需要修改或对程序进行增加功能需要烧入 程序时 对芯片的多次插拔会对芯片造成一定的损坏 方案二 采用 AT89C52 作为主控制芯片 AT89C52 片内 ROM 全部采用 Flash ROM 能在 3V 的超低压下工作 同时也与 MCS 51 系列单片机完全兼容 该芯片内部存储器为 8KB ROM 存储空间 同样具有 AT89C51 的功能 且具有在线编程可擦除技术 当在对电路进行调试时 由于程序的错误需要修改或对程序进行增加 功能需要烧入程序时 不需要对芯片多次插拔 所以不会对芯片造成 损坏 综合考虑 选择采用 AT89C52 芯片作为主控制芯片 2 2 22 2 2 显示模块选择方案和论证显示模块选择方案和论证 方案一 采用 LED 数码管动态扫描显示 LED 数码管价格适中 对于显示数字较合适 而且采用动态扫描 法与单片机连接时 占用的单片机接口线少 但是数码管焊接太繁琐 附带的驱动元件太多 较易出错 所以不采用此方案 方案二 采用点阵式数码管显示 点阵式数码管是由八行八列的发光二极管组成 对于显示文字比 较合适 使用来显示数字则显得太浪费 且价格相对较高 所以不采 用此方案 方案三 采用 LCD 液晶显示器 液晶显示器的显示功能强大 可显示大量文字 图形 显示多样 清晰可见 焊接也较方便 但是价格相对较贵 需要的接口线较多 总体可以考虑 综合考虑 选择采用 LCD1602 液晶显示器作为显示模块 2 2 32 2 3 时钟芯片的选择方案和论证时钟芯片的选择方案和论证 方案一 采用单片机定时计数器 直接采用单片机定时计数器提供秒信号 使用程序实现年 月 日 星期 时 分 秒计数 采用此方案虽然可以减少芯片的使用 节约成本 但是实现的时间误差较大 所以不采用此方案 方案二 采用 DS1302 时钟芯片实现时钟 DS1302 芯片是一种高性能的时钟芯片 可自动对年 月 日 星 期 时 分 秒以及闰年补偿的年进行计数 而且精度高 8 位的 RAM 做为数据暂存区 工作电压在 2 5V 5 5V 范围内 耗电量小 2 5V 时耗电小于 300uA 综合考虑 选择采用 DS1302 作为时钟芯片来实现时钟 2 2 42 2 4 温度传感器的选择方案和论证温度传感器的选择方案和论证 方案一 采用热敏电阻作为传感器 用热敏电阻与一个相应阻值电阻相串联分压 利用热敏电阻阻值 随温度变化而变化的特性 采集这两个电阻变化的分压值 并进行 A D 转换 此设计方案需用 A D 转换电路 增加硬件成本而且热敏电 阻的感温特性曲线并不是严格线性的 会产生较大的测量误差 方案二 采用数字式温度传感器 DS18B20 此类传感器为数字式传感器 而且仅需一条数据线进行数据传输 易于与单片机连接 可以去除 A D 模块 降低硬件成本 简化系统电 路 另外 数字式温度传感器还具有测量精度高 测量范围广等优点 综合考虑 选择采用 DS18B20 作为温度传感器 2 32 3 电路设计最终方案决定电路设计最终方案决定 综合以上各方案所述 本设计的总体方案选定为 采用 AT89C52 作为作为主控制芯片 LCD1602 液晶显示器作为显示模块 DS1302 作 为时钟芯片来实现时钟 DS18B20 作为温度传感器 3 3 系统的硬件设计与实现系统的硬件设计与实现 3 13 1 硬件电路设计框图硬件电路设计框图 AT89C52 主控制模 块 LED 数码管动态 扫描显示模块 DS1302 时钟模块 键盘控制模块 温度采集模块 图 1 硬件电路设计框图 3 23 2 系统硬件概述系统硬件概述 本电路以 AT89C52 单片机为控制核心 具有在线编程功能 低功 耗 能在 3V 的超低压下工作 时钟电路由 DS1302 提供 它是一种高 性能 高精度 低功耗 带 RAM 的实时时钟电路 可以对年 月 日 星期 时 分 秒进行计时 并具有闰年补偿功能 工作电压为 2 5V 5 5V 采用三线接口与 CPU 进行同步通信 并可采用突发方式 一次传送多个字节的时钟信号或 RAM 数据 同时具有掉电自动保存功 能 温度采集电路由 DS18B20 构成 显示部分由液晶显示器 LCD1602 构成 3 33 3 主要单元电路的设计主要单元电路的设计 3 3 13 3 1 单片机主控制模块的设计单片机主控制模块的设计 AT89C52 为 8 位通用微处理器 采用工业标准的 C51 内核 在内 部功能及管脚排布上与通用的 8xC52 相同 其主要用于会聚调整时的 功能控制 功能包括对会聚主 IC 内部寄存器 数据 RAM 及外部接口 等功能部件的初始化 会聚调整控制 会聚测试图控制 红外遥控信 号 IR 的接收解码及与主板 CPU 通信等 主要管脚有 XTAL1 19 脚 和 XTAL2 18 脚 为振荡器输入输出端口 外接 12MHz 晶振 RST VPD 9 脚 为复位输入端口 外接电阻电容组成的复位电路 VCC 40 脚 和 VSS 20 脚 为供电端口 分别接 5V 电源的正负端 P0 P3 为可编程通用 I O 口 其功能用途由软件定义 在本设计中 P0 端口 32 39 脚 定义为 N1 功能控制端口 分别与 N1 的相应功能 管脚相连接 13 脚定义为 IR 输入端 10 脚和 11 脚定义为 I2C 总线 控制端口 分别连接 N1 的 SDAS 18 脚 和 SCLS 19 脚 端口 12 脚 27 脚及 28 脚定义为握手信号功能端口 连接主板 CPU 的相应功 能端 用于当前制式的检测及会聚调整状态进入的控制功能 图 2 AT89C52 主控制系统 AT89C52 单片机为 40 引脚双列直插芯片 有四个 8 位 I O 口 P1 P2 P3 和 P4 每一条 I O 线都能独立地作为输出或输入 单片机的最小系统如上图所示 18 引脚和 19 引脚接时钟电路 XTAL1 接外部晶振和微调电容的一端 在片内它是振荡器倒相放大器 的输入 XTAL2 接外部晶振和微调电容的另一端 在片内它是振荡器 倒相放大器的输出 第 9 引脚为复位输入端 接上电容 电阻及开关 构成上电复位电路 20 引脚为接地端 40 引脚为电源端 3 3 23 3 2 时钟电路模块的设计时钟电路模块的设计 图 3 DS1302 引脚连线图 图 3 表示出 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 5V 之前 RST 必须保持低电 平 只有在 SCLK 为低电平时 才能将 RST 置为高电平 I O 为串行数 据输入端 双向 SCLK 始终为输入端 3 3 33 3 3 温度采集模块的设计温度采集模块的设计 图 4 DS18B20 温度采集引脚连线图 如图 4 所示 采用数字式温度传感器 DS18B20 它是数字式温度 传感器 具有测量精度高 电路连接简单等特点 此类传感器仅需要 一条数据线进行数据传输 使用 P0 7 与 DS18B20 的 I O 口连接 加 上一个上拉电阻 VCC 接电源 GND 接地 3 3 43 3 4 显示模块的设计显示模块的设计 如下图 5 所示 使用液晶显示器 LCD1602 作为显示模块 VDD 接 5V 电源驱动 VSS 接地 D0 D7 分别接 10K 的上拉电阻 并与单片机 接口中的 P0 口对应连接 RS RW E 分别与单片机接口中的 P2 5 P2 6 P2 7 连接 此外 VEE 接一个 10K 的滑动变阻器 这样 就可以对液晶显示器的亮度进行调节 图 5 LCD1602 显示电路连接图 3 3 53 3 5 相关电路原理及说明相关电路原理及说明 1 时钟芯片 DS1302 的工作原理 DS1302 在每次进行读 写程序前都必须初始化先把 SCLK 端置 0 接着把 RST 端置 1 最后才给予 SCLK 脉冲 读 写时序 如下图 6 所示 表 1 为 DS1302 的控制字 表 2 为 DS1302 的日历 时 间寄存器内容 2 DS1302 的控制字节 DS1302 的控制字如表 1 所示 此控制字的位 7 必须置 1 若 为 0 则不能对 DS1302 进行读写数据 对于位 6 若对程序进行 读 写时 RAM 1 对时间进行读 写时 CK 0 位 1 至位 5 指操作 单元的地址 位 0 是读 写操作位 进行读操作时 该位为 1 进行写操作时 该位为 0 控制字节总是从最低位开始输入 输出 的 RAM RD 1 A4 A3 A2 A1 A0 CK WR 表 1 DS1302 的控制字格式 3 数据输入与输出 I O 在控制指令字输入后的下一个 SCLK 时钟的上升沿时 数据被写 入 DS1302 数据输入从低位即位 0 开始 同时 在紧跟 8 位的控制指 令字节后的下一个 SCLK 脉冲的下降沿读出 DS1302 的数据 读出数据 时从低位 0 位到高位 7 如下图 6 所示 图 6 DS1302 读 写时序图 4 DS1302 的寄存器 DS1302 有 12 个寄存器 其中 7 个寄存器与日历 时钟相关 存 放的数据位为 BCD 码形式 其日历 时间寄存器及控制字见下表 2 其中 CH 是时钟暂停标志位 当该位为 1 时 时钟振荡器停止 DS1302 处于低功耗状态 当该位为 0 时 时钟开始运行 WP 是写 保护位 在任何对时钟和 RAM 的写操作之前 WP 必须为 0 当 WP 为 1 时 写保护位防止对任一寄存器的写操作 表 2 DS1302 的日历 时间寄存器 此外 DS1302 还有年份寄存器 控制寄存器 充电寄存器 时钟 突发寄存器及与 RAM 相关的寄存器等 时钟突发寄存器可一次性顺序 读写除充电寄存器之外的所有寄存器内容 DS1302 与 RAM 相关的寄存 器分为两类 一类是单个 RAM 单元 共 31 个 每个单元组态为一个 8 位的字节 其命令控制字为 COH FDH 其中奇数为读操作 偶数为 写操作 另一类为突发方式下的 RAM 寄存器 此方式下可一次性读写 所有的 RAM 的 31 个字节 命令控制字为 FEH 写 FFH 读 4 4 系统的软件设计系统的软件设计 软件设计是本设计的关键 软件程序编写的好坏直接影响着系统 运行情况的良好 因本程序涉及的模块较多 所以程序编写也采用模 块化设计 C 语言具有编写灵活 移植方便 便于模块化设计的特点 所以本系统的软件采用 C51 编写 4 14 1 主程序流程框图主程序流程框图 开始 初始化 读 写日期 时间和温度 分离日期 时间 温度显示 显示子程序 日期 时间修改程序 返回 图 7 主程序流程图 4 24 2 阳历显示程序设计阳历显示程序设计 因为使用了时钟芯片 DS1302 阳历程序只需从 DS1302 各寄存器 中读出年 月 日 星期 时 分 秒等数据 再处理即可 在首次 对 DS1302 进行操作之前 必须对它进行初始化 然后从 DS1302 中读 出数据 再经过处理 送给显示缓冲单元 阳历显示流程图如下图 8 所示 开始 初始化DS1302 DS1302开始振荡 从DS1302中读出年 月 日 星期 时 分 秒 读出的数据都为BCD码 将其 高低位分离 送显示缓冲单元 图 8 阳历显示流程图 4 34 3 时间调整程序设计时间调整程序设计 调整时间使用 4 个调整按钮 1 个作为进入设置 移位 控制使 用 2 个作为加 减使用 还有 1 个作为退出设置使用 分别定义为 控制按钮 加按钮 减按钮 退出按纽 在调整时间过程中 要调整 的位与别的位应该有区别 所以增加了闪烁功能 即调整的位一直在 闪烁 直到调整下一位 闪烁原理就是 让要调整的一位每隔一定时 间熄灭一次 比如说 50ms 利用定时器计时 当达到 50ms 溢出时 就送给该位熄灭符 在下一次溢出时 再送正常显示的值 不断交替 直到调整该位结束 此时送正常显示值给该位 再进入下一位调整闪 烁程序 时间调整程序流程图如下图 9 所示 图 9 时间调整程序流程图 4 44 4 温度数据采集与显示程序设计温度数据采集与显示程序设计 此程序主要包括基本功能实现程序 读出温度子程序 温度转换 命令子程序 温度计算子程序 显示数据刷新子程序 4 4 14 4 1 基本功能实现程序基本功能实现程序 此段程序的主要功能是实现温度的实时显示 读出并处理 DS18B20 的测量温度值 温度测量每 1s 进行一次 程序流程图如下图 10 所示 初始化 调用显示子程序 1S 到 初次上电 读出温度值 温度计算处理 显示数据刷新 发温度转换开始命令 N Y Y N 图 10 基本功能实现流程图 图 11 读出温度子程序流程图 4 4 24 4 2 读出温度子程序读出温度子程序 此段程序的主要功能读出 RAM 中的 9 字节 在读出时需进行 CRC 校验 校验有错时不进行温度数据的改写 程序流程图如上图 11 所 示 4 4 34 4 3 温度转换命令子程序温度转换命令子程序 此段程序主要功能是发出温度转换开始命令 当采用 12 位分辨 率时 转换时间约为 750ms 在本程序设计中采用 1s 显示程序延时法 等待转换的完成 程序流程图如下图 12 所示 开始 温度零下 温度值取补码 置 标志 置 标志 结束 计算小数位 BCD 值 计算整数位 BCD 值 N Y 图 12 温度转换命令子程序流程图 图 13 温度计算子程序流程图 4 4 44 4 4 温度计算子程序温度计算子程序 此段程序主要功能是将 RAM 中的读取值进行 BCD 码的转换运算 并进行温度值正负的判定 程序流程图如上图 13 所示 4 4 54 4 5 显示数据刷新子程序显示数据刷新子程序 此段程序主要功能是对显示缓冲器中的显示数据进行刷新操作 当最高显示位为 0 时 将符号显示位移入下一位 程序流程图如 下图 14 所示 图 14 显示数据刷新子程序流程图 5 5 系统仿真与调试系统仿真与调试 5 15 1 系统仿真系统仿真 本设计使用的仿真软件为 PROTEUS 软件和 Keil C51 软件 PROTUES 软件是由英国 LabCenter Electronics 公司开发的 EDA 工具 软件 由 ISIS 和 ARES 两个软件构成 其中 ISIS 是一款便捷的电子 系统仿真平台软件 通过 PROTEUS ISIS 软件的 VSM 虚拟仿真技术 用户可以对模拟电路 数字电路 模数混合电路 以及基于微控制器 的系统连同所有外围接口电子元器件一起仿真 ARES 是一款高级的布 线编辑软件 它集成了高级原理布线图 混合模式 SPICE 电路仿真 PCB 设计以及自动布线来实现一个完整的电子设计 Keil C51 软件是 美国 Keil Software 公司出品的 51 系列兼容单片机 C 语言软件开发 系统 Keil 提供了包括 C 编译器 宏汇编 连接器 库管理和一个功 能强大的仿真调试器等在内的完整开发方案 通过一个集成开发环境 uVision 将这些部分组合在一起 首先 按设计方案在 ISIS 软件中连接好电路 如下图 15 所示 图 15 系统总体电路 然后 使用 Keil C51 软件对系统程序进行编译和查错 系统程 序见附录 2 经检查无误之后 对程序进行编译 连接 运行 生成 hex 文件 最后 在 ISIS 软件中将 hex 文件加载进单片机中 对系统总体 电路进行仿真调试 检查各按键是否有效 查看显示结果是否与实际 相符 如有不相符的结果 则再返回 Keil C51 软件中对程序进行改 进 直到显示结果正确无误 5 25 2 硬件制作与调试硬件制作与调试 5 2 15 2 1 硬件制作硬件制作 1 整理元器件 重点辩别认清电阻器阻值及相应代号 对电 阻 电容等要用万用表一一检测 2 按照系统仿真电路图对硬件电路进行安装焊接时 电阻器 采用卧式插装 并近贴电路板 瓷介电容器 电解电容器等采用立式 插装 也要近贴电路板 其余元件必须按正确的极性插装 否则电路 不会正常工作 3 焊完元器件后 在覆铜面剪掉多余元器件的引线 工具最好 用斜口钳 可防止因剪线而使覆铜皮损坏 4 焊接完后 再认真对照电路原理图 安装图检查电路板上 有无漏焊 错焊 短路 断路等错误现象 确认无误后才能通电 5 2 25 2 2 硬件调试硬件调试 硬件电路检查无误后 使用单片机开发板将系统程序下载到单片 机中 然后通电 观察硬件运行情况 在硬件调试运行过程中 发现以下问题并解决 1 烧入程序后 液晶显示器显示不稳定 亮度不够 解决办法 首先 对调用的延时子程序进行修改 可以解决显示 闪动问题 其次 由于本设计用动态扫描方式显示数字 动态扫描很 快 人的肉眼是无法看出 但是调用显示程序时 如果不在返回时屏 蔽掉最后的附值 则会出现很亮的现象 所以在显示程序的后面加了 屏蔽指令 最后解决了显示不稳定问题 亮度不够问题可以通过调节 滑动变阻器来解决 2 修改时间 日期时没有自动对应 解决办法 把不相关的程序暂时屏蔽 将设置时间子程序进行独 立调试 发现在调用设置时间自动更新时 对数据处理不好 所以会 造成错乱 最后把相应的处理程序进行修改 使得可以自动对应时间 日期 从而解决了此问题 至此 整个系统软件 硬件的编写 制作与调试结束 各项指标 和目的全部实现 本设计任务基本完成 6 6 结束语结束语 电子万年历是一种应用非常广泛的日常计时工具 而且将越来越 流行和实用 本设计是基于 51 系列的单片机进行的电子万年历设计 可以显示年 月 日 时 分 秒及星期信息 还具有温度显示和时 间校准等多种功能 本电路采用 AT89C52 单片机作为核心 功耗小 能在 3V 的低压工作 可选用 3 5V 电压供电 时钟芯片 DS1302 的使 用寿命长 误差小 LCD1602 液晶显示器效果清晰 而且亮度可调 温度传感器 DS18B20 精度较高 电路连接简单 按键电路只包含 4 个 按键 操作简单实用 此电子万年历的设计具有结构简单 使用便捷 显示精确 功能 齐全等优点 对于改善目前市场上电子钟表 日历等存在的一些不足 之处 比如 时钟不精确 产品成本太高 无环境温度显示等 具有 很重要的意义 因此 此种电子万年历的生产和发展是非常有必要的 它具有非常广阔的市场空间与发展前景 有着很大的现实意义 参考文献参考文献 1 童诗白 华成英主编 模拟电子技术基础 第四版 M 北京 高等 教育出版社 2009 7 2 阎石 数字电路技术基础 第五版 M 北京 高等教育出版社 2009 7 3 林立等编著 单片机原理及应用 基于 Proteus 和 Keil C M 北 京 电子工业出版社 2009 7 4 王化祥 张淑英编著 传感器原理及应用 第三版 M 天津 天津 大学出版社 2010 7 5 王港元 电工电子实践指导 M 南昌 江西科学技术出版社 2006 7 6 张斌武 单片机系统 Proteus 设计与仿真 M 北京 电子工业出版 社 2005 7 谢自美 电子线路设计 实验 测试 M 武汉 华中科技大学出版 社 2006 8 彭伟 单片机 C 语言程序设计实训 100 例 M 北京 电子工业出版 社 2009 9 杨子文 单片机原理及应用 M 西安 西安电子科技大学出版社 2006 10 苏平 单片机的原理与接口技术 M 北京 电子工业出版社 2006 致谢致谢 经过了几个月的设计制作与调试 终于顺利完成毕业设计的所有 要求 将电子万年历制作出来 在这段时间里 我学到了很多的专业 知识也充分感受到了指导老师和同学们的关心与帮助 正是因为有他 们的关心和帮助 本次设计才能顺利的完成 由于之前对其接触较少 对它的性能要求了解不多 还有对它的相关技术要求也不是很清楚 正是如此 我开始查看相关的资料和书籍 让自己头脑中模糊的概念 逐渐清晰 独立地设计与制作作品 认真地对各部分硬件模块进行调 试 使自己的作品一步步完善起来 每一次改进都是我学习的收获 这次毕业论文能够得以顺利完成 并非我一人之功劳 是所有指 导过我的老师和帮助过我的同学对我的教诲 帮助和鼓励的结果 我 要在这里对他们表示深深的谢意 在此我要特别感谢我的指导老师 杨汉祥老师 作为一个本科生 的毕业设计 从论文选题 实验研究到最后的成稿 由于经验的匮乏 难免有许多考虑不周全的地方 他都耐心地对我进行悉心指导 凝聚 了恩师许多心血 没有他的悉心指导就没有这篇论文的顺利完成 另外 对百忙之中评阅本论文的答辩委员会的各位老师致以最诚 挚的谢意 最后 再次对关心 帮助我的老师和同学表示衷心地感谢 附录附录 1 1 系统电路图系统电路图 附录附录 2 2 系统程序清单系统程序清单 include include include LCD1602 h include DS1302 h define uint unsigned int define uchar unsigned char sbit DS1302 CLK P1 7 P3 6 实时时钟时钟线引脚 sbit DS1302 IO P1 6 P3 4 实时时钟数据线引脚 sbit DS1302 RST P1 5 P3 5 实时时钟复位线引脚 sbit wireless 1 P3 0 sbit wireless 2 P3 1 sbit wireless 3 P3 2 sbit wireless 4 P3 3 sbit ACC0 ACC 0 sbit ACC7 ACC 7 char hide sec hide min hide hour hide day hide week hide month hide year 秒 分 时到日 月 年位闪的计数 sbit Set P2 0 模式切换键 sbit Up P2 1 加法按钮 sbit Down P2 2 减法按钮 sbit out P2 3 立刻跳出调整模式按钮 sbit DQ P1 0 P3 7 温度传送数据 IO 口 char done count temp flag up flag down flag uchar temp value 温度值 uchar TempBuffer 5 week value 2 void show time 液晶显示程序 1602 液晶显示部分子程序 Port Definitions sbit LcdRs P2 5 P2 6 sbit LcdRw P2 6 P2 5 sbit LcdEn P2 7 P2 7 sfr DBPort 0 x80 P0 0 x80 P1 0 x90 P2 0 xA0 P3 0 xB0 数据端口 内部等待函数 unsigned char LCD Wait void LcdRs 0 LcdRw 1 nop LcdEn 1 nop LcdEn 0 return DBPort 向 LCD 写入命令或数据 define LCD COMMAND0 Command define LCD DATA1 Data define LCD CLEAR SCREEN0 x01 清屏 define LCD HOMING 0 x02 光标返回原点 void LCD Write bit style unsigned char input LcdEn 0 LcdRs style LcdRw 0 nop DBPort input nop 注意顺序 LcdEn 1 nop 注意顺序 LcdEn 0 nop LCD Wait 设置显示模式 define LCD SHOW0 x04 显示开 define LCD HIDE0 x00 显示关 define LCD CURSOR0 x02 显示光标 define LCD NO CURSOR0 x00 无光标 define LCD FLASH0 x01 光标闪动 define LCD NO FLASH0 x00 光标不闪动 void LCD SetDisplay unsigned char DisplayMode LCD Write LCD COMMAND 0 x08 DisplayMode 设置输入模式 define LCD AC UP0 x02 define LCD AC DOWN0 x00 default define LCD MOVE0 x01 画面可平移 define LCD NO MOVE0 x00 default void LCD SetInput unsigned char InputMode LCD Write LCD COMMAND 0 x04 InputMode 初始化 LCD void LCD Initial LcdEn 0 LCD Write LCD COMMAND 0 x38 8 位数据端口 2 行显示 5 7 点阵 LCD Write LCD COMMAND 0 x38 LCD SetDisplay LCD SHOW LCD NO CURSOR 开启显示 无光标 LCD Write LCD COMMAND LCD CLEAR SCREEN 清屏 LCD SetInput LCD AC UP LCD NO MOVE AC 递增 画面不动 液晶字符输入的位置 void GotoXY unsigned char x unsigned char y if y 0 LCD Write LCD COMMAND 0 x80 x if y 1 LCD Write LCD COMMAND 0 x80 x 0 x40 将字符输出到液晶显示 void Print unsigned char str while str 0 LCD Write LCD DATA str str DS1302 时钟部分子程序 typedef struct SYSTEMTIME unsigned char Second unsigned char Minute unsigned char Hour unsigned char Week unsigned char Day 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 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 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 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 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 7 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 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 void Initial DS1302 void 时钟芯片初始化 unsigned char Second Read1302 DS1302 SECOND if Second 写入允许 Write1302 0 x8c 0 x09 以下写入初始化时间 日期 09 01 01 星期 4 时间 00 00 00 Write1302 0 x88 0 x01 Write1302 0 x86 0 x01 Write1302 0 x8a 0 x04 Write1302 0 x84 0 x00 Write1302 0 x82 0 x00 Write1302 0 x80 0 x00 Write1302 0 x8e 0 x80 禁止写入 ds18b20 子程序 ds18b20 延迟子函数 晶振 12MHz 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 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 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 In

温馨提示

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

评论

0/150

提交评论