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

下载本文档

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

文档简介

1、 毕业设计(论文)毕业设计(论文) 基于基于 51 单片机的家用电热水器设计单片机的家用电热水器设计 design of household electric water heater based on the 51-series singlechip 作者声明作者声明 本人声明所呈交的论文是我个人在导师指导下进行的研究工作及取得的研究 成果,除了文中特别加以标注的地方外,没有任何剽窃、抄袭、造假等违反学术 道德、学术规范的行为,也没有侵犯任何其他人或组织的科研成果及专利。与我 一同工作的同志对本研究所做的任何贡献均已在论文中作了明确的说明并表示了 谢意。如本毕业设计(论文)引起的法律结果完全

2、由本人承担。 毕业设计(论文)成果归武汉工程大学邮电与信息工程学院所有。 特此声明。 作者专业: 作者学号: 作者签名: _年_月_日 摘摘 要要 随着社会的发展,人类科技的进步,各行各业都在使自己的产品智能化、数 字化,因老式的热水器使用煤气或天然气对水进行燃烧加热,用手动的方式调节 温度,不仅不能够精确的确定使用者需要的水温,而且还存在一定的危险性。 电热水器是一种可供浴室、洗手间及厨房使用的家用电器,随着人们生活质 量的提高,现代的家用电热水器已经摒弃了以前的做法,而采用一种更加精确、 安全的实施方案。 c 语言对单片机编程有诸多优点,例如:便于移植、句法检查时错误少、坚 固性好、头文件

3、种类诸多,能够方便快捷使用各种函数等。 本文采用 at 89c 52 单片机作为控制器,使用 c 语言编写程序,设计了一款 智能家用电热水器。使用阵型键盘输入温度,温度可以精确到 0.1 摄氏度,并使 用 led 灯显示,能够精确提供用户所需温度的温水。采用 ds18b20 采集温度, 使用 led 灯显示,精确的显示出采集的水温。当所需温度高于当前采集的水温 时,使用 moc3041 芯片触发加热,当所需温度低于当前采集的水温时,则停止 加热。基本实现了智能控制功能。 关键词:关键词:单片机;c 语言;采集;智能;家用电热水器 abstract with the development of

4、 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

5、 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 impleme

6、ntation 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 a

7、dopts 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 accurate

8、ly 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

9、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

10、 章章 系统硬件设计系统硬件设计.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 ds18b

11、20 改进的寄生电源供电方式.16 2.5.6 ds18b20 外部电源供电方式.17 2.5.7 ds18b20 寄生电源供电方式.18 第第 3 章章 系统软件设计系统软件设计.2020 3.1 键盘输入的程序.20 3.2 ds18b20 温度传感器设计.21 3.3 主函数的分析.25 3.4 显示函数的分析.26 3.5 中断加热子函数的分析.33 第第 4 章章 功能简介与成品图片功能简介与成品图片.3535 4.1 智能热水器具的功能.35 4.2 成品图片.35 第第 5 章章 总结与展望总结与展望.3838 附录附录 程序程序.4141 第第 1 章章 绪论绪论 单片机是一种

12、与我们生活息息相关的控制器,它存在于许多地方,例如: 电子手表、掌上游戏机、数码相机、录音笔、电视机遥控器等等。单片机主要 由中央处理器、内存、输入/输出设备组成,它就好像是一台小型电脑,它能够 执行人们对它编写的程序,从而发出各种不同的控制命令,与外部电路结合后, 便可以完成各种各样的功能。通过单片机人们的生活将会变得更加方便、快捷。 1.11.1 家用电热水器的现状家用电热水器的现状 我们的生活电热水器是一种可供浴室、洗手间及厨房使用,按照人们的需 要的温度,提供温水的家用电器。市场上传统的机械式电热水器控制精度低、 可靠性差,甚至存在一定的危险隐患。随着社会的发展、人们生活质量的提高,

13、人们对电热水器的要求越来越趋向于智能化和数字化,这种老式而简单的电热 水器已经不能够满足人们的需要了。而智能化家用电热水器正是适应现代化智 能家用电器趋势而出现。它能提供用户方便快捷的数字化输入方式,并且能精 确的采集和控制环境中的水温,将其提供给用户,因此备受人们的关注。 1.21.2 tx-1ctx-1c 单片机实验开发板简介单片机实验开发板简介 xt-1c 单片机开发板是哈尔滨市天祥电子综合多年开发经验,在原 tx-1b 基础上,经过精心设计开发出的多功能 51 单片机开发平台。该开发板集常用的 单片机外围资源、串口和 usb 口两种调试下载接口于一身,完全兼容 atmel 公司的 51

14、 单片机,除此之外还有很多特点,如:无法解密、低功耗、高速、高 可靠、强抗静电、强抗干扰等。 tx 系列单片机开发板可完全作为各种 51 单片机的开发板,用汇编语言或 者 c 语言对其进行编程。当用 stc 公司的单片机时,直接用产品套件附带的串 口线将开发板与计算机串口相连,按照 stc 单片机下载操作教程便可以下载程 序,而且下载速度比起其他下载工具要快的多。本文将使用 tx-1c 开发板完成 数字化电热水器的设计。 第第 2 章章 系统硬件设计系统硬件设计 2.12.1 系统硬件的组成部分系统硬件的组成部分 系统设计硬件原理结构见图 2.1 所示。系统以高性价比的 at89c51 单片机

15、 为核心,由键盘输入、ds18b20 温度采集、数码管显示电路、电源时钟复位电 路、双向可控硅驱动电路 moc3041、双向可控硅 tlc336a 组成加热器控制电 路。 图图 2.12.1 系统设计硬件原理结构系统设计硬件原理结构 2.22.2 系统硬件各部分的简介系统硬件各部分的简介 这里 at89c51 为总控制器。单片机的 p0 口连接 74hc573 锁存器,这样可 以节约单片机端口,即可多次操作 p0 口,使其既能控制数码管的片选,又能控 制数码管的位选,从而节省的单片机的外部接口,扩展了功能。 键盘的输入由 p3 口完成在第 4 章节中会具体介绍如何实现。 时钟复位电路见图 2.

16、2 所示,ret 连接单片机的 reset 接口,主要完成单 片机的复位功能。 图图 2.22.2 时钟复位电路时钟复位电路 温度采集芯片由 ds18b20 芯片完成,ds18b20 的 2 号接口接在单片机的 p22 口,按协议传送以两个字节为一组的温度数据,第 3 章会介绍具体实现方 法。 加热模块见图 2.3 所示,moc3041 芯片的 2 号接口连接单片机的 p22 口。 当需要加热时,p22 接口送出低电平,即可触发加热器工作。 图图 2.32.3 加热模块加热模块 2.32.3 数码管显示数码管显示 2.3.1 数码管简介数码管简介 单片机系统中常用的显示器有: 发光二极管 le

17、d(light emitting diode)显示器、液晶 cd(liquid crystal display)显示器、crt 显示器等。led、lcd 显示器有两种显示结构:段显示 (7 段、米字型等)和点阵显示(58、88 点阵等) 。 使用 led 显示器时,要注意区分这两种不同的接法。为了显示数字或字符, 必须对数字或字符进行编码。七段数码管加上一个小数点,共计 8 段。因此为 led 显示器提供的编码正好是一个字节。本设计采用的 tx-c1 实验板是采用共 阴 led 显示器,根据电路连接图显示十六进制数的编码见表 2.1 所示。 表表 2.12.1 十六进制数的编码十六进制数的编码

18、 十六进制编码数码管显数 值 十六进制编 码 数码管显数 值 十六进制编 码 数码管显数 值 0 x3f00 x7d60 x39c 0 x0610 x0770 x5ed 0 x5b20 x7f80 x79e 0 x4f30 x6f90 x71f 0 x6640 x77a0 x00 无显示 0 x6d50 x7cb 2.3.2 数码管的实现方法数码管的实现方法 数码管的显示由 p0 口完成控制。有两点需要注意,第一点是要哪一个数码 管亮,第二点是亮的数码管显示什么数字。所以数码管有位选和段选之分,位 选在程序中用 wei 表示,单片机上是 p27 端口,即对位选操作时使 p27 呈现 高电平,这

19、时 p0 的八个端口对数码管的操作决定了那几个数码管亮,p0 操作 完成后使 p27 呈现低电平,这样位选就已锁定。段选在程序中由 duan 表示, 单片机上是 p26 端口,与位选相同,操作时使 p26 呈现高电平,这时 p0 的八 个端口对数码管的操作决定了亮的几个数码管显示什么数字,p0 操作完成后使 p26 呈现低电平,这样段选就已锁定。 见图 2.4 所示由于单片机仅仅起到控制的作用,其输出电流十分小,所以 p0 端需要接上拉电阻与 5v 电源,通过电压的变化控制 5v 电源点亮,想要图 中 a 端由电流通过时,即给 p00 一个低电平,触发上拉电阻两端间的电势差, 这样就能促使电流

20、流向 a 点,从而使 a 端对应的 led 灯点亮。 图图 2.42.4 单片机与数码管的硬件连接单片机与数码管的硬件连接 首先选择位选,再选择段选。 uchar code table= 0 x3f,0 x06,0 x5b,0 x4f, 0 x66,0 x6d,0 x7d,0 x07, 0 x7f,0 x6f,0 xbf,0 x86, 0 xdb,0 xcf,0 xe6,0 xed, 0 xfd,0 x87,0 xff,0 xef, 0 x00,0 x08,0 x88; 可以直接设置数码管显示各数字的十六进制,即 p0 口应赋的十六进制,以 便操作。如以上数组,使用时仅仅将需要的数组中的其中一

21、个赋予 p0 口,这样 可以方便直观得使数码管显示需要的数字。 选择位选与选择片选的过程相当快时,显示在人眼中就是一排易于识别的 十进制数字,这就是数码管的动态显示。 2.3.3 锁存器与数码管显示锁存器与数码管显示方法方法 在这里先介绍 74hc573 芯片,这是一个锁存器芯片,连接方法见图 2.5 所 示, p27、p26 分别控制位选和段选的 l 端,例如:当 p27(程序中的全局 变量 wei)赋高电平时,74hc573 输入端口的值将直接输送给 74hc573 芯片的 输出端,当输入端变化时,输出端也变化。p27 赋低电平时, 74hc573 芯片将 记住最近一次 l 端口是高电平时

22、芯片输入端的 8 位,并将其输出,当输入端变 化时,输出端不变化。在这里就可以利用锁存器的特性使 p27 起到控制那个数 码管亮的作用,使 p26 控制数码管亮什么样的数字作用。 图图 2.52.5 74hc57374hc573 芯片的连接芯片的连接 以下数码管显示部分程序。 p0=0 xff; wei=1; p0=srtemp;/wein 打开后 是低电平亮 wei=0; srtemp=_crol_(srtemp,1); p0=0 x00; duan=1; p0=tabledisi; duan=0; delay(1); duan=1; p0=0 x00; duan=0; 要注意的是位选(程序

23、中的 wei 变量) ,位选是低电平时选择该数码管亮。 在显示时容易出现不需要亮的 led 管微微发亮的问题,这是因为所选择的 位选和段选都是通过 p0 赋的值,如果先选择位选的 8 位值,p0 口不还原成 0 x00,就会导致段选打开后,还未赋予段选 p0 口需要的数值之前,这段时间内 p0 口将刚才位选的 8 位值赋予了段选锁存器,这样就会在极短的时间内,一些 不需要的 led 灯点亮,在单片机上就是由 led 灯微微亮的情况,所以在这里 注意每次 p0 对位选赋值以前,都应该保证 p0 口为 0 x00。 2.42.4 键盘输入设计键盘输入设计 2.4.1 键盘输入方法键盘输入方法 本设

24、计中使用的是矩阵式键盘,见图 2.6 所示。 图图 2.62.6 矩阵式键盘矩阵式键盘 s10 到 s19 分别代表数字 0 到 9。s20 代表确认数字,按下后即可确认要输 入数字的某一位。 左侧键盘的引脚由上至下分别是 p30 到 p37,第一行暂时不用,从第二 行开始使用,每一行如 p31 都与 p34、 p35、 p36 、p37,他们是线与的 关系。因此可以如此操作,对图中第二行、第三行、第四行诸行进行扫描。扫 描第一行时 p3 口赋值为 0 xfd,即为 p31 口赋“0”,p3 的其他口赋“1”,当第二 行没有按键按下时 p34、 p35、 p36 、p37 将都是高电平“1”,

25、一旦有按键 按下时,由于线与关系,p34、 p35、 p36 、p37 必定有一个为“0”,它们 之中那一个为“0”依次代表 s10 到 s13 哪个键被按下。依次循环扫描三行即可时 时检测是否有键按下。 2.4.2 键盘输入的抖动与去抖的方法键盘输入的抖动与去抖的方法 在 2.4.1 节中谈到了如何实现键盘的扫描,但是理论与实际还是有一定的差 距,当按下键盘到检测到有电压变化,这段时间在实际中是存在一定的时间误 差的,经过这段时间误差后电压才会达到单片能够检测到的范围,但这期间单 片机很有可能已经完成检测,见图 2.7 所示。 图图 2.72.7 抖动示意图抖动示意图 如果不去除抖动的话,人

26、们手指按下的瞬间单片机已经开始检测,这时电 压还未降到稳定闭合状态所以不能检测到按下,同理不管是按下,还是是松手 都会有这样的情况出现,不利于操作,所以应该加入去抖操作,图中右侧是硬 件去除抖动,除了硬件去抖以外还可以利用软件去抖。 在本设计中采用软件去抖的方法,原理是检测两次,第一次检测到低电平 时延时一段时间,再检测一次,如果还能检测到低电平,则说明确实有键按下。 具体程序如下: while(temp!=0 xf0) delay(5); p3=0 xfd; temp=p3; temp=temp while(temp!=0 xf0) 上述程序是两个 while 循环之间的嵌套,第一个 whi

27、le()语句判断有键按 下后,延时一段时间再进行判断,如果第二次判断也认为由键按下,则可以确 认的确由键盘操作,并不是抖动。具体按下后的操作可以在后一个 while 循环 中书写。 2.52.5 ds18b20ds18b20 温度采集温度采集 2.5.1 ds18b20 技术性能与应用范围技术性能与应用范围 图图 2 2. .8 8 d ds s1 18 8b b2 20 0 的的外外形形及及管管脚脚 图图 ds18b20 是一种可组网数字温度传感器芯片,具有耐磨耐碰,体积小, 使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。 独特的单线接口方式, ds18b20 在与微处理

28、器连接时仅需要一条口线 即可实现微处理器与 ds18b20 的双向通讯。测温范围 55125, 固有测温分辨率 0.5。支持多点组网功能,多个 ds18b20 可以并联在唯 一的三线上,最多只能并联 8 个,如果数量过多,会使供电电源电压过低, 从而造成信号传输的不稳定,实现多点测温。工作电源为 35v/dc。在使 用中不需要任何外围元件,测量结果以912 位数字量方式串行传送。不锈 钢保护管直径 6,适用于 dn1525, dn40dn250 各种介质工业管道和狭 小空间设备测温,标准安装螺纹 m10x1, m12x1.5, g1/2”任选,pvc 电缆 直接出线或德式球型接线盒出线 ,便于

29、与其它电器设备连接。 负压特性:电源极性接反时,芯片不会因发热而烧毁, 但不能正常工 作。ds18b20 内部结构主要由四部分组成: 64 位光刻 rom 、温度传感器、 非挥发的温度报警触发器 th 和 tl、配置寄存器。 ds18b20 的外形及管脚 排列见图 2.8 所示。 该产品适用于冷冻库,粮仓,储罐,电讯机房,电力机房,电缆线槽等 测温和控制领域、轴瓦,缸体,纺机,空调,等狭小空间工业设备测温和控 制、供热/制冷管道热量计量,中央空调分户热能计量和工业领域测温和控制、 汽车空调、冰箱、冷柜、以及中低温干燥箱等。 2.5.2 ds18b20 的初始化与读写操作的初始化与读写操作 1

30、1. . ds18b20 的的初初始始化化 (1) 先将数据线置高电平 “1”; (2) 延时(该时间要求的不是很严格,但是尽可能的短一点); (3) 数据线拉到低电平 “0”; (4) 延时 750 微秒(该时间的时间范围可以从 480 到 960 微秒); (5) 数据线拉到高电平 “1”; (6) 延时等待(如果初始化成功则在 15 到 60 毫秒时间之内产生一 个由 ds18b20 所返回的低电平 “0”。据该状态可以来确定它的存在,但是应 注意不能无限的进行等待,不然会使程序进入死循环,所以要进行超时控制) ; (7) 若 cpu 读到了数据线上的低电平 “0”后,还要做延时,其延时

31、 的时间从发出的高电平算起(第( 5)步的时间算起)最少要 480 微秒; (8) 将数据线再次拉高到高电平 “1”后结束。 ds18b20 的的初始化见图 2.9 所示。 图图 2 2. .9 9 d ds s1 18 8b b2 20 0 的的的的初初始始化化 2 2. . ds18b20 的的写写操操作作 (1) 数据线先置低电平 “0”; (2) 延时确定的时间为 15 微秒; (3) 按从低位到高位的顺序发送字节(一次只发送一位); (4) 延时时间为 45 微秒; (5) 将数据线拉到高电平 ; (6) 重复上(1)到(6)的操作直到所有的字节全部发送完为止 ; (7) 最后将数据

32、线拉高 。 在这里要注意的是( 3),写数据时时 1bit 单独传送,这里有两种情况。 当需要传送“1”时,单片机应该给 ds18b20 芯片的 dq 接口赋低电平, 大约 15 秒以后,将 dq 释放为高电平,延时约 45 微妙即可。 当需要传送“0”时,单片机应该给 ds18b20 芯片的 dq 接口赋低电平, 并且持续拉低最少 60 微妙,然后将 dq 释放为高电平,再延时约 15 秒即 可。 ds18b20 的写操作时序图 见图 2.10 所示。 图图 2 2. .1 10 0 d ds s1 18 8b b2 20 0 的的写写操操作作时时序序图图 3 3. . ds18b20 的的

33、读读操操作作 (1)将数据线拉高 “1”; (2)延时 2 微秒; (3)将数据线拉低 “0”; (4)延时 15 微秒; (5)将数据线拉高 “1”; (6)延时 15 微秒; (7)读数据线的状态得到一个状态位,并进行数据处理; (8)延时 30 微秒; 这里只要按以上操作将状态位的各各bit 按顺序储存好即可 。 ds18b20 的读操作时序图见 图 2.11 所示。 图图 2 2. .1 11 1 d ds s1 18 8b b2 20 0 的的读读操操作作时时序序图图 2.5.3 ds18b20 的指令与格式的指令与格式 ds18b20 温度格式图见图 2.12 所示。 图图 2 2

34、. .1 12 2 d ds s1 18 8b b2 20 0 温温度度格格式式图图 这是 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 温度传

35、感器的存储器 ds18b20 温度传感器的内部存储器包括 一个高速暂存 ram 和一个非易失性的可电擦除的 eepram,后者存放高温 度和低温度触发器 th、tl 和结构寄存器。配置寄存器, 该字节各位的意 义见表 2.2 所示。 表表 2.22.2 配配置置寄寄存存器器结结构构 温度数据输出(二进制)数据输出(十六进制) +125 0000 0111 1101 000007d0 +85 0000 0101 0101 00000550 +25.0625 0000 0001 1001 00010191 +10.125 0000 0000 1010 001000a2 +0.5 0000 0000

36、 0000 10000008 0 0000 0000 0000 00000000 -0.5 1111 1111 1111 1000fff8 -10.125 1111 1111 0101 1110ff5e -25.0625 1111 1110 0110 1111fe6f -55 1111 1100 1001 0000fc90 高速暂存存储器由 9 个字节组成。 其分配见表 2.3 所示,当温度转换 命令发布后,经转换所得的温度值以二字节补码形式存放在高速暂存存储器 的第 0 和第 1 个字节。单片 机可通过单线接口读到该数据,读取时低位在前, 高位在后。对应的温度计算:当符号位 s=0 时,直接

37、将二进制位转换为十 进制;当 s=1 时,先将补码变为原码,再计算十进制值。第九个字节是冗余 检验字节。 表表 2 2. .3 3 d ds s1 18 8b b2 20 0 暂暂存存寄寄存存器器分分布布 寄存器内容字节地址 温度值低位 (ls byte) 0 温度值高位 (ms byte) 1 高温限值(th) 2 低温限值(tl) 3 配置寄存器 4 保留 5 保留 6 保留 7 crc 校验值 8 根据 ds18b20 的通讯协议,主机(单片机)控制ds18b20 完成温度 转换必须经过三个步骤:每一次读写之前都要对ds18b20 进行复位操作, 复位成功后发送一条 rom 指令,最后发

38、送 ram 指令,这样才能对 ds18b20 进行预定的操作。复位要求主 cpu 将数据线下拉 500 微秒,然后 释放,当 ds18b20 收到信号后等待 1660 微秒左右,后发出 60240 微 秒的存在低脉冲,主 cpu 收到此信号表示复位成功。 rom 指令表见表 2.4 所示,ram 指令表见表 2.5 所示。 表表 2 2. .4 4 r ro om m 指指令令表表 指 令约定代码功 能 读 rom 33h 读 ds1820 温度传感器 rom 中的编码(即 64 位地址) 符合 rom 55h 发出此命令之后,接着发出 64 位 rom 编码,访问单总线 上与该编码相对应的

39、ds1820 使之作出响应,为下一步对 该 ds1820 的读写作准备。 搜索 rom 0foh 用于确定挂接在同一总线上 ds1820 的个数和识别 64 位 rom 地址。为操作各器件作好准备。 跳过 rom 0cch 忽略 64 位 rom 地址,直接向 ds1820 发温度变换命令。 适用于单片工作。 警告搜索命令 0ech 执行后只有温度超过设定值上限或下限的片子才做出响应 。 表表 2 2. .5 5 r ra am m 指指令令表表 指 令约定代码功 能 温度变换 44h 启动 ds1820 进行温度转换,12 位转换时最长为 750ms( 9 位为 93.75ms)。结果存入内

40、部 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 寄生电源供电方式寄生电源供电方式 ds18b2

41、0 测温系统具有测温系统简单、测温精度高、连接方便、占用口 线少等优点。下面就是 ds18b20 几个不同应用方式下的 测温电路图: ds18b20 寄生电源供电方式电路图 ,见图 2.13 所示,在寄生电源供电 方式下,ds18b20 从单线信号线上汲取能量:在信号线dq 处于高电平期 间把能量储存在内部电容里,在信号线处于低电平期间消耗电容上的电能工 作,直到高电平到来再给寄生电源(电容)充电。 独特的寄生电源方式有三个好处: 1. 进行远距离测温时,无需本地电源 ; 2. 可以在没有常规电源的条件下读取rom; 3. 电路更加简洁,仅用一根 i/o 口实现测温。 要想使 ds18b20

42、进行精确的温度转换, i/o 线必须保证在温度转换期 间提供足够的能量,由于每个 ds18b20 在温度转换期间工作电流达到 1ma,当几个温度传感器挂在同一根 i/o 线上进行多点测温时,只靠 4.7k 上拉电阻就无法提供足够的能量,会造成无法转换温度或温度误差极大。 因此,这种电路只适应于单一温度传感器测温情况下使用,不适宜采用 供电系统中。并且工作电源 vcc 必须保证在 5v,当电源电压下降时,寄 生电源能够汲取的能量也降低,会使温度误差变大。 图图 2 2. .1 13 3 d ds s1 18 8b b2 20 0 寄寄生生电电源源供供电电方方式式 2.5.5 ds18b20 改进

43、的寄生电源供电方式改进的寄生电源供电方式 ds18b20 寄生电源强上拉供电方式电路图 ,改进的寄生电源供电方式 见图 2.14 所示,为了使 ds18b20 在动态转换周期中获得足够的电流供应, 当进行温度转换或拷贝到 e2 存储器操作时,用 mosfet 把 i/o 线直接拉 到 vcc 就可提供足够的电流,在发出任何涉及到拷贝到e2 存储器或启动 温度转换的指令后,必须在最多 10s 内把 i/o 线转换到强上拉状态。在强 上拉方式下可以解决电流供应不走的问题,因此也适合于多点测温应用,缺 点就是要多占用一根 i/o 口线进行强上拉切换。 图图 2 2. .1 14 4 改改进进的的寄寄

44、生生电电源源供供电电方方式式 注意:在见图 2.13 所示、见图 2.14 所示寄生电源供电方式中, ds18b20 的 vdd 引脚必须接地 。 2.5.6 ds18b20 外部电源供电方式外部电源供电方式 ds18b20 的外部电源供电方式 见图 2.15 所示,在外部电源供电方式下, ds18b20 工作电源由 vdd 引脚接入,此时 i/o 线不需要强上拉,不存在电 源电流不足的问题,可以保证 转换精度, 同时在总线上理论可以挂接任意 多。ds18b20 传感器,组成多点测温系统。注意:在外部供电的方式下, ds18b20 的 gnd 引脚不能悬空 ,否则不能转换温度,读取的温度总是

45、85。 图图 2 2. .1 15 5 外外部部供供电电方方式式单单点点测测温温电电路路 在本次设计中 采用外部电源供电方式 ,连接方法见图 2.16 所示。 图图 2 2. .1 16 6 设设计计中中采采用用的的 测测温温电电路路 直接将 ds18b20 的 i/o 口接在单片机的 p22 上,这样在硬件方面就可以 进行数据交流,从而达到温度数据传输的目的。 2.5.7 ds18b20 寄生电源供电方式寄生电源供电方式 外部供电方式的多点测温电路图见图2.17 所示,外部电源供电方式是 ds18b20 最佳的工作方式,工作稳定可靠,抗干扰能力强,而且电路也比较 简单,可以开发出稳定可靠的多

46、点温度监控系统。站长推荐大家在开发中使 用外部电源供电方式,毕竟比寄生电源方式只多接一根vcc 引线。在外接 电源方式下,可以充分发挥 ds18b20 宽电源电压范围的优点,即使电源电 压 vcc 降到 3v 时,依然能够保证温度量精度。 图图 2 2. .1 17 7 外外部部供供电电方方式式的的多多点点测测温温电电路路图图 第第 3 章章 系统软件设计系统软件设计 3.13.1 键盘输入的程序键盘输入的程序 while(temp!=0 xf0) delay(5); p3=0 xfd; temp=p3; temp=temp while(temp!=0 xf0) temp=p3; switch

47、(temp) case 0 xed:num=0; break; case 0 xdd:num=1; break; case 0 xbd:num=2; break; case 0 x7d:num=3; break; while(temp!=0 xf0) temp=p3; temp=temp/*0000 在这里使用了_crol_函数,所以头文件中要增加#include,这里包 括去抖和松手检测。经过检测以后通过不同的 temp 值,使 num 被赋予相应的 数值,这样 num 就是要输入的一个数字。 3.23.2 ds18b20ds18b20 温度传感器设计温度传感器设计 连接好电路以后,就可以开

48、始设计 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-; 以下两个子函数为读取的数据时用到的。可以

49、在温度采集读取时调用。 bit readbit()/读取一个 bit 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(b8) a=readbit(); date=(a1); b+; ret

50、urn date; 以下为写入命令程序。用于操控 ds18b20。 void writeor(uchar order)/写入命令 uint b; uchar a; bit bit2; b=0; for(a=0;a=1; if(bit2)/写入 1 ds=0; b+,b+; ds=1; for(b=0;b8;b+); else/0 ds=0; for(b=0;b8;b+); ds=1; b+;b+; 当以上程序书写完成后,准备工作基本完成。现在只要调用这些函数,来 操控 ds18b20 使其能够按协议规定将温度数据传送给单片机。软件实施方法如 下: void changetemp()/温度转变函

51、数 dsstart(); dswait(); delay(1); writeor(0 xcc);/ 跳过读序号列号的操作 writeor(0 x44);/ 启动温度转换 delay(1); uint gettemp()/获取温度 float tt; int temp; uchar geta,getb; dsstart(); dswait(); delay(1); writeor(0 xcc); writeor(0 xbe);/读取温度命令 delay(2); geta=readbyte();/读取两个字节 getb=readbyte(); temp=getb; temp 0 ? 0.5 : -

52、0.5);/,变大十倍且 四舍五入 return(temp); 以上两个程序流程为,changetemp()子函数中先初始化 ds18b20,芯片应 答以后写入两个以字节为一个单位的命令,0 xcc 与 0 x44 它们的作用分别为跳 过读序号列号的操作和启动温度转换。然后温度获取 gettemp()子函数完成。在 gettemp()子函数中首先也是初始化 ds18b20、等待应答,写入命令 0 xcc 跳过读 序号列号的操作和 0 xbe 读取温度命令。使用 readbyte()读取两个字节的数据, 分别赋予 geta、getb 两个字符型变量,再将 getb 赋予 temp(temp 是一

53、个整型变 量拥有两个字节的容量),这样 temp 的低 8 为就是 getb 中的值了。temp=8 的意义是 temp=temp 0 ? 0.5 : -0.5)这句话是先将 tt 由一个最高位为十位保留小数点后一位的数扩大了 十倍,变为了一个最高位为百位的三位数,而后面加上的十一个四舍五入的赋 值语句,也就相当是一个 if 语句,c 语言是任何精度高的变量变为精度低的变 量时,都会失去一定的精度,而且是向下取整,例如在这里,如果 tt 是正温度 的话变大 10 倍以后,小数点后一位是无论是 1 还是 9,都默认舍去,如果要对 正数的 tt 进行四舍五入应该先给 tt 加上 0.5,再将它赋给

54、精度较低的 temp,这 样就可以有四舍五入的功能,而这里没有这么简单,这个 if 语句的还要考虑 tt 为负值的情况下的操作,如果 temp 为负值,tt 变大 10 倍以后还要减去 0.5,这 样就能够完成 tt 为负值情况下的四舍五入。 3.33.3 主函数的分析主函数的分析 首先给出主函数: void main() tmod=0 x01; th0=(65536-46000)/256; tl0=(65536-46000)%256; ea=1; et0=1; tr0=1; zd=0; num=21;aaa=0;bbb=0; num1=21;num2=21;num3=21; while(1)

55、 uint a; uchar b; changetemp(); a=gettemp(); b=scanff(); numy=gettemp(); display(a,b); 这里的 aaa 用于控制是否确定输入的一个数字是需要的数字,bbb 用于标记 已经输入到了三个数字的第几个数字。 主函数首先将所用到的全局变量赋值,然后进入大循环首先进入温度转换 函数,使 ds18b20 启动温度转换,然后获取温度将两个字节的数值赋给 a,而 将输入的温度赋予 b ,再由 display(a,b)子函数输出所有的值。 3.43.4 显示函数的分析显示函数的分析 以下是 display()函数的具体内容。

56、void display(uint a,uchar b) uchar i,temp,srtemp,dis4; uint dda; dda=abs(a); numx=dda/1000; num4=dda%1000/100; num5=dda%100/10; num6=dda%10; dis0=numx; dis1=num4; dis2=num5; dis3=num6; dis2+=10;/num5 小数点 if(dis0=0)/如果百位和十位都为 0 不显示 if(a0)/负值 后面加个小数点 dis3+=10; else if(dis0!=0)/超过 100 前面加小数点 dis1=dis1+

57、10; temp=0 xfb; for(i=1;i4;i+) p0=0 xff; wei=1; temp=_crol_(temp,1); p0=temp; wei=0; p0=0; duan=1; p0=tabledisi; duan=0; delay(3); duan=1; p0=0 x00; duan=0; if(aaa=1 switch(bbb) case 0: dis1=b; num1=b; dis2=num2; dis3=num3; if(dis2=21) dis2+; else dis2+=10; srtemp=0 xfe; for(i=1;i4;i+) p0=0 xff; wei

58、=1; p0=srtemp;/wein 打开后 是低电平亮 wei=0;/ srtemp=_crol_(srtemp,1); p0=0 x00; duan=1; p0=tabledisi; duan=0; delay(1); duan=1; p0=0 x00; duan=0; break; case 1: dis1=num1; dis2=b; num2=b; dis3=num3; if(dis2=21) dis2+; else dis2+=10; srtemp=0 xfe; for(i=1;i4;i+) p0=0 xff; wei=1; p0=srtemp;/wein 打开后 是低电平亮 we

59、i=0;/ srtemp=_crol_(srtemp,1); p0=0 x00; duan=1; p0=tabledisi; duan=0; delay(1); duan=1; p0=0 x00; duan=0; aaa=0; break; case 2: dis1=num1; dis2=num2; dis3=b; num3=b; if(dis2=21) dis2+; else dis2+=10; srtemp=0 xfe; for(i=1;i4;i+) p0=0 xff; wei=1; p0=srtemp;/wein 打开后 是低电平亮 wei=0;/ srtemp=_crol_(srtem

60、p,1); p0=0 x00; duan=1; p0=tabledisi; duan=0; delay(1); duan=1; p0=0 x00; duan=0; aaa=0; break; case 3: dis1=num1; dis2=num2; dis3=num3; if(dis2=21) dis2+; else dis2+=10; srtemp=0 xfe; for(i=1;i4;i+) p0=0 xff; wei=1; p0=srtemp;/wein 打开后 是低电平亮 wei=0;/ srtemp=_crol_(srtemp,1); p0=0 x00; duan=1; p0=tab

温馨提示

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

评论

0/150

提交评论