基于单片机的数字温度计设计 毕业设计.doc_第1页
基于单片机的数字温度计设计 毕业设计.doc_第2页
基于单片机的数字温度计设计 毕业设计.doc_第3页
基于单片机的数字温度计设计 毕业设计.doc_第4页
基于单片机的数字温度计设计 毕业设计.doc_第5页
免费预览已结束,剩余44页可下载查看

下载本文档

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

文档简介

信息职业技术学院 毕业设计论文 设计题目: 基于单片机的数字温度计设计 专 业: 应用电子技术 班 级: 应电 08-3 学 号: 姓 名: 指导教师: 二 0 一 0 年七月十日 信息职业技术学院毕业设计(论文)任务书 学 生 姓 名 学 号 1 班级 应电 08-3 班 专业 应用电子技术 设计(或论文)题目 基于单片机的数字温度计的设计 指导教师姓名 职 称 工作单位及所从事专业 联系方式 备 注 讲师/工 程师 设计(论文)内容: 运用电子技术知识、技能设计一个温度度计 功能要求如下: 1. 采用 ds18b20 温度传感器实现温度的采集工作,并用 16 位 lcd 显示温度。 2. 具有采集温度,显示当前温度的功能。 3. 温度采集的范围在-20110 摄氏度。 要求完成:选择各单元电路结构并阐述工作原理,绘制整机电路原理图(a4 图纸) ,写出 c 语言源程序;准确计算或估算电路参数,正确选择电路元件与设备,给出元件、设备明 细表;撰写设计说明书,要求准确阐述电路选择依据,反映计算方法、元件、设备选择等 设计过程,并使用软件进行仿真或制作实物。 进度安排: 5 月 45 月 11 日:查找资料,选择参考方案 5 月 115 月 18 日:确定方案 5 月 185 月 25 日:查找资料,进行单元电路的设计 5 月 255 月 31 日:整机电路分析 5 月 316 月 7 日:整理报告,确定初稿 6 月 76 月 14 日:检查定稿 主要参考文献、资料(写清楚参考文献名称、作者、出版单位): 1 苏平 单片机原理与接口技术 电子工业出版社2003 年 5 月 2 林伸茂 8051 单片机彻底研究实习篇 人民邮电出版社2005 年 8 月 3 王静霞 单片机应用技术(c 语言版) 电子工业出版社2009 年 1 月 4 陈坤、张义中等 电子设计技术 电子科技大学出版社1997 年 5 月 5 郑应光 模拟电子线路(一) .东南大学出版社. 2005 年 3 月 6 李秀忠 单片机应用技术 人民邮电出版社2007 年 1 月 7 肖洪兵 跟我学单片机 北京航空航天大学出版社2002 年 3 月 审 批 意 见 教研室负责人: 年 月 日 第 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 个中断源 可直接驱动 led 3 级加密位 低功耗空闲和掉电模式 软件设置睡眠和唤醒功能 四川信息职业技术学院毕业设计说明书 第 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 复位电路 为确保两点间温度控制系统中电路稳定可靠工作,复位电路是必不可少的一部分, 复位电路的第一功能是上电复位。一般电路正常工作需要供电电源为 5v5%,即 四川信息职业技术学院毕业设计说明书 第 9 页 4.755.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,20x2,40x2 行等模块。 点阵字符型 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 条数据线 db0db7 和 3 条控制线 rs,rw,e,hd44780 的引脚功能如表 3-2 所示。 表 3-2 hd47780 的引脚功能表 引脚 符号 状态 功能 1 vss 电源地 2 vdd 电源正,接+5v 3 vl 液晶显示偏压 4 rs 输入 寄存器选择:为 1 时选择数据寄存器;为 0 时选择指令寄存 器 5 rw 输入 r/w 为读写选择线:为 1 时进行读操作,为 0 时进行写操作 6 e 输入 使能信号 7 db0 三态 数据总线(lsb) 8 db1 三态 数据总线 9 db2 三态 数据总线 10 db3 三态 数据总线 11 db4 三态 数据总线 12 db5 三态 数据总线 13 db6 三态 数据总线 14 db7 三态 数据总线 15 a 背光源正极 16 k 背光源负极 控制器 hd44780 的信号功能控制如表 3-3 3-3 控制器 hd44780 的信号功能 rs r/w e 功能 0 0 下降沿 写指令代码 0 1 高电平 读忙标志和 ac 值 四川信息职业技术学院毕业设计说明书 第 13 页 1 0 下降沿 写数据 1 1 高电平 读数据 图 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 的管脚排列如图 35 所示。64 位 光刻 rom 是出厂前被光刻好的,它可以看作是该 ds18b20 的地址序列号。不同的器 件地址序列号不同。 图 3-6 ds18b20 引脚分布图 表 3-4 ds18b20 引脚功能 序号 寄存器名称 作 用 序 号 寄存器名称 0 温度低字节 以 16 位补码形式存放 4、5 保留字节 1、2 1 温度高字节 以 16 位补码形式存放 6 计数器余值 四川信息职业技术学院毕业设计说明书 第 15 页 2 th/用户字节 1 存放温度上限 7 计数器/ 3 hl/用户字节 2 存放温度下限 8 crc 表 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 左右 的上拉电阻。此次设计选择的是前面一种控制。表 32 ds18b20 有六条控制命令 cpu 对 ds18b20 的访问流程是:先对 ds18b20 初始化,再进行 rom 操作命令, 最后才能对存储器操作,数据操作。ds18b20 每一步操作都要遵循严格的工作时序和 通信协议。如主机控制 ds18b20 完成温度转换这一过程,根据 ds18b20 的通讯协议, 须经三个步骤:每一次读写之前都要对 ds18b20 进行复位,复位成功后发送一条 rom 指令,最后发送 ram 指令,这样才能对 ds18b20 进行预定的操做。 指 令 约定代码 操 作 说 明 温度转换 44h 启动 ds18b20 进行温度转换 读暂存器 beh 读暂存器 9 个字节内容 写暂存器 4eh 将数据写入暂存器的 th、tl 字节 复制暂存器 48h 把暂存器的 th、tl 字节写到 e2ram 中 重新调 e2ram b8h 把 e2ram 中的 th、tl 字节 写到暂存器 th、tl 字节 读电源供电方式 b4h 启动 ds18b20 发送电源供电方式的信号给主 cpu 四川信息职业技术学院毕业设计说明书 第 16 页 图 3-7 测温电路 3.7 整机工作原理 当接通电源以后,温度传感器正常工作,温度传感器将根据被测温度的不同来采 集不同的数据,然后将所采集到的数据传送到比较器到中,然后由比较器将采集到的 数据转变成高低电平,在送入单片机,单片机通过控制各个引脚电平的高低来来控制 温度的显示输出,当温度显示 th 为 110c,tl 为 20c,通过矩阵键盘电路可以调 节 th 和 tl 的初始值,并且还可以调节当前的显示的温度值,按一次键盘 th 和 tl 的值自加一或自减一,当减到低于 20c 或高于 110时,将自动返回初始值。整机电路 图如图 3-8 所示 p3.7p3.7 +5vp3.7gnd p1.0.p1.2.3p1.4.5p1.6.7 p1.2p1.3.1p1.0 p1.4.5p1.6.7 xtal218xtal119 ale301psn29rst9 p0./ad039.1/18p0.2/ad237.3/36p0.4/ad435.5/54p0.6/ad63.7/72 p1.0/t21./ex2p1.23.34p1.45.56p1.67.78 p3.0/rxd10.1/tp3.2/in012./it13p3.4/014p3.7/rd17.6/w6.5/t15p2.7/a1528 p2.0/a821.1/9p2./a023.3/14p2.4/a225.5/136.6/47 u at89c52 +5v 2345678 9 1rp1 10k +5vd71463d5124d31029d1807e6rw5s4vs1d2ve3 lcd1lm016l dq2vcgn1u3ds18b20+5vr24.7k c130pc2 30p x1crystal310ufr 10kgndvc 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;i0;i-) dq = 0; / 给脉冲信号 dat=1; dq = 1; / 给脉冲信号 if(dq) dat|=0x80; 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(0xcc); /跳过读序号列号的操作 writeonechar(0x4e); 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,0x38); /8 位数据端 口 lcd_write(lcd_command,0x38); 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,0x80|x); if(y=1) lcd_write(lcd_command,0x80|(x-0x40); 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_(); lcden=0; lcd 要能读写数据,必须对 lcd 进行读写操作,读操作时,先设置 rs 和 r/w 开始 当 rs=1 时,选择数据寄存器 把显示数据送至 p0 口 读/写标志位 r/w=0 时,进行写操作 lcd 使能信号 e 至高电平后再过两个时钟周期至低电平, 产生一个下降沿信号,使 lcd 写入显示数据 四川信息职业技术学院毕业设计说明书(论文) 第 24 页 状态,在设置 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_(); dbport=input; _nop_(); lcden=1; _nop_(); lcden=0; _nop_(); lcd_wait(); 读/写标志位 r/w=0 时,进行写操作 当 rs=0 时,选择指令寄存器 开始 子程序返回 调用延时子程序 lcd 使能信号 e 至高电平后再过两个时钟周期至低电平,产生 一个下降沿信号,往 lcd 写入指令代码,lcd 执行命令 把指令数据送至 p0 口 四川信息职业技术学院毕业设计说明书(论文) 第 25 页 /设置显示模式* #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, 0x08|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, 0x04|inputmode); 四川信息职业技术学院毕业设计说明书(论文) 第 26 页 最常见的矩阵式键盘按键识别方法是编程扫描,这里采用的是列扫描方法。 no yes no yes 图 4-5 矩阵键盘流程图 键盘扫描函数 sfr key_port=0x90; /定义 p1 口为键盘扫描口 /p0=0x80,p1=0x90,p2=0xa0,p3=0xb0.数据端口 bit key_ok=0; /有键按下的标志 /*延时子程序* *调用一次用时 18 微秒,t 每加 1,用时增加 6 微秒 */ void delay(unsigned char t) while(t-); unsigned char r_left(unsigned char x) x/用 at89c51 时就用这个头文件 #include /用华邦 w78e58b 时必须用这个头文件 sbit dq = p37; /定义 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; unsigned char dat = 0; for (i=8;i0;i-) 四川信息职业技术学院毕业设计说明书(论文) 第 33 页 dq = 0; /给脉冲信号 dat=1; dq = 1; /给脉冲信号 if(dq) dat|=0x80; delay_18b20(4); return(dat); /*ds18b20 写一个字节*/ void writeonechar(unsigned char dat) unsigned char i=0; for (i=8; i0; 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(); writeonechar(0xcc); /跳过读序号列号的操作 writeonechar(0x4e); 四川信息职业技术学院毕业设计说明书(论文) 第 34 页 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 tt2; init_ds18b20(); writeonechar(0xcc); / 跳过读序号列号的操作 writeonechar(0x44); / 启动温度转换 delay_18b20(70); / 温度转化要一段时间 init_ds18b20(); writeonechar(0xcc); /跳过读序号列号的操作 writeonechar(0xbe); /读取温度寄存器等(共可读 9 个寄存器) 前两个就是温 度 /delay_18b20(70); tt0=readonechar(); /读取温度值低位 tt1=readonechar(); /读取温度值高位 return(tt); /#include /用 at89c51 时就用这个头文件 #

温馨提示

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

评论

0/150

提交评论