毕业论文----基于51单片机的家用电热水器设计.doc_第1页
毕业论文----基于51单片机的家用电热水器设计.doc_第2页
毕业论文----基于51单片机的家用电热水器设计.doc_第3页
毕业论文----基于51单片机的家用电热水器设计.doc_第4页
毕业论文----基于51单片机的家用电热水器设计.doc_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

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

文档简介

毕业设计(论文) 基于 51 单片机的家用电热水器设计 design of household electric water heater based on the 51-series singlechip 作者声明 本人声明所呈交的论文是我个人在导师指导下进行的研究工作及取得的研究 成果,除了文中特别加以标注的地方外,没有任何剽窃、抄袭、造假等违反学术 道德、学术规范的行为,也没有侵犯任何其他人或组织的科研成果及专利。与我 一同工作的同志对本研究所做的任何贡献均已在论文中作了明确的说明并表示了 谢意。如本毕业设计(论文)引起的法律结果完全由本人承担。 毕业设计(论文)成果归武汉工程大学邮电与信息工程学院所有。 特此声明。 作者专业: 作者学号: 作者签名: _年_月_日 摘 要 随着社会的发展,人类科技的进步,各行各业都在使自己的产品智能化、数 字化,因老式的热水器使用煤气或天然气对水进行燃烧加热,用手动的方式调节 温度,不仅不能够精确的确定使用者需要的水温,而且还存在一定的危险性。 电热水器是一种可供浴室、洗手间及厨房使用的家用电器,随着人们生活质 量的提高,现代的家用电热水器已经摒弃了以前的做法,而采用一种更加精确、 安全的实施方案。 c 语言对单片机编程有诸多优点,例如:便于移植、句法检查时错误少、坚 固性好、头文件种类诸多,能够方便快捷使用各种函数等。 本文采用 at 89c 52 单片机作为控制器,使用 c 语言编写程序,设计了一款 智能家用电热水器。使用阵型键盘输入温度,温度可以精确到 0.1 摄氏度,并使 用 led 灯显示,能够精确提供用户所需温度的温水。采用 ds18b20 采集温度, 使用 led 灯显示,精确的显示出采集的水温。当所需温度高于当前采集的水温 时,使用 moc3041 芯片触发加热,当所需温度低于当前采集的水温时,则停止 加热。基本实现了智能控制功能。 关键词:单片机;c 语言;采集;智能;家用电热水器 abstract with the development of social and program of human technology, every trade all transfer own product into intelligence, digitize, because the water heater of old style uses gas or natural gas to heat water and manually adjust mode conditioning temperature, not only unable to sufficiently accurately recognize the user need of water temperature, but also exist some certain risk. the electrical water heater is a kind of home appliances that bathroom, loo and kitchen can use, with raising of quality of human live, the modernistic household electrical water heater has abandonned the past way, but adopts a kind of implementation scheme of more accurate ,safety. c language possess many merits for programming of singlechip, such as:is easy to ransplant, having little bug when sentence construction review, fastness good, the head document type is so many that expediently quickly using various function etc. the writer adopts an at 89 cs 52 singlechip to be the controller and using c languages to write programming ,design a style of intelligence household electrical water heater.use array form keyboard input temperature, the temperature can be accuratly recognized to 0.1 , and use led light display it, can accurately provide to the warm water of temperature that user needs.adopt ds18 b20 to collect temperature, use led light display, the accurately displays to collect water temperature.when the temperature needed higher than to collect water temperature at present, use the moc3041 chip lead to heating , when the temperature needed is lower than the collect water temperature at present, stop heating.the simply carry out intelligence control function. key words: singlechip; c language; collect; intelligence; household electric water heater 1 目 录 第 1 章 绪论 1 1.1 家用电热水器的现状 .1 1.2 tx-1c 单片机实验开发板简介 1 第 2 章 系统硬件设计 2 2.1 系统硬件的组成部分 .2 2.2 系统硬件各部分的简介 .2 2.3 数码管显示 .3 2.3.1 数码管简介 3 2.3.2 数码管的实现方法 4 2.3.3 锁存器与数码管显示方法 6 2.4 键盘输入设计 .7 2.4.1 键盘输入方法 7 2.4.2 键盘输入的抖动与去抖的方法 8 2.5 ds18b20 温度采集 .9 2.5.1 ds18b20 技术性能与应用范围 9 2.5.2 ds18b20 的初始化与读写操作 10 2.5.3 ds18b20 的指令与格式 12 2.5.4 ds18b20 寄生电源供电方式 15 2.5.5 ds18b20 改进的寄生电源供电方式 16 2.5.6 ds18b20 外部电源供电方式 17 2.5.7 ds18b20 寄生电源供电方式 18 第 3 章 系统软件设计 20 3.1 键盘输入的程序 .20 3.2 ds18b20 温度传感器设计 .21 3.3 主函数的分析 .25 3.4 显示函数的分析 .26 3.5 中断加热子函数的分析 .33 2 第 4 章 功能简介与成品图片 35 4.1 智能热水器具的功能 .35 4.2 成品图片 .35 第 5 章 总结与展望 38 附录 程序 41 1 第 1 章 绪论 单片机是一种与我们生活息息相关的控制器,它存在于许多地方,例如: 电子手表、掌上游戏机、数码相机、录音笔、电视机遥控器等等。单片机主要 由中央处理器、内存、输入/输出设备组成,它就好像是一台小型电脑,它能够 执行人们对它编写的程序,从而发出各种不同的控制命令,与外部电路结合后, 便可以完成各种各样的功能。通过单片机人们的生活将会变得更加方便、快捷。 1.1 家用电热水器的现状 我们的生活电热水器是一种可供浴室、洗手间及厨房使用,按照人们的需 要的温度,提供温水的家用电器。市场上传统的机械式电热水器控制精度低、 可靠性差,甚至存在一定的危险隐患。随着社会的发展、人们生活质量的提高, 人们对电热水器的要求越来越趋向于智能化和数字化,这种老式而简单的电热 水器已经不能够满足人们的需要了。而智能化家用电热水器正是适应现代化智 能家用电器趋势而出现。它能提供用户方便快捷的数字化输入方式,并且能精 确的采集和控制环境中的水温,将其提供给用户,因此备受人们的关注。 1.2 tx-1c 单片机实验开发板简介 xt-1c 单片机开发板是哈尔滨市天祥电子综合多年开发经验,在原 tx-1b 基础上,经过精心设计开发出的多功能 51 单片机开发平台。该开发板集常用的 单片机外围资源、串口和 usb 口两种调试下载接口于一身,完全兼容 atmel 公司的 51 单片机,除此之外还有很多特点,如:无法解密、低功耗、高速、高 可靠、强抗静电、强抗干扰等。 tx 系列单片机开发板可完全作为各种 51 单片机的开发板,用汇编语言或 者 c 语言对其进行编程。当用 stc 公司的单片机时,直接用产品套件附带的串 口线将开发板与计算机串口相连,按照 stc 单片机下载操作教程便可以下载程 序,而且下载速度比起其他下载工具要快的多。本文将使用 tx-1c 开发板完成 数字化电热水器的设计。 2 3 第 2 章 系统硬件设计 2.1 系统硬件的组成部分 系统设计硬件原理结构见图 2.1 所示。系统以高性价比的 at89c51 单片机 为核心,由键盘输入、ds18b20 温度采集、数码管显示电路、电源时钟复位电 路、双向可控硅驱动电路 moc3041、双向可控硅 tlc336a 组成加热器控制电 路。 图 2.1 系统设计硬件原理结构 2.2 系统硬件各部分的简介 这里 at89c51 为总控制器。单片机的 p0 口连接 74hc573 锁存器,这样可 以节约单片机端口,即可多次操作 p0 口,使其既能控制数码管的片选,又能控 制数码管的位选,从而节省的单片机的外部接口,扩展了功能。 键盘的输入由 p3 口完成在第 4 章节中会具体介绍如何实现。 时钟复位电路见图 2.2 所示,ret 连接单片机的 reset 接口,主要完成单 片机的复位功能。 4 图 2.2 时钟复位电路 温度采集芯片由 ds18b20 芯片完成,ds18b20 的 2 号接口接在单片机的 p22 口,按协议传送以两个字节为一组的温度数据,第 3 章会介绍具体实现方 法。 加热模块见图 2.3 所示,moc3041 芯片的 2 号接口连接单片机的 p22 口。 当需要加热时,p22 接口送出低电平,即可触发加热器工作。 图 2.3 加热模块 2.3 数码管显示 2.3.1 数码管简介 单片机系统中常用的显示器有: 发光二极管 led(light emitting diode)显示器、液晶 cd(liquid crystal display)显示器、 crt 显示器等。led、lcd 显示器有两种显示结构:段显示 (7 段、米字型等)和点阵显示(58、88 点阵等) 。 使用 led 显示器时,要注意区分这两种不同的接法。为了显示数字或字符, 5 必须对数字或字符进行编码。七段数码管加上一个小数点,共计 8 段。因此为 led 显示器提供的编码正好是一个字节。本设计采用的 tx-c1 实验板是采用共 阴 led 显示器,根据电路连接图显示十六进制数的编码见表 2.1 所示。 表 2.1 十六进制数的编码 十 六 进 制 编 码 数 码 管 显 数 值 十 六 进 制 编 码 数 码 管 显 数 值 十 六 进 制 编 码 数 码 管 显 数 值 0x3f 0 0x7d 6 0x39 c 0x06 1 0x07 7 0x5e d 0x5b 2 0x7f 8 0x79 e 0x4f 3 0x6f 9 0x71 f 0x66 4 0x77 a 0x00 无 显 示 0x6d 5 0x7c b 2.3.2 数码管的实现方法 数码管的显示由 p0 口完成控制。有两点需要注意,第一点是要哪一个数码 管亮,第二点是亮的数码管显示什么数字。所以数码管有位选和段选之分,位 选在程序中用 wei 表示,单片机上是 p27 端口,即对位选操作时使 p27 呈现 高电平,这时 p0 的八个端口对数码管的操作决定了那几个数码管亮,p0 操作 完成后使 p27 呈现低电平,这样位选就已锁定。段选在程序中由 duan 表示, 单片机上是 p26 端口,与位选相同,操作时使 p26 呈现高电平,这时 p0 的八 个端口对数码管的操作决定了亮的几个数码管显示什么数字,p0 操作完成后使 p26 呈现低电平,这样段选就已锁定。 见图 2.4 所示由于单片机仅仅起到控制的作用,其输出电流十分小,所以 p0 端需要接上拉电阻与 5v 电源,通过电压的变化控制 5v 电源点亮,想要图 中 a 端由电流通过时,即给 p00 一个低电平,触发上拉电阻两端间的电势差, 6 这样就能促使电流流向 a 点,从而使 a 端对应的 led 灯点亮。 图 2.4 单片机与数码管的硬件连接 首先选择位选,再选择段选。 uchar code table= 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0xbf,0x86, 0xdb,0xcf,0xe6,0xed, 0xfd,0x87,0xff,0xef, 0x00,0x08,0x88; 可以直接设置数码管显示各数字的十六进制,即 p0 口应赋的十六进制,以 便操作。如以上数组,使用时仅仅将需要的数组中的其中一个赋予 p0 口,这样 可以方便直观得使数码管显示需要的数字。 选择位选与选择片选的过程相当快时,显示在人眼中就是一排易于识别的 十进制数字,这就是数码管的动态显示。 7 2.3.3 锁存器与数码管显示方法 在这里先介绍 74hc573 芯片,这是一个锁存器芯片,连接方法见图 2.5 所 示, p27、p26 分别控制位选和段选的 l 端,例如:当 p27(程序中的全局 变量 wei)赋高电平时,74hc573 输入端口的值将直接输送给 74hc573 芯片的 输出端,当输入端变化时,输出端也变化。p27 赋低电平时, 74hc573 芯片将 记住最近一次 l 端口是高电平时芯片输入端的 8 位,并将其输出,当输入端变 化时,输出端不变化。在这里就可以利用锁存器的特性使 p27 起到控制那个数 码管亮的作用,使 p26 控制数码管亮什么样的数字作用。 图 2.5 74hc573 芯片的连接 以下数码管显示部分程序。 p0=0xff; wei=1; p0=srtemp;/wein 打开后 是低电平亮 wei=0; srtemp=_crol_(srtemp,1); p0=0x00; duan=1; p0=tabledisi; duan=0; delay(1); 8 duan=1; p0=0x00; duan=0; 要注意的是位选(程序中的 wei 变量) ,位选是低电平时选择该数码管亮。 在显示时容易出现不需要亮的 led 管微微发亮的问题,这是因为所选择的 位选和段选都是通过 p0 赋的值,如果先选择位选的 8 位值,p0 口不还原成 0x00,就会导致段选打开后,还未赋予段选 p0 口需要的数值之前,这段时间内 p0 口将刚才位选的 8 位值赋予了段选锁存器,这样就会在极短的时间内,一些 不需要的 led 灯点亮,在单片机上就是由 led 灯微微亮的情况,所以在这里 注意每次 p0 对位选赋值以前,都应该保证 p0 口为 0x00。 2.4 键盘输入设计 2.4.1 键盘输入方法 本设计中使用的是矩阵式键盘,见图 2.6 所示。 图 2.6 矩阵式键盘 s10 到 s19 分别代表数字 0 到 9。s20 代表确认数字,按下后即可确认要输 入数字的某一位。 左侧键盘的引脚由上至下分别是 p30 到 p37,第一行暂时不用,从第二 行开始使用,每一行如 p31 都与 p34、 p35、 p36 、p37,他们是线与的 9 关系。因此可以如此操作,对图中第二行、第三行、第四行诸行进行扫描。扫 描第一行时 p3 口赋值为 0xfd,即为 p31 口赋“0”,p3 的其他口赋“1”,当第二 行没有按键按下时 p34、 p35、 p36 、p37 将都是高电平“1” ,一旦有按键 按下时,由于线与关系,p34、 p35、 p36 、 p37 必定有一个为“0” ,它们 之中那一个为“0”依次代表 s10 到 s13 哪个键被按下。依次循环扫描三行即可时 时检测是否有键按下。 2.4.2 键盘输入的抖动与去抖的方法 在 2.4.1 节中谈到了如何实现键盘的扫描,但是理论与实际还是有一定的差 距,当按下键盘到检测到有电压变化,这段时间在实际中是存在一定的时间误 差的,经过这段时间误差后电压才会达到单片能够检测到的范围,但这期间单 片机很有可能已经完成检测,见图 2.7 所示。 图 2.7 抖动示意图 如果不去除抖动的话,人们手指按下的瞬间单片机已经开始检测,这时电 压还未降到稳定闭合状态所以不能检测到按下,同理不管是按下,还是是松手 都会有这样的情况出现,不利于操作,所以应该加入去抖操作,图中右侧是硬 件去除抖动,除了硬件去抖以外还可以利用软件去抖。 在本设计中采用软件去抖的方法,原理是检测两次,第一次检测到低电平 时延时一段时间,再检测一次,如果还能检测到低电平,则说明确实有键按下。 10 具体程序如下: while(temp!=0xf0) delay(5); p3=0xfd; temp=p3; temp=temp while(temp!=0xf0) 上述程序是两个 while 循环之间的嵌套,第一个 while()语句判断有键按 下后,延时一段时间再进行判断,如果第二次判断也认为由键按下,则可以确 认的确由键盘操作,并不是抖动。具体按下后的操作可以在后一个 while 循环 中书写。 2.5 ds18b20 温度采集 2.5.1 ds18b20 技术性能与应用范围 图 2.8 ds18b20 的 外 形 及 管 脚 图 ds18b20 是 一 种 可 组 网 数 字 温 度 传 感 器 芯 片 , 具 有 耐 磨 耐 碰 , 体 积 小 , 使 用 方 便 , 封 装 形 式 多 样 , 适 用 于 各 种 狭 小 空 间 设 备 数 字 测 温 和 控 制 领 域 。 11 独 特 的 单 线 接 口 方 式 , ds18b20 在 与 微 处 理 器 连 接 时 仅 需 要 一 条 口 线 即 可 实 现 微 处 理 器 与 ds18b20 的 双 向 通 讯 。 测 温 范 围 55 125 , 固 有 测 温 分 辨 率 0.5 。 支 持 多 点 组 网 功 能 , 多 个 ds18b20 可 以 并 联 在 唯 一 的 三 线 上 , 最 多 只 能 并 联 8 个 , 如 果 数 量 过 多 , 会 使 供 电 电 源 电 压 过 低 , 从 而 造 成 信 号 传 输 的 不 稳 定 , 实 现 多 点 测 温 。 工 作 电 源 为 35v/dc。 在 使 用 中 不 需 要 任 何 外 围 元 件 , 测 量 结 果 以 912 位 数 字 量 方 式 串 行 传 送 。 不 锈 钢 保 护 管 直 径 6, 适 用 于 dn1525, dn40dn250 各 种 介 质 工 业 管 道 和 狭 小 空 间 设 备 测 温 , 标 准 安 装 螺 纹 m10x1, m12x1.5, g1/2”任 选 , pvc 电 缆 直 接 出 线 或 德 式 球 型 接 线 盒 出 线 ,便 于 与 其 它 电 器 设 备 连 接 。 负 压 特 性 : 电 源 极 性 接 反 时 , 芯 片 不 会 因 发 热 而 烧 毁 , 但 不 能 正 常 工 作 。 ds18b20 内 部 结 构 主 要 由 四 部 分 组 成 : 64 位 光 刻 rom 、 温 度 传 感 器 、 非 挥 发 的 温 度 报 警 触 发 器 th 和 tl、 配 置 寄 存 器 。 ds18b20 的 外 形 及 管 脚 排 列 见 图 2.8 所 示 。 该 产 品 适 用 于 冷 冻 库 , 粮 仓 , 储 罐 , 电 讯 机 房 , 电 力 机 房 , 电 缆 线 槽 等 测 温 和 控 制 领 域 、 轴 瓦 , 缸 体 , 纺 机 , 空 调 , 等 狭 小 空 间 工 业 设 备 测 温 和 控 制 、 供 热 /制 冷 管 道 热 量 计 量 , 中 央 空 调 分 户 热 能 计 量 和 工 业 领 域 测 温 和 控 制 、 汽 车 空 调 、 冰 箱 、 冷 柜 、 以 及 中 低 温 干 燥 箱 等 。 2.5.2 ds18b20 的初始化与读写操作 1. ds18b20 的 初 始 化 ( 1) 先 将 数 据 线 置 高 电 平 “1”; ( 2) 延 时 ( 该 时 间 要 求 的 不 是 很 严 格 , 但 是 尽 可 能 的 短 一 点 ) ; ( 3) 数 据 线 拉 到 低 电 平 “0”; ( 4) 延 时 750 微 秒 ( 该 时 间 的 时 间 范 围 可 以 从 480 到 960 微 秒 ) ; ( 5) 数 据 线 拉 到 高 电 平 “1”; ( 6) 延 时 等 待 ( 如 果 初 始 化 成 功 则 在 15 到 60 毫 秒 时 间 之 内 产 生 一 个 由 ds18b20 所 返 回 的 低 电 平 “0”。 据 该 状 态 可 以 来 确 定 它 的 存 在 , 但 是 应 注 意 不 能 无 限 的 进 行 等 待 , 不 然 会 使 程 序 进 入 死 循 环 , 所 以 要 进 行 超 时 控 制 ) ; ( 7) 若 cpu 读 到 了 数 据 线 上 的 低 电 平 “0”后 , 还 要 做 延 时 , 其 延 时 的 时 间 从 发 出 的 高 电 平 算 起 ( 第 ( 5) 步 的 时 间 算 起 ) 最 少 要 480 微 秒 ; 12 ( 8) 将 数 据 线 再 次 拉 高 到 高 电 平 “1”后 结 束 。 ds18b20 的 的 初 始 化 见 图 2.9 所 示 。 图 2.9 ds18b20 的 的 初 始 化 2. ds18b20 的 写 操 作 ( 1) 数 据 线 先 置 低 电 平 “0”; ( 2) 延 时 确 定 的 时 间 为 15 微 秒 ; ( 3) 按 从 低 位 到 高 位 的 顺 序 发 送 字 节 ( 一 次 只 发 送 一 位 ) ; ( 4) 延 时 时 间 为 45 微 秒 ; ( 5) 将 数 据 线 拉 到 高 电 平 ; ( 6) 重 复 上 ( 1) 到 ( 6) 的 操 作 直 到 所 有 的 字 节 全 部 发 送 完 为 止 ; ( 7) 最 后 将 数 据 线 拉 高 。 在 这 里 要 注 意 的 是 ( 3) , 写 数 据 时 时 1bit 单 独 传 送 , 这 里 有 两 种 情 况 。 当 需 要 传 送 “1”时 , 单 片 机 应 该 给 ds18b20 芯 片 的 dq 接 口 赋 低 电 平 , 大 约 15 秒 以 后 , 将 dq 释 放 为 高 电 平 , 延 时 约 45 微 妙 即 可 。 当 需 要 传 送 “0”时 , 单 片 机 应 该 给 ds18b20 芯 片 的 dq 接 口 赋 低 电 平 , 并 且 持 续 拉 低 最 少 60 微 妙 , 然 后 将 dq 释 放 为 高 电 平 , 再 延 时 约 15 秒 即 可 。 ds18b20 的 写 操 作 时 序 图 见 图 2.10 所 示 。 13 图 2.10 ds18b20 的 写 操 作 时 序 图 3. ds18b20 的 读 操 作 ( 1) 将 数 据 线 拉 高 “1”; ( 2) 延 时 2 微 秒 ; ( 3) 将 数 据 线 拉 低 “0”; ( 4) 延 时 15 微 秒 ; ( 5) 将 数 据 线 拉 高 “1”; ( 6) 延 时 15 微 秒 ; ( 7) 读 数 据 线 的 状 态 得 到 一 个 状 态 位 , 并 进 行 数 据 处 理 ; ( 8) 延 时 30 微 秒 ; 这 里 只 要 按 以 上 操 作 将 状 态 位 的 各 各 bit 按 顺 序 储 存 好 即 可 。 ds18b20 的 读 操 作 时 序 图 见 图 2.11 所 示 。 图 2.11 ds18b20 的 读 操 作 时 序 图 2.5.3 ds18b20 的指令与格式 ds18b20 温 度 格 式 图 见 图 2.12 所 示 。 14 图 2.12 ds18b20 温 度 格 式 图 这 是 12 位 转 化 后 得 到 的 12 位 数 据 , 存 储 在 ds18b20 的 两 个 8 比 特 的 ram 中 , 二 进 制 中 的 前 面 5 位 是 符 号 位 , 如 果 测 得 的 温 度 大 于 0, 这 5 位 为 0, 只 要 将 测 到 的 数 值 乘 于 0.0625 即 可 得 到 实 际 温 度 ; 如 果 温 度 小 于 0, 这 5 位 为 1, 测 到 的 数 值 需 要 取 反 加 1 再 乘 于 0.0625 即 可 得 到 实 际 温 度 。 例 如 +125 的 数 字 输 出 为 07d0h, +25.0625 的 数 字 输 出 为 0191h, -25.0625 的 数 字 输 出 为 fe6fh, -55 的 数 字 输 出 为 fc90h 。 ds18b20 温 度 传 感 器 的 存 储 器 ds18b20 温 度 传 感 器 的 内 部 存 储 器 包 括 一 个 高 速 暂 存 ram 和 一 个 非 易 失 性 的 可 电 擦 除 的 eepram,后 者 存 放 高 温 度 和 低 温 度 触 发 器 th、 tl 和 结 构 寄 存 器 。 配 置 寄 存 器 , 该 字 节 各 位 的 意 义 见 表 2.2 所 示 。 表 2.2 配 置 寄 存 器 结 构 温度 数据输出(二进制) 数据输出(十六进制) +125 0000 0111 1101 0000 07d0 +85 0000 0101 0101 0000 0550 +25.0625 0000 0001 1001 0001 0191 +10.125 0000 0000 1010 0010 00a2 +0.5 0000 0000 0000 1000 0008 0 0000 0000 0000 0000 0000 -0.5 1111 1111 1111 1000 fff8 -10.125 1111 1111 0101 1110 ff5e -25.0625 1111 1110 0110 1111 fe6f -55 1111 1100 1001 0000 fc90 15 高 速 暂 存 存 储 器 由 9 个 字 节 组 成 。 其 分 配 见 表 2.3 所 示 , 当 温 度 转 换 命 令 发 布 后 , 经 转 换 所 得 的 温 度 值 以 二 字 节 补 码 形 式 存 放 在 高 速 暂 存 存 储 器 的 第 0 和 第 1 个 字 节 。 单 片 机 可 通 过 单 线 接 口 读 到 该 数 据 , 读 取 时 低 位 在 前 , 高 位 在 后 。 对 应 的 温 度 计 算 : 当 符 号 位 s=0 时 , 直 接 将 二 进 制 位 转 换 为 十 进 制 ; 当 s=1 时 , 先 将 补 码 变 为 原 码 , 再 计 算 十 进 制 值 。 第 九 个 字 节 是 冗 余 检 验 字 节 。 表 2.3 ds18b20 暂 存 寄 存 器 分 布 寄存器内容 字节地址 温度值低位 (ls byte) 0 温度值高位 (ms byte) 1 高温限值(th) 2 低温限值(tl) 3 配置寄存器 4 保留 5 保留 6 保留 7 crc 校验值 8 根 据 ds18b20 的 通 讯 协 议 , 主 机 ( 单 片 机 ) 控 制 ds18b20 完 成 温 度 转 换 必 须 经 过 三 个 步 骤 : 每 一 次 读 写 之 前 都 要 对 ds18b20 进 行 复 位 操 作 , 复 位 成 功 后 发 送 一 条 rom 指 令 , 最 后 发 送 ram 指 令 , 这 样 才 能 对 ds18b20 进 行 预 定 的 操 作 。 复 位 要 求 主 cpu 将 数 据 线 下 拉 500 微 秒 , 然 后 释 放 , 当 ds18b20 收 到 信 号 后 等 待 16 60 微 秒 左 右 , 后 发 出 60 240 微 秒 的 存 在 低 脉 冲 , 主 cpu 收 到 此 信 号 表 示 复 位 成 功 。 rom 指 令 表 见 表 2.4 所 示 , ram 指 令 表 见 表 2.5 所 示 。 16 表 2.4 rom 指 令 表 指 令 约定代码 功 能 读 rom 33h 读 ds1820 温度传感器 rom 中的编码(即 64 位地址) 符 合 rom 55h 发出此命令之后,接着发出 64 位 rom 编码,访问单总线 上与该编码相对应的 ds1820 使之作出响应,为下一步对 该 ds1820 的读写作准备。 搜 索 rom 0foh 用于确定挂接在同一总线上 ds1820 的个数和识别 64 位 rom 地址。为操作各器件作好准备。 跳 过 rom 0cch 忽略 64 位 rom 地址,直接向 ds1820 发温度变换命令。 适用于单片工作。 警 告 搜 索 命 令 0ech 执行后只有温度超过设定值上限或下限的片子才做出响应 。 表 2.5 ram 指 令 表 指 令 约定代码 功 能 温度变换 44h 启动 ds1820 进行温度转换,12 位转换时最长为 750ms( 9 位为 93.75ms)。结果存入内部 9 字节 ram 中。 读暂存器 0beh 读内部 ram 中 9 字节的内容 写暂存器 4eh 发出向内部 ram 的 3、4 字节写上、下限温度数据命令, 紧跟该命令之后,是传送两字节的数据。 复制暂存器 48h 将 ram 中第 3 、4 字节的内容复制到 eeprom 中。 重调 eeprom 0b8h 将 eeprom 中内容恢复到 ram 中的第 3 、4 字节。 读供电方式 0b4h 读 ds1820 的供电模式。寄生供电时 ds1820 发送“ 0 ” ,外接电源供电 ds1820 发送“ 1 ”。 2.5.4 ds18b20 寄生电源供电方式 ds18b20 测 温 系 统 具 有 测 温 系 统 简 单 、 测 温 精 度 高 、 连 接 方 便 、 占 用 口 线 少 等 优 点 。 下 面 就 是 ds18b20 几 个 不 同 应 用 方 式 下 的 测 温 电 路 图 : 17 ds18b20 寄 生 电 源 供 电 方 式 电 路 图 , 见 图 2.13 所 示 , 在 寄 生 电 源 供 电 方 式 下 , ds18b20 从 单 线 信 号 线 上 汲 取 能 量 : 在 信 号 线 dq 处 于 高 电 平 期 间 把 能 量 储 存 在 内 部 电 容 里 , 在 信 号 线 处 于 低 电 平 期 间 消 耗 电 容 上 的 电 能 工 作 , 直 到 高 电 平 到 来 再 给 寄 生 电 源 ( 电 容 ) 充 电 。 独 特 的 寄 生 电 源 方 式 有 三 个 好 处 : 1. 进 行 远 距 离 测 温 时 , 无 需 本 地 电 源 ; 2. 可 以 在 没 有 常 规 电 源 的 条 件 下 读 取 rom; 3. 电 路 更 加 简 洁 , 仅 用 一 根 i/o 口 实 现 测 温 。 要 想 使 ds18b20 进 行 精 确 的 温 度 转 换 , i/o 线 必 须 保 证 在 温 度 转 换 期 间 提 供 足 够 的 能 量 , 由 于 每 个 ds18b20 在 温 度 转 换 期 间 工 作 电 流 达 到 1ma, 当 几 个 温 度 传 感 器 挂 在 同 一 根 i/o 线 上 进 行 多 点 测 温 时 , 只 靠 4.7k 上 拉 电 阻 就 无 法 提 供 足 够 的 能 量 , 会 造 成 无 法 转 换 温 度 或 温 度 误 差 极 大 。 因 此 , 这 种 电 路 只 适 应 于 单 一 温 度 传 感 器 测 温 情 况 下 使 用 , 不 适 宜 采 用 供 电 系 统 中 。 并 且 工 作 电 源 vcc 必 须 保 证 在 5v, 当 电 源 电 压 下 降 时 , 寄 生 电 源 能 够 汲 取 的 能 量 也 降 低 , 会 使 温 度 误 差 变 大 。 图 2.13 ds18b20 寄 生 电 源 供 电 方 式 2.5.5 ds18b20 改进的寄生电源供电方式 ds18b20 寄 生 电 源 强 上 拉 供 电 方 式 电 路 图 , 改 进 的 寄 生 电 源 供 电 方 式 见 图 2.14 所 示 , 为 了 使 ds18b20 在 动 态 转 换 周 期 中 获 得 足 够 的 电 流 供 应 , 当 进 行 温 度 转 换 或 拷 贝 到 e2 存 储 器 操 作 时 , 用 mosfet 把 i/o 线 直 接 拉 到 vcc 就 可 提 供 足 够 的 电 流 , 在 发 出 任 何 涉 及 到 拷 贝 到 e2 存 储 器 或 启 动 温 度 转 换 的 指 令 后 , 必 须 在 最 多 10s 内 把 i/o 线 转 换 到 强 上 拉 状 态 。 在 强 18 上 拉 方 式 下 可 以 解 决 电 流 供 应 不 走 的 问 题 , 因 此 也 适 合 于 多 点 测 温 应 用 , 缺 点 就 是 要 多 占 用 一 根 i/o 口 线 进 行 强 上 拉 切 换 。 图 2.14 改 进 的 寄 生 电 源 供 电 方 式 注 意 : 在 见 图 2.13 所 示 、 见 图 2.14 所 示 寄 生 电 源 供 电 方 式 中 , ds18b20 的 vdd 引 脚 必 须 接 地 。 2.5.6 ds18b20 外部电源供电方式 ds18b20 的 外 部 电 源 供 电 方 式 见 图 2.15 所 示 , 在 外 部 电 源 供 电 方 式 下 , ds18b20 工 作 电 源 由 vdd 引 脚 接 入 , 此 时 i/o 线 不 需 要 强 上 拉 , 不 存 在 电 源 电 流 不 足 的 问 题 , 可 以 保 证 转 换 精 度 , 同 时 在 总 线 上 理 论 可 以 挂 接 任 意 多 。 ds18b20 传 感 器 , 组 成 多 点 测 温 系 统 。 注 意 : 在 外 部 供 电 的 方 式 下 , ds18b20 的 gnd 引 脚 不 能 悬 空 , 否 则 不 能 转 换 温 度 , 读 取 的 温 度 总 是 85 。 19 图 2.15 外 部 供 电 方 式 单 点 测 温 电 路 在 本 次 设 计 中 采 用 外 部 电 源 供 电 方 式 , 连 接 方 法 见 图 2.16 所 示 。 图 2.16 设 计 中 采 用 的 测 温 电 路 直接将 ds18b20 的 i/o 口接在单片机的 p22 上,这样在硬件方面就可以 进行数据交流,从而达到温度数据传输的目的。 2.5.7 ds18b20 寄生电源供电方式 外 部 供 电 方 式 的 多 点 测 温 电 路 图 见 图 2.17 所 示 , 外 部 电 源 供 电 方 式 是 ds18b20 最 佳 的 工 作 方 式 , 工 作 稳 定 可 靠 , 抗 干 扰 能 力 强 , 而 且 电 路 也 比 较 简 单 , 可 以 开 发 出 稳 定 可 靠 的 多 点 温 度 监 控 系 统 。 站 长 推 荐 大 家 在 开 发 中 使 用 外 部 电 源 供 电 方 式 , 毕 竟 比 寄 生 电 源 方 式 只 多 接 一 根 vcc 引 线 。 在 外 接 电 源 方 式 下 , 可 以 充 分 发 挥 ds18b20 宽 电 源 电 压 范 围 的 优 点 , 即 使 电 源 电 20 压 vcc 降 到 3v 时 , 依 然 能 够 保 证 温 度 量 精 度 。 图 2.17 外 部 供 电 方 式 的 多 点 测 温 电 路 图 21 第 3 章 系统软件设计 3.1 键盘输入的程序 while(temp!=0xf0) delay(5); p3=0xfd; temp=p3; temp=temp while(temp!=0xf0) temp=p3; switch(temp) case 0xed:num=0; break; case 0xdd:num=1; break; case 0xbd:num=2; break; case 0x7d:num=3; break; while(temp!=0xf0) temp=p3; temp=temp/*0000 22 在这里使用了_crol_函数,所以头文件中要增加#include ,这里包 括去抖和松手检测。经过检测以后通过不同的 temp 值,使 num 被赋予相应的 数值,这样 num 就是要输入的一个数字。 3.2 ds18b20 温度传感器设计 连接好电路以后,就可以开始设计 ds18b20 的软件环节。首先要初始化 ds18b20 以下为初始化程序。 void dsstart() unsigned int i; ds=0; i=100; /拉低约 800us, 符合协议要求的 480us 以上 while(i0) i-; ds=1; /产生一个上升沿, 进入等待应答状态 i=4; while(i0) i-; 然后延时等待,回应。如以下子函数。 void dswait() unsigned int i; while(ds); /等待应答信号 while(ds); /检测到应答脉冲 i=4; while(i0) i-; 以下两个子函数为读取的数据时用到的。可以在温度采集读取时调用。 bit readbit()/读取一个 bit 23 unsigned int i; bit b; ds=0; i+; /延时约 8us, 符合协议要求至少保持 1us ds=1; i+; i+; /延时约 16us, 符合协议要求的至少延时 15us 以上 b=ds; i=8; while(i0) i-; /延时约 64us, 符合读时隙不低于 60us 要求 return b; uchar readbyte()/读取一个字节 uint b; uchar date,a; b=0;date=0; while(b1); b+; return date; 以下为写入命令程序。用于操控 ds18b20。 void writeor(uchar order)/写入命令 uint b; 24 uchar a; bit bit2; b=0; for(a=0;a=1; if(bit2)/写入 1 ds=0; b+,b+; ds=1; for(b=0;b 0 ? 0.5 : -0.5);/,变大十倍且 四舍五入 return(temp); 以上两个程序流程为,changetemp()子函数中先初始化 ds18b20,芯片应 答以后写入两个以字节为一个单位的命令,0xcc 与 0x44 它们的作用分别为跳 过读序号列号的操作和启动温度转换。然后温度获取 gettemp()子函数完成。在 gettemp()子函数中首先也是初始化 ds18b20、等待应答,写入命令 0xcc 跳过读 26 序号列号的操作和 0xbe 读取温度命令。使用 readbyte()读取两个字节的数据, 分别赋予 geta、getb 两个字符型变量,再将 getb 赋予 temp(temp 是一个整型变 量拥有两个字节的容量),这样 temp 的低 8 为就是 getb 中的值了。temp 0 ? 0.5 : -0.5)这句话是先将 tt 由一个最高位为十位保留小数点后一位的数扩大了 十倍,变为了一个最高位为百位的三位数,而后面加上的十一个四舍五入的赋 值语句,也就相当是一个 if 语句,c 语言是任何精度高的变量变为精度低的变 量时,都会失去一定的精度,而且是向下取整,例如在这里,如果 tt 是正温度 的话变大 10 倍以后,小数点后一位是无论是 1 还是 9,都默认舍去,如果要对 正数的 tt 进行四舍五入应该先给 tt 加上 0.5,再将它赋给精度较低的 temp,这 样就可以有四舍五入的功能,而这里没有这么简单,这个 if 语句的还要考虑 tt 为负值的情况下的操作,如果 temp 为负值,tt 变大 10 倍以后还要减去 0.5,这 样就能够完成 tt 为负值情况下的四舍五入。 3.3 主函数的分析 首先给出主函数: void main() tmod=0x01; th0=(65536-46000)/256; tl0=(65536-46000)%256; ea=1; 27 et0=1; tr0=1; zd=0; num=21;aaa=0;bbb=0; num1=21;num2=21;num3=21; while(1) uint a; uchar b; changetemp(); a=gettemp(); b=scanff(); numy=gettemp(); display(a,b); 这里的 aaa 用于控制是否确定输入的一个数字是需要的数字,bbb 用于标记 已经输入到了三个数字的第几个数字。 主函数首先将所用到的全局变量赋值,然后进入大循环首先进入温度转换 函数,使 ds18b20 启动温度转换,然后获取温度将两个字节的数值赋给 a,而 将输入的温度赋予 b ,再由 display(a,b)子函数输出所有的

温馨提示

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

评论

0/150

提交评论