毕业论文-移专-陈龙-修改2 - 图文

更新时间:2024-04-13 01:10:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

武汉工程大学邮电与信息工程学院

毕业设计(论文)

基于51单片机的家用电热水器设计 Design of Household Electric Water Heater

Based on the 51-series singlechip

学生姓名 陈龙 学 号 0845530104 专业班级 移动通信技术0801 指导教师 来婷

2011年5月

武汉工程大学邮电与信息工程学院毕业设计(论文)

作者声明

本人声明所呈交的论文是我个人在导师指导下进行的研究工作及取得的研究成果,除了文中特别加以标注的地方外,没有任何剽窃、抄袭、造假等违反学术道德、学术规范的行为,也没有侵犯任何其他人或组织的科研成果及专利。与我一同工作的同志对本研究所做的任何贡献均已在论文中作了明确的说明并表示了谢意。如本毕业设计(论文)引起的法律结果完全由本人承担。

毕业设计(论文)成果归武汉工程大学邮电与信息工程学院所有。 特此声明。

作者专业: 作者学号:

作者签名:

____年___月___日

武汉工程大学邮电与信息工程学院毕业设计(论文)

摘 要

随着社会的发展,人类科技的进步,各行各业都在使自己的产品智能化、数字化,因老式的热水器使用煤气或天然气对水进行燃烧加热,用手动的方式调节温度,不仅不能够精确的确定使用者需要的水温,而且还存在一定的危险性。

电热水器是一种可供浴室、洗手间及厨房使用的家用电器,随着人们生活质量的提高,现代的家用电热水器已经摒弃了以前的做法,而采用一种更加精确、安全的实施方案。

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.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

1

武汉工程大学邮电与信息工程学院毕业设计(论文)

第4章 功能简介与成品图片 ................................................................................... 35

4.1 智能热水器具的功能 ........................................................................... 35 4.2 成品图片 ............................................................................................... 35

第5章 总结与展望 ................................................................................................... 38 附录 程序 ................................................................................................................... 41

2

武汉工程大学邮电与信息工程学院毕业设计(论文)

第1章 绪论

单片机是一种与我们生活息息相关的控制器,它存在于许多地方,例如:电子手表、掌上游戏机、数码相机、录音笔、电视机遥控器等等。单片机主要由中央处理器、内存、输入/输出设备组成,它就好像是一台小型电脑,它能够执行人们对它编写的程序,从而发出各种不同的控制命令,与外部电路结合后,便可以完成各种各样的功能。通过单片机人们的生活将会变得更加方便、快捷。

1.1 家用电热水器的现状

我们的生活电热水器是一种可供浴室、洗手间及厨房使用,按照人们的需要的温度,提供温水的家用电器。市场上传统的机械式电热水器控制精度低、可靠性差,甚至存在一定的危险隐患。随着社会的发展、人们生活质量的提高,人们对电热水器的要求越来越趋向于智能化和数字化,这种老式而简单的电热水器已经不能够满足人们的需要了。而智能化家用电热水器正是适应现代化智能家用电器趋势而出现。它能提供用户方便快捷的数字化输入方式,并且能精确的采集和控制环境中的水温,将其提供给用户,因此备受人们的关注。

1.2 TX-1C单片机实验开发板简介

XT-1C单片机开发板是哈尔滨市天祥电子综合多年开发经验,在原TX-1B基础上,经过精心设计开发出的多功能51单片机开发平台。该开发板集常用的单片机外围资源、串口和USB口两种调试下载接口于一身,完全兼容ATMEL公司的51单片机,除此之外还有很多特点,如:无法解密、低功耗、高速、高可靠、强抗静电、强抗干扰等。

TX系列单片机开发板可完全作为各种51单片机的开发板,用汇编语言或者C语言对其进行编程。当用STC公司的单片机时,直接用产品套件附带的串口线将开发板与计算机串口相连,按照STC单片机下载操作教程便可以下载程序,而且下载速度比起其他下载工具要快的多。本文将使用TX-1C开发板完成数字化电热水器的设计。

1

武汉工程大学邮电与信息工程学院毕业设计(论文)

第2章 系统硬件设计

2.1 系统硬件的组成部分

系统设计硬件原理结构见图2.1所示。系统以高性价比的AT89C51单片机为核心,由键盘输入、DS18B20温度采集、数码管显示电路、电源时钟复位电路、双向可控硅驱动电路MOC3041、双向可控硅TLC336A组成加热器控制电路。

图2.1 系统设计硬件原理结构

2.2 系统硬件各部分的简介

这里AT89C51为总控制器。单片机的P0口连接74HC573锁存器,这样可以节约单片机端口,即可多次操作P0口,使其既能控制数码管的片选,又能控制数码管的位选,从而节省的单片机的外部接口,扩展了功能。

键盘的输入由P3口完成在第4章节中会具体介绍如何实现。

时钟复位电路见图2.2所示,RET连接单片机的RESET接口,主要完成单片机的复位功能。

2

武汉工程大学邮电与信息工程学院毕业设计(论文)

图2.2 时钟复位电路

温度采集芯片由DS18B20芯片完成,DS18B20的2号接口接在单片机的P2^2口,按协议传送以两个字节为一组的温度数据,第3章会介绍具体实现方法。

加热模块见图2.3所示,MOC3041芯片的2号接口连接单片机的P2^2口。当需要加热时,P2^2接口送出低电平,即可触发加热器工作。

图2.3 加热模块

2.3 数码管显示

2.3.1 数码管简介

单片机系统中常用的显示器有:

发光二极管LED(Light Emitting Diode)显示器、液晶CD(Liquid Crystal Display)显示器、CRT显示器等。LED、LCD显示器有两种显示结构:段显示(7段、米字型等)和点阵显示(5×8、8×8点阵等)。

使用LED显示器时,要注意区分这两种不同的接法。为了显示数字或字符,

3

武汉工程大学邮电与信息工程学院毕业设计(论文)

必须对数字或字符进行编码。七段数码管加上一个小数点,共计8段。因此为LED显示器提供的编码正好是一个字节。本设计采用的TX-C1实验板是采用共阴LED显示器,根据电路连接图显示十六进制数的编码见表2.1所示。

表2.1 十六进制数的编码

十六进制编码 0x3f 0x06 0x5b 0x4f 0x66 0x6d 数码管显数值 0 1 2 3 4 5 十六进制编码 0x7d 0x07 0x7f 0x6f 0x77 0x7c 数码管显数值 6 7 8 9 A B 十六进制编码 0x39 0x5e 0x79 0x71 0x00 数码管显数值 C D E F 无显示

2.3.2 数码管的实现方法

数码管的显示由P0口完成控制。有两点需要注意,第一点是要哪一个数码管亮,第二点是亮的数码管显示什么数字。所以数码管有位选和段选之分,位选在程序中用wei表示,单片机上是P2^7端口,即对位选操作时使P2^7呈现高电平,这时P0的八个端口对数码管的操作决定了那几个数码管亮,P0操作完成后使P2^7呈现低电平,这样位选就已锁定。段选在程序中由duan表示,单片机上是P2^6端口,与位选相同,操作时使P2^6呈现高电平,这时P0的八个端口对数码管的操作决定了亮的几个数码管显示什么数字,P0操作完成后使P2^6呈现低电平,这样段选就已锁定。

见图2.4所示由于单片机仅仅起到控制的作用,其输出电流十分小,所以P0端需要接上拉电阻与5V电源,通过电压的变化控制5V电源点亮,想要图中a端由电流通过时,即给P0^0一个低电平,触发上拉电阻两端间的电势差,这样

4

武汉工程大学邮电与信息工程学院毕业设计(论文)

就能促使电流流向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口,这样可以方便直观得使数码管显示需要的数字。

选择位选与选择片选的过程相当快时,显示在人眼中就是一排易于识别的十进制数字,这就是数码管的动态显示。

5

武汉工程大学邮电与信息工程学院毕业设计(论文)

2.3.3 锁存器与数码管显示方法

在这里先介绍74HC573芯片,这是一个锁存器芯片,连接方法见图2.5所示, P2^7、P2^6分别控制位选和段选的L端,例如:当P2^7(程序中的全局变量wei)赋高电平时,74HC573输入端口的值将直接输送给74HC573芯片的输出端,当输入端变化时,输出端也变化。P2^7赋低电平时, 74HC573芯片将记住最近一次L端口是高电平时芯片输入端的8位,并将其输出,当输入端变化时,输出端不变化。在这里就可以利用锁存器的特性使P2^7起到控制那个数码管亮的作用,使P2^6控制数码管亮什么样的数字作用。

图2.5 74HC573芯片的连接

以下数码管显示部分程序。 P0=0xff;

wei=1;

P0=srtemp;//wein打开后 是低电平亮 wei=0;

srtemp=_crol_(srtemp,1); P0=0x00; duan=1; P0=table[dis[i]]; duan=0; delay(1);

6

武汉工程大学邮电与信息工程学院毕业设计(论文)

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代表确认数字,按下后即可确认要输入数字的某一位。

左侧键盘的引脚由上至下分别是P3^0到P3^7,第一行暂时不用,从第二行开始使用,每一行如P3^1都与P3^4、 P3^5、 P3^6 、P3^7,他们是线与的关

7

武汉工程大学邮电与信息工程学院毕业设计(论文)

系。因此可以如此操作,对图中第二行、第三行、第四行诸行进行扫描。扫描第一行时P3口赋值为0xfd,即为P3^1口赋“0”,P3的其他口赋“1”,当第二行没有按键按下时P3^4、 P3^5、 P3^6 、P3^7将都是高电平“1”,一旦有按键按下时,由于线与关系,P3^4、 P3^5、 P3^6 、P3^7必定有一个为“0”,它们之中那一个为“0”依次代表S10到S13哪个键被按下。依次循环扫描三行即可时时检测是否有键按下。

2.4.2 键盘输入的抖动与去抖的方法

在2.4.1节中谈到了如何实现键盘的扫描,但是理论与实际还是有一定的差距,当按下键盘到检测到有电压变化,这段时间在实际中是存在一定的时间误差的,经过这段时间误差后电压才会达到单片能够检测到的范围,但这期间单片机很有可能已经完成检测,见图2.7所示。

图2.7 抖动示意图

如果不去除抖动的话,人们手指按下的瞬间单片机已经开始检测,这时电压还未降到稳定闭合状态所以不能检测到按下,同理不管是按下,还是是松手都会有这样的情况出现,不利于操作,所以应该加入去抖操作,图中右侧是硬件去除抖动,除了硬件去抖以外还可以利用软件去抖。

在本设计中采用软件去抖的方法,原理是检测两次,第一次检测到低电平时延时一段时间,再检测一次,如果还能检测到低电平,则说明确实有键按下。具

8

武汉工程大学邮电与信息工程学院毕业设计(论文)

体程序如下: while(temp!=0xf0) {

delay(5); P3=0xfd; temp=P3; temp=temp&0xf0; while(temp!=0xf0)

上述程序是两个while循环之间的嵌套,第一个while()语句判断有键按下后,延时一段时间再进行判断,如果第二次判断也认为由键按下,则可以确认的确由键盘操作,并不是抖动。具体按下后的操作可以在后一个while循环中书写。

2.5 DS18B20温度采集

2.5.1 DS18B20技术性能与应用范围

图2.8 DS18B20的外形及管脚图

DS18B20是一种可组网数字温度传感器芯片,具有耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。

9

武汉工程大学邮电与信息工程学院毕业设计(论文)

独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。测温范围 -55℃~+125℃,固有测温分辨率0.5℃。支持多点组网功能,多个DS18B20可以并联在唯一的三线上,最多只能并联8个,如果数量过多,会使供电电源电压过低,从而造成信号传输的不稳定,实现多点测温。工作电源为 3~5V/DC。在使用中不需要任何外围元件,测量结果以9~12位数字量方式串行传送。不锈钢保护管直径Φ6,适用于DN15~25, DN40~DN250各种介质工业管道和狭小空间设备测温,标准安装螺纹 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微秒;

(8) 将数据线再次拉高到高电平“1”后结束。

10

武汉工程大学邮电与信息工程学院毕业设计(论文)

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所示。

11

武汉工程大学邮电与信息工程学院毕业设计(论文)

图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所示。

图2.12 DS18B20温度格式图

这是12位转化后得到的12位数据,存储在DS18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于0,这5位

12

武汉工程大学邮电与信息工程学院毕业设计(论文)

为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℃ +85℃ +25.0625℃ +10.125℃ +0.5℃ 0℃ -0.5℃ -10.125℃ -25.0625℃ -55℃ 数据输出(二进制) 0000 0111 1101 0000 0000 0101 0101 0000 0000 0001 1001 0001 0000 0000 1010 0010 0000 0000 0000 1000 0000 0000 0000 0000 1111 1111 1111 1000 1111 1111 0101 1110 1111 1110 0110 1111 1111 1100 1001 0000 数据输出(十六进制) 07D0 0550 0191 00A2 0008 0000 FFF8 FF5E FE6F FC90 高速暂存存储器由9个字节组成。其分配见表2.3所示,当温度转换命令发布后,经转换所得的温度值以二字节补码形式存放在高速暂存存储器的第0和第1个字节。单片机可通过单线接口读到该数据,读取时低位在前,高位在后。对应的温度计算:当符号位S=0时,直接将二进制位转换为十进制;当S=1时,先将补码变为原码,再计算十进制值。第九个字节是冗余检验字节。 表2.3 DS18B20暂存寄存器分布 寄存器内容 13

字节地址 武汉工程大学邮电与信息工程学院毕业设计(论文)

温度值低位 (LS Byte) 温度值高位 (MS Byte) 高温限值(TH) 低温限值(TL) 配置寄存器 保留 保留 保留 CRC校验值 0 1 2 3 4 5 6 7 8

根据DS18B20的通讯协议,主机(单片机)控制DS18B20完成温度转换必须经过三个步骤:每一次读写之前都要对DS18B20进行复位操作,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。复位要求主CPU将数据线下拉500微秒,然后释放,当DS18B20收到信号后等待16~60微秒左右,后发出60~240微秒的存在低脉冲,主CPU收到此信号表示复位成功。 ROM指令表见表2.4所示,RAM指令表见表2.5所示。

14

武汉工程大学邮电与信息工程学院毕业设计(论文)

表2.4 ROM指令表 指 令 读ROM 符合ROM 约定代码 33H 55H 功 能 读DS1820温度传感器ROM中的编码(即64位地址) 发出此命令之后,接着发出 64 位 ROM 编码,访问单总线上与该编码相对应的 DS1820 使之作出响应,为下一步对该 DS1820 的读写作准备。 搜索ROM 0FOH 用于确定挂接在同一总线上 DS1820 的个数和识别 64 位 ROM 地址。为操作各器件作好准备。 忽略 64 位 ROM 地址,直接向 DS1820 发温度变换命令。适用于单片工作。 执行后只有温度超过设定值上限或下限的片子才做出响应。 跳过ROM 0CCH 警告搜索命令 0ECH 表2.5 RAM指令表 指 令 温度变换 约定代码 44H 功 能 启动DS1820进行温度转换,12位转换时最长为750ms(9位为93.75ms)。结果存入内部9字节RAM中。 读内部RAM中9字节的内容 发出向内部RAM的3、4字节写上、下限温度数据命令,紧跟该命令之后,是传送两字节的数据。 将RAM中第3 、4字节的内容复制到EEPROM中。 将EEPROM中内容恢复到RAM中的第3 、4字节。 读DS1820的供电模式。寄生供电时DS1820发送“ 0 ”,外接电源供电 DS1820发送“ 1 ”。 读暂存器 写暂存器 0BEH 4EH 复制暂存器 重调 EEPROM 读供电方式 48H 0B8H 0B4H

2.5.4 DS18B20寄生电源供电方式

DS18B20测温系统具有测温系统简单、测温精度高、连接方便、占用口线少等优点。下面就是DS18B20几个不同应用方式下的 测温电路图:

15

武汉工程大学邮电与信息工程学院毕业设计(论文)

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存储器或启动温度转换的指令后,必须在最多10μS内把I/O线转换到强上拉状态。在强上拉

16

武汉工程大学邮电与信息工程学院毕业设计(论文)

方式下可以解决电流供应不走的问题,因此也适合于多点测温应用,缺点就是要多占用一根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℃。

17

武汉工程大学邮电与信息工程学院毕业设计(论文)

图2.15 外部供电方式单点测温电路

在本次设计中采用外部电源供电方式,连接方法见图2.16所示。

图2.16 设计中采用的测温电路

直接将DS18B20的I/O口接在单片机的P2^2上,这样在硬件方面就可以进行数据交流,从而达到温度数据传输的目的。 2.5.7 DS18B20寄生电源供电方式

外部供电方式的多点测温电路图见图2.17所示,外部电源供电方式是DS18B20最佳的工作方式,工作稳定可靠,抗干扰能力强,而且电路也比较简单,可以开发出稳定可靠的多点温度监控系统。站长推荐大家在开发中使用外部电源供电方式,毕竟比寄生电源方式只多接一根VCC引线。在外接电源方式下,可以充分发挥DS18B20宽电源电压范围的优点,即使电源

18

武汉工程大学邮电与信息工程学院毕业设计(论文)

电压VCC降到3V时,依然能够保证温度量精度。

图2.17 外部供电方式的多点测温电路图

19

武汉工程大学邮电与信息工程学院毕业设计(论文)

第3章 系统软件设计

3.1 键盘输入的程序

while(temp!=0xf0) {

delay(5); P3=0xfd; temp=P3; temp=temp&0xf0; while(temp!=0xf0) {

temp=P3; switch(temp) { }

while(temp!=0xf0) { }

temp=P3;

temp=temp&0xf0;//****0000 case 0xed:num=0;

break;

case 0xdd:num=1;

break;

case 0xbd:num=2;

break;

case 0x7d:num=3;

break;

20

武汉工程大学邮电与信息工程学院毕业设计(论文)

}

在这里使用了_crol_函数,所以头文件中要增加#include,这里包括去抖和松手检测。经过检测以后通过不同的temp值,使num被赋予相应的数值,这样num就是要输入的一个数字。

3.2 DS18B20温度传感器设计

连接好电路以后,就可以开始设计DS18B20的软件环节。首先要初始化DS18B20以下为初始化程序。

void dsstart() {

unsigned int i; ds=0;

i=100; //拉低约800us, 符合协议要求的480us以上 while(i>0) i--;

ds=1; //产生一个上升沿, 进入等待应答状态 }

然后延时等待,回应。如以下子函数。 void dswait() {

unsigned int i;

while(ds); //等待应答信号 i=4;

while(i>0) i--;

while(~ds); //检测到应答脉冲 i=4;

while(i>0) i--; }

以下两个子函数为读取的数据时用到的。可以在温度采集读取时调用。 bit readbit()//读取一个bit

21

武汉工程大学邮电与信息工程学院毕业设计(论文)

{

unsigned int i; bit b; ds=0;

i++; //延时约8us, 符合协议要求至少保持1us ds=1; i++;

i++; //延时约16us, 符合协议要求的至少延时15us以上 b=ds;

i=8;

while(i>0) i--; //延时约64us, 符合读时隙不低于60us要求 return b; }

uchar readbyte()//读取一个字节 { uint b; }

以下为写入命令程序。用于操控DS18B20。 void writeor(uchar order)//写入命令 {

uint b;

22

uchar date,a; b=0;date=0; while(b<8) { }

return date;

a=readbit();

date=(a<<7)|(date>>1); b++;

武汉工程大学邮电与信息工程学院毕业设计(论文)

}

uchar a; bit bit2; b=0;

for(a=0;a<8;a++) { }

bit2=order&0x01; order>>=1; if(bit2)//写入1 { } else//0 { }

ds=0;

for(b=0;b<8;b++); ds=1; b++;b++; ds=0; b++,b++; ds=1;

for(b=0;b<8;b++);

当以上程序书写完成后,准备工作基本完成。现在只要调用这些函数,来操控DS18B20使其能够按协议规定将温度数据传送给单片机。软件实施方法如下:

void changetemp()//温度转变函数 {

dsstart(); dswait(); delay(1);

23

武汉工程大学邮电与信息工程学院毕业设计(论文)

}

writeor(0xcc);// 跳过读序号列号的操作 writeor(0x44);// 启动温度转换 delay(1);

uint gettemp()//获取温度 { }

以上两个程序流程为,changetemp()子函数中先初始化DS18B20,芯片应答以后写入两个以字节为一个单位的命令,0xcc与0x44它们的作用分别为跳过读序号列号的操作和启动温度转换。然后温度获取gettemp()子函数完成。在gettemp()子函数中首先也是初始化DS18B20、等待应答,写入命令0xcc跳过读序号列号的操作和0xbe读取温度命令。使用readbyte()读取两个字节的数据,分

float tt; int temp; uchar geta,getb; dsstart(); dswait(); delay(1); writeor(0xcc);

writeor(0xbe);//读取温度命令 delay(2);

geta=readbyte();//读取两个字节 getb=readbyte(); temp=getb;

temp<<=8;//左移8位 temp=temp|geta;

tt=temp*0.0625;//将temp中的数转化成实际的温度值 temp=tt*10+(temp > 0 ? 0.5 : -0.5);//,变大十倍且 四舍五入 return(temp);

24

武汉工程大学邮电与信息工程学院毕业设计(论文)

别赋予geta、getb两个字符型变量,再将getb赋予temp(temp是一个整型变量拥有两个字节的容量),这样temp的低8为就是getb中的值了。temp<<=8的意义是temp=temp<<8,所以temp的低8位将变成temp中的高8位,而C语言规定低8移位操作后不足的位数由0补上,这时的目的就是要将geta中的数据赋予temp中的低8位,只需要将temp按位与上geta,geta中位为1与上temp中低8位中的0就是1,而geta中位为0与temp中低8位的0相与就是0,这样就将geta中的值赋给了temp的低8位。

现在已获得了温度的数据,还要通过软件计算出具体传送数据代表的温度值,在前面已经谈到数据中的1就代表了0.0625摄氏度。直接将temp值乘0.0625就是需要的温度,temp乘以0.0625后的值赋予tt ,temp=tt*10+(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)%6; EA=1; ET0=1;

25

武汉工程大学邮电与信息工程学院毕业设计(论文)

}

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)子函数输出所有的值。

3.4 显示函数的分析

以下是display()函数的具体内容。 void display(uint a,uchar b) {

uchar i,temp,srtemp,dis[4]; uint dda; dda=abs(a); numx=dda/1000; num4=dda00/100;

26

武汉工程大学邮电与信息工程学院毕业设计(论文)

num5=dda0/10; num6=dda; dis[0]=numx; dis[1]=num4; dis[2]=num5; dis[3]=num6;

dis[2]+=10;//num5小数点 if((dis[0]==0)&&(dis[1]==0))

dis[1]=20;//如果百位和十位都为0 不显示

if(a<0)//负值 后面加个小数点

dis[3]+=10;

else

{if(dis[0]!=0)//超过100前面加小数点 dis[1]=dis[1]+10; }

temp=0xfb; for(i=1;i<4;i++) { }

duan=1;

27

P0=0xff; wei=1;

temp=_crol_(temp,1); P0=temp; wei=0; P0=0; duan=1; P0=table[dis[i]]; duan=0; delay(3);

武汉工程大学邮电与信息工程学院毕业设计(论文)

P0=0x00; duan=0;

if(aaa==1&&ccc!=21)

bbb++;

switch(bbb) {

case 0: dis[1]=b; num1=b; dis[2]=num2; dis[3]=num3; if(dis[2]==21)

dis[2]++;

else

dis[2]+=10;

srtemp=0xfe; for(i=1;i<4;i++) {

P0=0xff; wei=1;

P0=srtemp;//wein打开后 是低电平亮 wei=0;//

srtemp=_crol_(srtemp,1); P0=0x00; duan=1; P0=table[dis[i]]; duan=0; delay(1); duan=1; P0=0x00;

28

武汉工程大学邮电与信息工程学院毕业设计(论文)

}

duan=0;

break; case 1: dis[1]=num1; dis[2]=b; num2=b; dis[3]=num3; if(dis[2]==21)

dis[2]++;

else

dis[2]+=10;

srtemp=0xfe; for(i=1;i<4;i++) { }

29

P0=0xff; wei=1;

P0=srtemp;//wein打开后 是低电平亮 wei=0;//

srtemp=_crol_(srtemp,1); P0=0x00; duan=1; P0=table[dis[i]]; duan=0; delay(1); duan=1; P0=0x00; duan=0;

武汉工程大学邮电与信息工程学院毕业设计(论文)

aaa=0; break; case 2: dis[1]=num1; dis[2]=num2; dis[3]=b; num3=b; if(dis[2]==21)

dis[2]++;

else

dis[2]+=10;

srtemp=0xfe; for(i=1;i<4;i++) { } aaa=0;

P0=0xff; wei=1;

P0=srtemp;//wein打开后 是低电平亮 wei=0;//

srtemp=_crol_(srtemp,1); P0=0x00; duan=1; P0=table[dis[i]]; duan=0; delay(1); duan=1; P0=0x00; duan=0;

30

武汉工程大学邮电与信息工程学院毕业设计(论文)

}

break; case 3: dis[1]=num1; dis[2]=num2; dis[3]=num3; if(dis[2]==21)

dis[2]++;

else

dis[2]+=10;

srtemp=0xfe; for(i=1;i<4;i++) { }

aaa=0;num=21;break; default:bbb=0; break;

P0=0xff; wei=1;

P0=srtemp;//wein打开后 是低电平亮 wei=0;//

srtemp=_crol_(srtemp,1); P0=0x00; duan=1; P0=table[dis[i]]; duan=0; delay(1); duan=1; P0=0x00; duan=0;

31

武汉工程大学邮电与信息工程学院毕业设计(论文)

}

首先要清楚a是DS18B20芯片获取的温度,b是需要输入的温度,也就是要求的水温。

在这里用到了abs(a)和_crol_所以要在再头文件中写到#include 和#include,dda用于防止a为负值的时候后面的操作不好完成。分别将dda的千位、百位、十位、个位取出存放在Numx,num1,num2,num3中。dis[4]是用来方便for语句的赋值操作。这里显示时需要考虑DS18B20采集的数据中的各种情况,第一:超过了100度。第二:正常的十几度或者几十度。第三:只有几度没有超过十度。第四温度为负值。

if((dis[0]==0)&&(dis[1]==0))

dis[1]=20;//如果百位和十位都为0 不显示

上面这一句话,就是地三种情况。

if(a<0)//负值 后面加个小数点

dis[3]+=10;

else

{if(dis[0]!=0)//超过100前面加小数点 dis[1]=dis[1]+10; }

上面这句话就是第一种和第四种情况的描述。

第二种情况是正常使用的情况,直接将dis[1] 、dis[2]、 dis[3]写出来即可。 ccc的作用是防止出现什么都不输入直接确认给程序带来的bug,出现这种情况时系统不做其他的任何反应,保持在这时的输入状态,直到用户输入了一个数字为止。ccc的功能才会解除。

这里键盘输入温度的数码管显示使用的是switch(bbb)语句完成的,bbb共有0、1、2、3,这四种情况,bbb等于0时是无任何输入的情况,bbb等于1时是输入了需要温度的十位,bbb等于2时是输入了需要温度的个位,bbb等于3时是输入了需要温度的小数点后一位,这里没有超过100度和低于0度的设计。这里基本上就是完成给定了数字,通过数字值为多少来设定数码管显示的数字,在第三章中已经提到。这里要注意的是每次都要将aaa清零,因为aaa为1时,输

32

武汉工程大学邮电与信息工程学院毕业设计(论文)

入子函数uchar scanff()的返回值变为一个使数码管显示一个下划线的数值,aaa为0时键盘可以通过uchar scanff()向数码管显示0-9中的任何一个数值。这样是防止前一个数字的输入完成以后,后一个数字还未输入时,显示后一个数字的数码管默认不在显示下划线而是前一个确认的数字,为了防止这种情况才有了aaa的以上操作。

3.5 中断加热子函数的分析

以下是程序: void timer0() interrupt 1 { int a;

TH0=(65536-46000)/256; TL0=(65536-46000)%6; zd++; if(zd==6) { }

33

zd=0;

a=num1*100+num2*10+num3;

if(a>=numy&&num1!=21&&num2!=21&&num3!=21) { } else { }

jiar=1; P1=0xff; jiar=0; jiar=1; P1=0xfd; jiar=0;

武汉工程大学邮电与信息工程学院毕业设计(论文)

}

采用定时器T0,定时器设定每30ms中断一次,判断输入的数值与采集的数值之间的大小,如果前者较大就使P2^1变为低电平,从而使MOC3041启动并引起加热。如果后者大于前者,则P2^2还是高电平并不引起加热。这样就达到了控温的目的。

34

武汉工程大学邮电与信息工程学院毕业设计(论文)

第4章 功能简介与成品图片

4.1 智能热水器具的功能

(1)使用高清晰度数码管实时显示水温,范围 0 ~ 102 ℃ 。 (2)可用键盘方便地设定水温,并显示设定的温度。 (3)按设定温度加热到相应水温,并具有保温功能。

首先单片机显示出采集到的温度值,等待系统键入温度,一旦键入3个数字,则第一个、第二个、第三个数字分别为需要温度的十位、个位和小数点后一位。输入完成后,每过30ms会将输入温度与单片机采集到的环境温度进行对比,如果输入温度高于或等于采集到得温度则单片机触发MOC3041开始加热,如果输入温度低于采集到得温度则不加热或停止加热。

4.2 成品图片

开发板等待输入见图4.1所示。

图4.1 开发板等待输入

35

武汉工程大学邮电与信息工程学院毕业设计(论文)

输入完成后,输入的温度比开发板所测量的环境温度高时。单片机P1^1接口会出现低电平,从而使用第二个发光二极管点亮。这里第二个发光二极管只是模拟加热并没有加热功能,实际电路板中只需要将P1^1接在MOC3041的2号接口上即可。温度输入完成并判定加热见图4.2所示。

图4.2 温度输入完成并判定位加热状态

36

武汉工程大学邮电与信息工程学院毕业设计(论文)

当环境温度高于输入温度时加热停止。实物图见图4.3所示

图4.3 停止加热状态

37

武汉工程大学邮电与信息工程学院毕业设计(论文)

第5章 总结与展望

本文对使用89C51单片机完成数字化热水器的设计进行完整的阐述。 本文主要完成的工作有:

(1)本文阐述了键盘输入电路的基本原理,如何通过硬件与软件消除抖动 (2)本文阐述了数码管显示原理,与如何动态显示数字的方法并阐释了如何方便快捷的调用数组使数码管显示相应的数字。

(3)本文阐述了通过种中断子函数完成30ms一次的加热检测的方法 (4)本文详细阐述了温度采集芯片的详细参数、操作方法,与单片机的硬件连接、软件如何进行操控等设计细节。

当然,本设计中也有不足之处,在设计完成后单片机有时会有死机的情况,复位后又恢复到正常状态。希望在以后的学习中找到解决此问题的方法。

本文的设计在开发板上完成了基本功能,对以后的以后的单片机开发有很好的借鉴意义。希望随着科技的进步,数字化家电能能更加完善,更好的造福人类。

38

武汉工程大学邮电与信息工程学院毕业设计(论文)

参考文献

[1] 刘建清, 王春生. 从零开始学单片机技术[M]. 北京: 国防工业出版社, 2008.

[2] 章彬宏, 吴青萍, 王琳. 模拟电子技术[M]. 北京: 北京理工大学出版社, 2008.25-36 [3] 林伸茂. 8051单片机彻底研究基础篇[M]. 北京: 中国电力出版社, 2007.

[4] 高涛, 陆丽娜, 刘德安. C语言程序设计[M]. 西安: 西安交通大学出版社, 2007. 78-82 [5] 杨国田, 白焰, 董玲. 51单片机实用C语言程序设计与典型实例[M]. 北京: 中国电力出

版社, 2001.

[6] 郇玉龙, 赵宁, 卢洪武. AT 89C 51 单片机设计智能家用电热水器[R]. 山东: 山东师范大

学传播学院, 2005.

[7] 郭天祥. 10天学会51单片机[M]. 哈尔滨: 哈尔滨工程大学.,2007

[8] 许奔, 刘锦, 张涛. GSM远程温控论文[D]. 武汉: 武汉工程大学邮电与信息工程学院, 2009.

[9] 胡锦. 数字电路与逻辑设计[M]. 北京: 高等教育出版社, 2004年12月.

[10] 左全生, 包蕾, 王桂星, 彭颖. 电路分析教程[M]. 北京: 电子工业出版社, 2007年7月. [11] 吴健学. 计算机应用基础[M]. 武汉: 武汉大学出版社, 2007.

[12] 周围, 杨晓非, 李实秋. 电路分析基础[M]. 北京: 人民邮电出版社, 2003年7月.

39

武汉工程大学邮电与信息工程学院毕业设计(论文)

致谢

从论文选题到搜集资料,从写稿到反复修改,期间经历了喜悦、聒噪、痛苦和彷徨,在写作论文的过程中心情是如此复杂。如今,伴随着这篇毕业论文的最终成稿,复杂的心情烟消云散,自己甚至还有一点成就感。

我要感谢,非常感谢我的指导老师。她为人随和热情,治学严谨细心。在闲聊中她总是能像知心朋友一样鼓励你,在论文的写作和措辞等方面她也总会以“专业标准”严格要求你,从选题、定题开始,一直到最后论文的反复修改、润色,指导老师始终认真负责地给予我深刻而细致地指导,帮助我开拓研究思路,精心点拨、热忱鼓励。正是指导老师的无私帮助与热忱鼓励,我的毕业论文才能够得以顺利完成,谢谢指导老师。

我要感谢,非常感谢在我研究课题期间,帮助过我的同学们。这是在这种相互帮助、相互关心的的友谊下,我才能理清论文写作思路。在此向对我的论文提出诸多宝贵的意见和建议的同学表示真挚的感谢。

40

武汉工程大学邮电与信息工程学院毕业设计(论文)

附录 整体程序代码

#include #include #include #define uchar unsigned char #define uint unsigned int sbit duan=P2^6; sbit wei=P2^7; sbit ds=P2^2; sbit jiar=P2^5;

uchar num,num1,num2,num3,numx,num4,num5,num6, aaa,bbb,ccc,zd; int numy;

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};//20,21 void delay(uchar i) { uint j; while(i--) {

for(j=0;j<100;j++); } }

void dsstart()

41

武汉工程大学邮电与信息工程学院毕业设计(论文)

{

unsigned int i; ds=0;

i=100; //拉低约800us, 符合协议要求的480us以上 while(i>0) i--;

ds=1; //产生一个上升沿, 进入等待应答状态 }

void dswait() {

unsigned int i;

while(ds); //等待应答信号 i=4;

while(i>0) i--;

while(~ds); //检测到应答脉冲 i=4;

while(i>0) i--; }

bit readbit()//读取一个bit {

unsigned int i; bit b; ds=0;

i++; //延时约8us, 符合协议要求至少保持1us ds=1; i++;

i++; //延时约16us, 符合协议要求的至少延时15us以上 b=ds;

i=8;

while(i>0) i--; //延时约64us, 符合读时隙不低于60us要求

42

武汉工程大学邮电与信息工程学院毕业设计(论文)

return b; }

uchar readbyte()//读取一个字节 { uint b;

uchar date,a; b=0;date=0; while(b<8) {

a=readbit();

date=(a<<7)|(date>>1);//将readbit()的返回值付给date,然后date向后移一位 重复8次刚好 得到一个字节的数据 }

void writeor(uchar order)//写入命令 {

uint b; uchar a; bit bit2; b=0;

for(a=0;a<8;a++) {

bit2=order&0x01; order>>=1; if(bit2)//写入1 {

ds=0; b++,b++; ds=1;

43

}

b++;

return date;

武汉工程大学邮电与信息工程学院毕业设计(论文)

}

}

}

for(b=0;b<8;b++);

else//0 { }

ds=0;

for(b=0;b<8;b++); ds=1; b++;b++;

void changetemp()//温度转变函数 { }

uint gettemp()//获取温度 {

float tt; int temp; uchar geta,getb; dsstart(); dswait(); delay(1); writeor(0xcc);

writeor(0xbe);//读取温度命令

44

dsstart(); dswait(); delay(1);

writeor(0xcc);// 跳过读序号列号的操作 writeor(0x44);// 启动温度转换 delay(1);

本文来源:https://www.bwwdw.com/article/dv0p.html

Top