基于单片机数字温度计.doc_第1页
基于单片机数字温度计.doc_第2页
基于单片机数字温度计.doc_第3页
基于单片机数字温度计.doc_第4页
基于单片机数字温度计.doc_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

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

文档简介

毕业设计论文 设计题目 基于单片机的数字温度计设计 专 业 应用电子技术 班 级 学 号 姓 名 指导教师 二 0 一 0 年七月十日 第I页 目 录 摘 要 1 第 1 章 绪论 2 第 2 章 系统方案论证与比较 3 2 1 方案比较 3 2 2 方案论证 4 第 3 章 硬件设计 6 3 1 主控芯片介绍 6 3 2 复位电路 8 3 3 时钟电路 9 3 4 矩阵电路 10 3 5 显示电路 11 3 6 测温电路 13 3 6 1 DS18B20 单线数字温度传感器 13 3 6 2 DS18B20 工作原理 13 3 6 3 DS18B20 的性能特点 14 3 6 4 DS18B20 内部结构 14 3 7 整机工作原理 16 第 4 章 软件设计 17 第 5 章 仿真与调试 29 5 1 仿真与调试 29 5 2 调试与运行 29 结 论 30 参考文献 31 附录 1 源程序 32 附录 2 元器件名细表 45 附录 3 仿真电路图 46 第1页 摘 要 温度的检测与控制是工业生产过程中比较典型的应用之一 随着传感器在生产 和生活中的更加广泛的应用 利用新型单总线式数字温度传感器实现对温度的测试与 控制得到更快的开发 在这里介绍了一种基于 DS18B20 和 AT89C52 单片机的温度测 量及控制系统的硬件结构以及 C 语言程序设计 该系统设计和布线简单 结构紧凑 体积小 重量轻 抗干扰能力强 性价比高 扩展方便 在大型仓库 工厂 智能化 建筑等领域的多点温度检测中有广阔的应用前景 关键词 DS18B20 AT89C52 温度测量 控制 第 2 页 第 1 章 绪论 随着人们生活水平的不断提高 单片机控制无疑是人们追求的目标之一 它所给 人带来的方便也是不可否定的 温度测控技术也在各个领域应用越来越广泛 同时温 度测量也被人们异常关注 一时间涌现出大量各式各样的测试温度仪器 这些仪器的 原理到底是怎样的呢 说到底也是所以温度测控的范畴 其中数字温度计就是一个典 型的例子 但人们对它的要求越来越高 要为现代人工作 科研 学习 生活提供更 好的更方便的设施就需要从数字单片机技术入手 一切想着数字化 智能化控制方向 发展 本设计所介绍的数字温度计与传统数字温度计相比 具有读数方便 测温范围广 测量准确 其输出采用数字显示 主要用于对测温比较准确的地方 或科研实验室使 用 测温传感器使用 DS18B20 用 LCD 实现温度显示 第 3 页 第 2 章 系统方案论证与比较 2 1 方案比较 方案一 采用热电偶温差电路测温 温度检测部分可以采用低温热偶 热电偶由两个焊接 在一起的异金属导线组成 热电偶的组成如图 2 1 热电偶产生的热电势由两种金属 的接触电势和单一导体的温差电势组成 通过将参考结点保持在已知温度并测量该电 压 便可以推测出检测结点的温度 数据采集部分则使用带有 A D 通道的单片机 在 将随被温度变化的电压或电流采集过来 进行 A D 转换后 就可以用单片机进行数据 处理了 在显示电路上就可以将北侧温度显示出来 热电偶的优点是工作温度宽 且 体积小 但是也存在输出电压小 容易遭受来自导线环路噪音的影响以及漂移较高的 缺点并且这种电路需要用到 A D 转换电路 感温电路比较麻烦 方案二 采用数字温度芯片 DS18B20 测量温度 输出信号全数字化 便于单片机处理和控 制 省去传统的测温方法的很多外围电路 且该芯片的物理化学性质稳定 它温用作 工业测温元件 此元件线性较好 在 0 100 摄氏度时 最大线性偏差小于 1 摄氏度 DS18B20 的最大特点之一是采用了单总数的数据传输 由数字温度计 DS18B20 和微控 制器 AT89C52 构成温度测量装置 它直接输出温度的数字信号 可直接和计算机连接 数码管 报警电路 复位电路 晶振电路 单 片 机 测温电路 按键防抖动 图 2 1 方案一框图 第 4 页 这样温度系统的结构就比较简单 体积也不大 采用 51 单片机控制软件编程的自由度 大 而且体积小 硬件实现简单 安装方便 该系统利用 AT89C51 芯片控制温度传感器 DS18B20 进行温度的实时检测并显示 能够实现快速测量环境温度 并可以根据需要设置上限报警温度 从以上两总方案 容易看出方案一的温测装置可测温度范围广 体积小 但是单 线性误差大 方案二的温测装置电路简单 精准度较高 实现方便 软件设计也比较简单 故 本次设计采用方案二 显示电路可以采用两种方案 第一种是通过单片机控制译码器将译码器输出的数 据送给数码管进行显示 但是要单独增加一个显示电路 使设计比较复杂 另一种是 直接运用 LCD 液晶显示 即直接通过单片对其进行显示以及数据处理较多 因此选择 第二种方案 2 2 方案论证 在日常生活及工农业生产中经常要检测温度 传统的方式是采用热电偶或热电阻 其硬件电路和软件调试比较复杂 制作成本较高 近年来随着科技的飞速发展 单片 机的应用正不断走向深入 所以我们选用单片机作为核心部件进行逻辑控制及信号的 产生 用单片机本生的优势节约成本 使电路更简单 根据题目的要求 本次设计采用由 AT89C51 单片机及 DS18B20 温度传感器组成 数据采集电路 加上显示电路和控制电路等 根据温度数据测量 通过控制电路对温度进行 控制 本系统具有快速显示 测量准确 精度高 可调温控范围 硬件结构简单等优 点 是一种比较经济的温度控制系统 主控电路 时钟电路 复位电路 显示电路 单 片 机 测温电路 电源电路 图 2 2 方案二框图 第 5 页 A D 转换器将温度传感器采集的温度模拟信号转化成数字信号 送入单片机的 I O 数据接口 然后通过单片机读回 I O 数据进行温度的判断 最后将数据送入显示译码 单元 显示时 译码电路是将单片机输出的 BCD 码送入译码器 通过其译码后送入 LCD 显示电路 第 6 页 第 3 章 硬件设计 3 1 主控芯片介绍 单片机 AT89C2051 具有低电压供电和体积小等特点 四个端口只需要两个口就能 满足电路系统的设计需要 很适合便携手持式产品的设计使用系统可用二节电池供电 AT89C51 是一个低电压 高性能 CMOS 8 位单片机 片内含 4k bytes 的可反复擦 写的 Flash 只读程序存储器和 128 bytes 的随机存取数据存储器 RAM 器件采用 ATMEL 公司的高密度 非易失性存储技术生产 兼容标准 MCS 51 指令系统 片内置 通用 8 位中央处理器和 Flash 存储单元 内置功能强大的微型计算机的 AT89C51 提供 了高性价比的解决方案 AT89C51 是一个低功耗高性能单片机 40 个引脚 32 个外部双向输入 输出 I O 端口 同时内含 2 个外中断口 2 个 16 位可编程定时计数器 2 个全双工串行通 信口 AT89C51 可以按照常规方法进行编程 也可以在线编程 其将通用的微处理器 和 Flash 存储器结合在一起 特别是可反复擦写的 Flash 存储器可有效地降低开发成本 3 1AT89C51 主要功能特性 图 3 1 AT89C51 单片机的管脚图 第 7 页 表 3 1AT89C51 单片机的管脚功能 VCC 供电电压 GND 接地 P0 口 P0 口为一个 8 位漏级开路双向 I O 口 每脚可吸收 8TTL 门电流 当 P1 口的 管脚第一次写 1 时 被定义为高阻输入 P0 能够用于外部程序数据存储器 它可以被 定义为数据 地址的第八位 在 FIASH 编程时 P0 口作为原码输入口 当 FIASH 进行 校验时 P0 输出原码 此时 P0 外部必须被拉高 P1 口 P1 口是一个内部提供上拉电阻的 8 位双向 I O 口 P1 口缓冲器能接收输出 4TTL 门电流 P1 口管脚写入 1 后 被内部上拉为高 可用作输入 P1 口被外部下拉 为低电平时 将输出电流 这是由于内部上拉的缘故 在 FLASH 编程和校验时 P1 口作为第八位地址接收 P2 口 P2 口为一个内部上拉电阻的 8 位双向 I O 口 P2 口缓冲器可接收 输出 4 个 TTL 门电流 当 P2 口被写 1 时 其管脚被内部上拉电阻拉高 且作为输入 并因此 作为输入时 P2 口的管脚被外部拉低 将输出电流 这是由于内部上拉的缘故 P2 口 当用于外部程序存储器或 16 位地址外部数据存储器进行存取时 P2 口输出地址的高 八位 在给出地址 1 时 它利用内部上拉优势 当对外部八位地址数据存储器进行读 写时 P2 口输出其特殊功能寄存器的内容 P2 口在 FLASH 编程和校验时接收高八位 地址信号和控制信号 P3 口 P3 口是 8 个带内部上拉电阻的双向 I O 口 可接收输出 4 个 TTL 门电流 当 P3 口写入 1 后 它们被内部上拉为高电平 并用作输入 作为输入 由于外部下拉为 低电平 P3 口将输出电流 ILL 这是由于上拉的缘故 P3 口也可作为 AT89C51 的一些特殊功能口 如下所示 兼容 MCS 51 指令系统4k 可反复擦写 1000 次 Flash ROM 32 个双向 I O 口可编程 UARL 通道 两个 16 位可编程定时 计数器全静态操作 0 24MHz 1 个串行中断128x8bit 内部 RAM 两个外部中断源共 6 个中断源 可直接驱动 LED3 级加密位 低功耗空闲和掉电模式软件设置睡眠和唤醒功能 第 8 页 P3 口管脚 备选功能 P3 0 RXD 串行输入口 P3 1 TXD 串行输出口 P3 2 INT0 外部中断 0 P3 3 INT1 外部中断 1 P3 4 T0 计时器 0 外部输入 P3 5 T1 计时器 1 外部输入 P3 6 WR 外部数据存储器写选通 P3 7 RD 外部数据存储器读选通 P3 口同时为闪烁编程和编程校验接收一些控制信号 RST 复位输入 当振荡器复位器件时 要保持 RST 脚两个机器周期的高电平时间 ALE PROG 当访问外部存储器时 地址锁存允许的输出电平用于锁存地址的地位字 节 在 FLASH 编程期间 此引脚用于输入编程脉冲 在平时 ALE 端以不变的频率 周期输出正脉冲信号 此频率为振荡器频率的 1 6 因此它可用作对外部输出的脉冲或 用于定时目的 然而要注意的是 每当用作外部数据存储器时 将跳过一个 ALE 脉冲 如想禁止 ALE 的输出可在 SFR8EH 地址上置 0 此时 ALE 只有在执行 MOVX MOVC 指令是 ALE 才起作用 另外 该引脚被略微拉高 如果微处理器在外 部执行状态 ALE 禁止 置位无效 PSEN 外部程序存储器的选通信号 在由外部程序存储器取指期间 每个机器周期两 次 PSEN 有效 但在访问外部数据存储器时 这两次有效的 PSEN 信号将不出现 EA VPP 当 EA 保持低电平时 则在此期间外部程序存储器 0000H FFFFH 不管 是否有内部程序存储器 注意加密方式 1 时 EA 将内部锁定为 RESET 当 EA 端保 持高电平时 此间内部程序存储器 在 FLASH 编程期间 此引脚也用于施加 12V 编 程电源 VPP XTAL1 反向振荡放大器的输入及内部时钟工作电路的输入 XTAL2 来自反向振荡器的输出 3 2 复位电路 为确保两点间温度控制系统中电路稳定可靠工作 复位电路是必不可少的一部分 复位电路的第一功能是上电复位 一般电路正常工作需要供电电源为 5V 5 即 第 9 页 4 75 5 25V 复位是单片机的初始化操作 其目的是使 CPU 及各专用寄存器处于一个确定的初 始状态 如 把 PC 的内容初始化为 0000H 使单片机从 0000H 单元开始执行程序 除了进入系统的正常初始化之外 当单片机系统在运行出错或操作错误使系统处于死 锁状态时 为摆脱困境 也需要复位以使其恢复正常工作状态 RST 端的外部复位电路有两种操作方式 上电自动复位和按键手动复位 按键手 动复位有电平方式和脉冲方式两种 本系统设计采用上电复位 如图 2 3 所示 上电 复位是直接将 RST 端通过电阻接高电平来实现单片机的复位 3 3 时钟电路 单片机的时钟信号用来提供单片机内各种微操作的时间基准 时钟电路用于产生 单片机工作所需要的时钟信号 单片机的时钟信号用来提供单片机片内各种微操作的时间基准 时钟信号通常用 两种电路形式得到 内部振荡和外部振荡 本系统设计采用内部振荡方式 如图 2 4 所 示 MCS 51 单片机内部有一个用于构成振荡器的高增益反向放大器 引脚 XTALl 和 XTAL2 分别是此放大电器的输入端和输出端 由于采用内部方式时 电路简单 所得 的时钟信号比较稳定 实际使用中常采用这种方式 VCC C3 R110K GND RST 图 3 2 复位电路 图 3 3 时钟电路 第 10 页 3 4 矩阵电路 按照键盘与单片机的连接方式可分为独立式键盘与矩阵式键盘 矩阵式键盘是一 种常见的输入装置 在日常生活中 矩阵式键盘在计数机 电话 手机 微波炉等各 式电子产品上已经被广泛应用 在键盘中按键较多时 为了减少 I O口的占用 通常将 按键排列成矩阵形式 在矩阵式键盘中 每条水平线和垂直线在交叉处不直接连接 而是通过一个按键加以连接 这样 一个端口就可以构成 4x4 16 个按键 比之直接将 端口线用于键盘多出了一倍 而且线数越多 区别越明显 比如再多加一条线就可以 构成 20 的键盘 而直接用端口线则只能多出一键 所以本次设计采用的是矩阵式键盘 确定矩阵式键盘上的何键被按下可以采用行扫描法 判断键盘中有无键按下 将全部行线置低电平 然后检测列线的状态 只要有一列的电平为低 则表示键 盘中有键被按下 而且闭合的键位低于电平线与 4 根行线相交叉的 4 个按键之中 若 所有列线均为高电平 则按键中无键按下 判断闭合键所在位置 在确认有键按下后 即可进入确定具体闭合键的过程 其方法是 依次将行线置 为低电平 即在置某根行线为低电平时 其它线为高电平 在确定某根行线位置为低 电平后 在逐行检测各列线的电平状态 若某列为低 则该列线与置为低电平的行线 交叉处的按键就是闭合的按键 图 3 4 矩阵键盘 第 11 页 3 5 显示电路 在单片机应用系统中 对于系统的运行状态和运行结果 通常都需要直观交互显 示出来 单片机应用系统中最常用的显示器有 LED 和 LCD 两种 这两种显示器都可 以显示数字 字符及系统的状态 LED 和 LED 数码显示最为普遍 本设计采用的是更 为环保的 LCD 显示器 字符型液晶显示模块是一种专门用于显示字母 数字 字符等点阵式 LCD 目前 常用的有 16x1 16x2 20 x2 40 x2 行等模块 点阵字符型 LCD 的接口特性 点阵字符型 LCD 是专门用于显示数字 字母 图形符号及少量自定义字号的液晶 显示器 这类显示器把 LCD 控制器 点阵驱动器 字符存储器 显示体及少量的组容 元件等集成一个液晶显示模块 鉴于字符型液晶显示模块目前在国际上已经规范化 其电特性及接口特性是统一的 因此 只要设计出一种字号的接口电路 在指令上稍 加修改即可使用各种规格的字符型液晶显示模块 字符型液晶显示模块的控制器大多 数为日立公司生产的 HD44780 及其兼容的控制器 点阵型液晶显示模块的基本特点 1 液晶显示屏是以若干 5x8 或 5x11 点阵块组成的显示字符群 每个点阵块为一 个字符位 字符间距和行距都为一个点的宽度 2 主控电路电路为 HD44780 及其他公司的全兼容电路 因此从程序员的角度来 说 LCD 的显示接口与编程是面向 HD44780 的 只要了解 HD44780 的编程结构即可 进行 LCD 的显示编程 3 内部具有字符发生器 ROM 可显示 192 种字符 4 具有 64 字节的自定义字符 RAM 可以定义 8 个 5x8 点阵字符或 4 个 5x11 点 阵字符 5 具有 64 字节的数据显示 RAM 共进行显示编程时使用 6 标准接口 与 M68HC08 系列 MCU 容易接口 7 模块结构紧凑 轻巧 装备容易 8 单 5V 电源供电 9 低功耗 高可靠性 10 HD44780 的引脚与时序 第 12 页 11 HD44780 的外部接口信号一般有 16 条 与 MCU 的接口有 8 条数据线 DB0 DB7 和 3 条控制线 RS RW E HD44780 的引脚功能如表 3 2 所示 表 3 2 HD47780 的引脚功能表 引脚符号状态功能 1Vss电源地 2VDD电源正 接 5V 3VL液晶显示偏压 4RS输入 寄存器选择 为 1 时选择数据寄存器 为 0 时选择指令寄存 器 5RW输入R W 为读写选择线 为 1 时进行读操作 为 0 时进行写操作 6E输入使能信号 7DB0三态数据总线 LSB 8DB1三态数据总线 9DB2三态数据总线 10DB3三态数据总线 11DB4三态数据总线 12DB5三态数据总线 13DB6三态数据总线 14DB7三态数据总线 15A背光源正极 16K背光源负极 控制器 HD44780 的信号功能控制如表 3 3 3 3 控制器 HD44780 的信号功能 RSR WE功能 00下降沿写指令代码 01高电平读忙标志和 AC 值 第 13 页 10下降沿写数据 11高电平读数据 图 3 5 LCD 显示电路 3 6 测温电路 3 6 1 DS18B20 单线数字温度传感器 由 DALLAS 半导体公司生产的 DS18B20 型单线智能温度传感器 属于新一代适 配微处理器的智能温度传感器 可广泛用于工业 民用 军事等领域的温度测量及控 制仪器 测控系统和大型设备中 它具有体积小 接口方便 传输距离远等特点 产品的主要技术指标 1 测量范围 55 125 2 测量精度 0 5 3 反应时间 500ms 3 6 2 DS18B20 工作原理 温度传感器 DS18B20 将被测环境温度转化成带符号的数字信号 以十六位补码形 式 占两个字节 在通过单片机发出命令送给显示器 它的输出脚 I O 直接与单片机 相连 并接一个上拉电阻 传感器采用外部电源供电 传感器控制程序是按照 DS18B20 的通信协议编制 系统的工作是在程序控制下 完成对传感器的读写和对温 第 14 页 度的显示 3 6 3 DS18B20 的性能特点 1 采用单总线专用技术 既可通过串行口线 也可通过其它 I O 口线与微机接口 无 须经过其它变换电路 直接输出被测温度值 9 位二进制数 含符号位 2 测温范围为 55 125 测量分辨率为 0 0625 3 内含 64 位经过激光修正的只读存储器 ROM 4 适配各种单片机或系统机 5 用户可分别设定各路温度的上 下限 6 内含寄生电源 3 6 4 DS18B20 内部结构 DS18B20 内部结构主要由四部分组成 64 位光刻 ROM 温度传感器 非挥发的 温度报警触发器 TH 和 TL 高速暂存器 DS18B20 的管脚排列如图 3 5 所示 64 位 光刻 ROM 是出厂前被光刻好的 它可以看作是该 DS18B20 的地址序列号 不同的器 件地址序列号不同 图 3 6 DS18B20 引脚分布图 表 3 4 DS18B20 引脚功能 序号寄存器名称作 用序 号寄存器名称 0温度低字节以 16 位补码形式存放4 5保留字节 1 2 1温度高字节以 16 位补码形式存放6计数器余值 第 15 页 2TH 用户字节 1存放温度上限7计数器 3HL 用户字节 2存放温度下限8CRC 表 3 5 DS18B20 信号功能 以 12 位转化为例说明温度高低字节存放形式及计算 12 位转化后得到的 12 位数 据 存储在 DS18B20 的两个高低两个 8 位的 RAM 中 二进制中的前面 5 位是符号位 如果测得的温度大于 0 这 5 位为 0 只要将测到的数值乘于 0 0625 即可得到实际温度 如果温度小于 0 这 5 位为 1 测到的数值需要取反加 1 再乘于 0 0625 才能得到实际温 度 3 6 5 DS18B20 控制方法 在硬件上 DS18B20 与单片机的连接有两种方法 一种是 VCC 接外部电源 GND 接地 I O 与单片机的 I O 线相连 另一种是用寄生电源供电 此时 UDD GND 接地 I O 接单片机 I O 无论是内部寄生电源还是外部供电 I O 口线要接 5K 左右 的上拉电阻 此次设计选择的是前面一种控制 表 3 2 DS18B20 有六条控制命令 CPU 对 DS18B20 的访问流程是 先对 DS18B20 初始化 再进行 ROM 操作命令 最后才能对存储器操作 数据操作 DS18B20 每一步操作都要遵循严格的工作时序和 通信协议 如主机控制 DS18B20 完成温度转换这一过程 根据 DS18B20 的通讯协议 须经三个步骤 每一次读写之前都要对 DS18B20 进行复位 复位成功后发送一条 ROM 指令 最后发送 RAM 指令 这样才能对 DS18B20 进行预定的操做 指 令约定代码操 作 说 明 温度转换44H启动 DS18B20 进行温度转换 读暂存器BEH读暂存器 9 个字节内容 写暂存器4EH将数据写入暂存器的 TH TL 字节 复制暂存器48H把暂存器的 TH TL 字节写到 E2RAM 中 重新调 E2RAMB8H 把 E2RAM 中的 TH TL 字节 写到暂存器 TH TL 字节 读电源供电方式B4H启动 DS18B20 发送电源供电方式的信号给主 CPU 第 16 页 图 3 7 测温电路 3 7 整机工作原理 当接通电源以后 温度传感器正常工作 温度传感器将根据被测温度的不同来采 集不同的数据 然后将所采集到的数据传送到比较器到中 然后由比较器将采集到的 数据转变成高低电平 在送入单片机 单片机通过控制各个引脚电平的高低来来控制 温度的显示输出 当温度显示 TH 为 110 C TL 为 20 C 通过矩阵键盘电路可以调 节 TH 和 TL 的初始值 并且还可以调节当前的显示的温度值 按一次键盘 TH 和 TL 的值自加一或自减一 当减到低于 20 C 或高于 110 时 将自动返回初始值 整机电路 图如图 3 8 所示 p3 7 P3 7 5V P3 7 GND p1 0 p1 1 p1 2 p1 3 p1 4 p1 5 p1 6 p1 7 p1 2 p1 3 p1 1 p1 0 p1 4 p1 5 p1 6 p1 7 XTAL2 18 XTAL1 19 ALE 30 EA 31 PSEN 29 RST 9 P0 0 AD0 39 P0 1 AD1 38 P0 2 AD2 37 P0 3 AD3 36 P0 4 AD4 35 P0 5 AD5 34 P0 6 AD6 33 P0 7 AD7 32 P1 0 T2 1 P1 1 T2EX 2 P1 2 3 P1 3 4 P1 4 5 P1 5 6 P1 6 7 P1 7 8 P3 0 RXD 10 P3 1 TXD 11 P3 2 INT0 12 P3 3 INT1 13 P3 4 T0 14 P3 7 RD 17 P3 6 WR 16 P3 5 T1 15 P2 7 A15 28 P2 0 A8 21 P2 1 A9 22 P2 2 A10 23 P2 3 A11 24 P2 4 A12 25 P2 5 A13 26 P2 6 A14 27 U1 AT89C52 5V 2 3 4 5 6 7 8 9 1 RP1 10K 5V D7 14 D6 13 D5 12 D4 11 D3 10 D2 9 D1 8 D0 7 E 6 RW 5 RS 4 VSS 1 VDD 2 VEE 3 LCD1 LM016L DQ 2 VCC 3 GND 1 U3 DS18B20 5V R2 4 7k C1 30p C2 30p X1 CRYSTAL C3 10uF R1 10k GND VCC R2 4 7K P3 7 VCC DQ GND 5V P3 7 GND 图 3 8 整机电路图 第 17 页 第 4 章 软件设计 整个系统的功能是由硬件电路配合软件来实现的 当硬件基本定型的时候软件也 基本定下拉了 从软件的功能不同 可以分为两的类 一是主程序 它是整个软件的 核心 专门用来协调各个执行模块和操作者的联系 二是子程序 它是用来完成各种 实质性的工作的 如测量 计算 显示 通讯等 每一个执行软件就是一个小的执行 模块 这里将每一个模块一一列出来 并为每个执行模块进行功能定义和接口定义 各执行模块规划好以后 就可以规划监控软件了 首先要根据系统的总体功能选择一 种最合适的主程序结构 然后根据实时性的条件 合理安排监控软件和执行软件之间 的调度关系 4 1 主程序模块 主程序主要完成硬件初始化 子程序调用等功能 图 4 1 主程序流程图 开始 设置定时 计数器初值 从 DS18B20 中读取数据 等待 数据拆字 显示温度 第 18 页 主程序函数如下 Void main setds18b20 TH TL RS 设置上下限报警温度和分辨率 delay 100 while 1 pt ReadTemperature temper LCD user temper LCD user temper alarm LCD TH TL LCD Initial LCD Print 0 0 TempBuffer0 LCD Print 0 1 TempBuffer1 scan full 看有无键按下 if key ok 如有键按下则看到底哪个键按下 key value key scan 调用键盘扫描程序 key command key value 键盘命令处理函数 第 19 页 图 4 2 DS18B20 初始化流程图 DS18B20 初始化函数 void Init DS18B20 void unsigned char x 0 DQ 0 单片机将 DQ 拉低 delay 18B20 80 精确延时 大于 480us DQ 1 拉高总线 delay 18B20 14 x DQ delay 18B20 20 等待 50us 读入 DQ 的状态 等待 200us DQ 置 1 初始化结束 DS18B20 初始化 DQ 置 1 D0 清零 发复位脉冲 延时 600us DQ 置 1 第 20 页 ds18b20 读一个字节 unsigned char ReadOneChar void unsigned char i 0 unsigned char dat 0 for i 8 i 0 i DQ 0 给脉冲信号 dat 1 DQ 1 给脉冲信号 if DQ dat 0 x80 delay 18B20 4 return dat 温度测量的结果以二进补码形式来存放 分辨力 12 位的测量结果用带 5 个符号 的 16 位二进制格式来表示 高低 8 位分别存储在两个 RAM 单元中 前面 5 位 S 代 表符号位 DS18B20 函数的作用就是完成这一过程的 第 21 页 N 图 4 3DS18B20 写字节流程图 DS18B20 写函数 void setds18b20 unsigned char TH unsigned char TL unsigned char RS Init DS18B20 WriteOneChar 0 xCC 跳过读序号列号的操作 WriteOneChar 0 x4E WriteOneChar TH 写入想设定的温度报警上限 WriteOneChar TL 写入想设定的温度报警下限 WriteOneChar RS 8 位数据送完否 DS18B20 写入结束 延时 15us DQ 置 1 设置为恢复状态 写入一位数据 延时 15us DQ 清零 将 DQ 总线电平拉低 设置串行位数为 8 DS18B20 写开始 第 22 页 LCD 上电时 都必须按照一定的时序对 LCD 进行初始化操作 主要任务是设置 LCD 的工作方式 显示状态 清屏 输入方式 光标位置等 图 4 3LCD 初始化流程图 功能设置命令 调用写入指令到 LCD 子程 序 开始 子程序返回 调用写入指令到 LCD 子程 调用写入指令到 LCD 子程 设置显示状态 清屏 设定工作方式 调用写入指令到 LCD 子程 设置输入方式 LCD 初始化程序 void LCD Initial LcdEn 0 LCD Write LCD COMMAND 0 x38 8 位数据端 口 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 void LCD Print unsigned char x unsigned char y unsigned char str GotoXY x y Print str 第 23 页 要想把显示字符显示在某一指定位置 就必须先将显示数据写在相应的 DDRAM 地址中 写数据操作函数就是完成这一过程的函数 图 4 4LCD 写数据流程图 void LCD Wait void LcdRs 0 RS 0 表示选择指令寄存器 LcdRw 1 nop RW 1 表示进行读操作 LcdEn 1 nop 在 EN 为下降沿的时候锁存据 while DBPort nop nop LcdEn 1 nop nop 开始 当 RS 1 时 选择数据寄存器 把显示数据送至 P0 口 读 写标志位 R W 0 时 进行写操作 LCD 使能信号 E 至高电平后再过两个时钟周期至低电平 产生一个下降沿信号 使 LCD 写入显示数据 第 24 页 LcdEn 0 LCD 要能读写数据 必须对 LCD 进行读写操作 读操作时 先设置 RS 和 R W 状态 在设置 E 信号为高 这时从数据口读取数据 写操作时 使能 E 信号下降沿有 效 图 4 5LCD 读写操作流程图 LCD 写指令函数 define LCD COMMAND define LCD DATA define LCD CLEAR SCREEN 清屏 define LCD HOMING 光标返回原点 void LCD Write bit style unsigned char input LcdEn 0 LcdRs style LcdRw 0 nop 读 写标志位 R W 0 时 进行写操作 当 RS 0 时 选择指令寄存器 开始 子程序返回 调用延时子程序 LCD 使能信号 E 至高电平后再过两个时钟周期至低电平 产生 一个下降沿信号 往 LCD 写入指令代码 LCD 执行命令 把指令数据送至 P0 口 第 25 页 DBPort input nop LcdEn 1 nop LcdEn 0 nop LCD Wait 设置显示模式 define LCD SHOW 显示开 define LCD HIDE 显示关 define LCD CURSOR 显示光标 define LCD NO CURSOR 无光标 define LCD FLASH 光标闪动 define LCD NO FLASH 光标不闪动 void LCD SetDisplay unsigned char DisplayMode LCD Write LCD COMMAND 0 x08 DisplayMode define LCD AC UP define LCD AC DOWN define LCD MOVE 画面可平移 define LCD NO MOVE void LCD SetInput unsigned char InputMode LCD Write LCD COMMAND 0 x04 InputMode 第 26 页 最常见的矩阵式键盘按键识别方法是编程扫描 这里采用的是列扫描方法 NO YES NO YES 图 4 5 矩阵键盘流程图 键盘扫描函数 sfr key port 0 x90 定义 P1 口为键盘扫描口 P0 0 x80 P1 0 x90 P2 0 xA0 P3 0 xB0 数据端口 bit key ok 0 有键按下的标志 延时子程序 按键是否按下 执行语句 按键是否按下 延时 返回 开始 第 27 页 调用一次用时 18 微秒 t 每加 1 用时增加 6 微秒 void delay unsigned char t while t unsigned char r left unsigned char x x 1 x return x 粗判有无键按下 有键按下则将 key ok 置 1 void scan full void unsigned char temp key port 0 xf0 temp P1 if temp 0 xf0 key ok 1 else key ok 0 键盘扫描程序 功能 返回键值 当无键按下时 返回 0 unsigned char key scan void unsigned char temp count 0 x01 key value unsigned char x scan 0 xfe y scan 0 xef unsigned char i j y while 1 第 28 页 scan full 粗判是否有键按下 if key ok 1 key ok 0 delay 200 延时去抖动 scan full 再次粗判是否有键按下 if key ok 1 for i 0 i 4 i key port x scan for j 0 j 4 j temp key port temp temp y y scan if temp y while key ok 0 等待按键松开 scan full key value count return key value else count y scan r left y scan 第 29 页 y scan 0 xef x scan r left x scan return key value 第 30 页 第 5 章 仿真与调试 5 1 仿真与调试 此设计的电路在 Proteus 软件中进行仿真 运行 Proteus 的 ISIS 程序后 进入该 仿真软件的主界面 主界面由菜单栏 工具栏 预览窗口 元件选择按钮 元件列表 窗口 原理图绘制窗口和仿真进程控制按钮组成 如图 7 2 所示 通过元件选择按钮 P 从库中选择元件命令 命令 在弹出的 Pick Devices 窗口中选择电路所需的元件 放置元件并调整其相对位置 对元件参数设置及元器件间连线 完成单片机系统的硬 件原理图绘制 仿真电路图见附录 3 5 2 调试与运行 1 首先启动 KEIL C51 软件的集成开发环境 从桌面上双击 uVision 图标以启动软 件 2 建立工程文件 通常单片机应用系统软件包含多个源程序文件 KEIL C51 使用 工程这一概念 将这些参数设置和所需的所有文件都加在一个工程中 因此 需要建 立一个工程文件 并为这个工程选择 CPU 确定编译 汇编 连接的参数 指定调试 的方式 3 建立并添加源文件 使用菜单或者单击工具栏的新建文件按钮 出现文本便捷窗 口 在该窗口中输入新编制的源程序并保存该文件 然后 我打开已经画好的仿真图 再将生成的 HEX 文件导入单片机里 点击开始 按钮 电路正常工作 并且能够实现预先设想的所有功能 而且效果很好 从而验证 了我的程序的正确性 第 31 页 结 论 在我的毕业设计中 主要是以 AT89C51 单片机为核心的 对温度的检测与显示进 行了简单的设计与阐述 本次设计可以说是软硬结合 又以硬件为主 当今科技发展 迅速 单片机嵌入式开发有着光明的前景 由于单片机经济实用 开发简便等特点依 然在工业控制 家电等领域占据了广泛的市场 所以我选择这样的毕业设计课题 并 且能通过此次设计来提高自己软件编制和硬件电路设计的能力 在我完成这次毕业设 计的过程中 当看到自己将专业知识用于解决实际的问题时 那份成就感和喜悦感是 难以形容的 但是 在实际的编程以及调试程序过程中 我发现自己应该学的太多太 多 光靠自己在书本上所学过的这点知识是远远不够的 真正地认识到了工作就是学 习的道理 由于我以前对 51 单片机的 C 语言没有认真钻研过 所以感觉毕业设计的任务十分 紧迫 通过对本系统的设计 我学习到了硬件开发和软件开发的基本流程并有了一定 的驾御此开发过程的能力 编程的过程中 虽然不乏辛苦 但更多的是程序调试成功 后的喜悦 总之 这次毕业设计对我来说是一次比较全面的 富有创造性和探索性的锻炼 完成了我选题时的心愿 令我深有感触 对于我今后的学习 工作和生活都将是受益 非浅的 第 32 页 参考文献 1 王静霞 单片机应用技术 电子工业出版社 2009 2 何立民 单片机高等教程 北京航空航天大学出版社 2000 3 雄建云 Protel99 se EDA 技术及应用 北京机械工业出版社 2007 4 华永平 陈松编著 电子线路课程设计 东南大学出版社 5 林春方 电子线路学习指导与实训 北京电子工业出版社 2004 6 杨宝清 宋文贵主编 实用电路手册 机械工业出版社 2002 7 张存礼 韩爱娟主编 电子技术综合实训 北京师范大学出版社 第 33 页 附录 1 源程序 include 用 AT89C51 时就用这个头文件 include 用华邦 W78E58B 时必须用这个头文件 sbit DQ P3 7 定义 DQ 引脚为 P3 7 ds18b20 延迟子函数 晶振 12MHz DS18B20 对时间要求很严 但只能长不能短 在 11 0592M 下也行 因为时间长些 void delay 18B20 unsigned int i while i ds18b20 初始化函数 void Init DS18B20 void unsigned char x 0 DQ 0 单片机将 DQ 拉低 delay 18B20 80 精确延时 大于 480us DQ 1 拉高总线 delay 18B20 14 x DQ delay 18B20 20 ds18b20 读一个字节 unsigned char ReadOneChar void unsigned char i 0 第 34 页 unsigned char 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 unsigned char dat unsigned char i 0 for i 8 i 0 i DQ 0 DQ dat delay 18B20 5 DQ 1 dat 1 设置 DS18B20 工作状态 TH 和 TL 分别是上限报警和下限报警温度 RS 是显示分辨率的设置 void setds18b20 unsigned char TH unsigned char TL unsigned char RS Init DS18B20 第 35 页 WriteOneChar 0 xCC 跳过读序号列号的操作 WriteOneChar 0 x4E WriteOneChar TH 写入想设定的温度报警上限 WriteOneChar TL 写入想设定的温度报警下限 WriteOneChar RS 写配置寄存器 格式为 0 R1 R0 1 1 1 1 1 R1R0 00 分辨率娄 9 位 R1R0 11 分辨率为 12 位 读取 ds18b20 当前温度 unsigned char ReadTemperature void unsigned char tt 2 Init DS18B20 WriteOneChar 0 xCC 跳过读序号列号的操作 WriteOneChar 0 x44 启动温度转换 delay 18B20 70 温度转化要一段时间 Init DS18B20 WriteOneChar 0 xCC 跳过读序号列号的操作 WriteOneChar 0 xBE 读取温度寄存器等 共可读 9 个寄存器 前两个就是温 度 delay 18B20 70 tt 0 ReadOneChar 读取温度值低位 tt 1 ReadOneChar 读取温度值高位 return tt include 用 AT89C51 时就用这个头文件 include 用华邦 W78E58B 时必须用这个头文件 include include include 第 36 页 include include include 测温头文件 include 液晶显示头文件 include 键盘扫描头文件 sbit alarm P2 6 报警信号 sbit DQ P3 7 定义 DQ 引脚为 P3 7 unsigned char key value 存放键盘扫描值 bit up one down one 加 1 和减 1 标志 bit alarm up flag alarm down flag 上限报警和下限报警设置标志 bit set temper flag 设置控制标志温度标志 bit alarm switch 报警开关 unsigned char user temper 用户标定温度 unsigned char TH 110 TL 20 RS 0 x3f 上限温度 110 下限 20 分辨率 10 位 也就是 0 25C unsigned char t 2 pt 用来存放温度值 测温程序就是通过这个数组与主 函数通信的 unsigned char TempBuffer1 17 0 x2b 0 x20 0 x30 0 x30 0 x2e 0 x30 0 x30 0 x20 0 x53 0 x45 0 x54 0 x2b 0 x20 0 x30 0 x30 0 x43 0 显示实时温度 上电时显示 00 00 SET 00C unsigned char TempBuffer0 17 0 x54 0 x48 0 x3a 0 x2b 0 x20 0 x30 0 x30 0 x20 0 x54 0 x4c 0 x3a 0 x2b 0 x20 0 x30 0 x30 0 x43 0 显示温度上下限 上电时显示 TH 00 TL 00C unsigned char code dotcode 4 0 25 5

温馨提示

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

评论

0/150

提交评论