单片机温度控制系统。DS18B20
DS18B20测温单片机控制

/******************************************************************** * * ME850单片机开发实验仪演示程序- DS18B20温度显示* * * * 6数码管显示* * * * 版本:V1.0 (2008/08/23) ** 作者:gguoqing (Email: gguoqing@) ** 作者:gguoqing (gguoqing@) ** 网站:(硕飞科技) (伟纳单片机世界) ** 邮箱:sofitech@ ** * *【版权】Copyright(C)伟纳电子 All Rights Reserved **【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!* * * *******************************************************************/#include <reg52.h>#include <intrins.h>sbit DQ = P3 ^ 3; //定义DS18B20端口DQsbit BEEP = P3 ^ 7; //定义蜂鸣器控制端口bit presence;unsigned char code LEDData[] ={0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82,0xF8, 0x80, 0x90, 0xff, 0xc6, 0x9c, 0xbf};unsigned char data temp_data[2];unsigned char data display[7] ={0x0b, 0x0c, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d};char code reserve[3]_at_ 0x3b; //保留0x3b开始的3个字节/**********************************************************us延时函数(8*1.085)*num**********************************************************/ void Delay(unsigned int num) //延时函数{while (--num);}/********************************************************** 延时子程序**********************************************************/ void delayms(unsigned int ms){unsigned char k;while (ms--){for (k = 0; k < 114; k++);}}/********************************************************** 蜂鸣器驱动子函数**********************************************************/ void beep(){unsigned char i;for (i = 0; i < 180; i++){Delay(80);BEEP = !BEEP; //BEEP取反}BEEP = 1; //关闭蜂鸣器delayms(100);}/********************************************************** DS18B20初始化presence=0 OK presence=1 ERROR**********************************************************/ unsigned char Init_DS18B20(void){DQ = 0; //单片机发出低电平复位信号Delay(60); //延时>480usDQ = 1; //释放数据线Delay(8); //延时>64us,等待应答presence = DQ; //接收应答信号Delay(50); //延时>400us,等待数据线出现高电平DQ = 1; //释放数据线return (presence); //返回presence信号}/********************************************************** 读一个字节数据**********************************************************/ unsigned char ReadOneChar(void){unsigned char i = 0;unsigned char dat = 0;DQ = 1;for (i = 0; i < 8; i++)//一个字节8个bit{DQ = 0; //给低脉冲信号dat >>= 1;DQ = 1; //释放总线_nop_();_nop_();if (DQ)//读总线电平状态dat |= 0x80;//最高位置1Delay(6); //延时>45usDQ = 1; //释放总线,表示此次读操作完成}return (dat); //返回所读得数据/********************************************************** 写一个字节数据**********************************************************/ void WriteOneChar(unsigned char dat){unsigned char i = 0;for (i = 0; i < 8; i++)//一个字节8个bit{DQ = 0; //给低脉冲信号Delay(1); //延时<15usdat >>= 1; //数据右移一位,最低位移入CYDQ = CY; //写1bit数据Delay(6); //延时>45usDQ = 1; //释放总线,表示此次写操作完成}}/********************************************************** 温度数据转换子程序**********************************************************/ void Temperature_conver(){unsigned char minus = 0;// display[0]=0x0b; //显示C// display[1]=0x0c; //显示°if (temp_data[1] > 127)//温度为负值{temp_data[0] = (~temp_data[0]) + 1; //取反加一,将补码变成原码if ((~temp_data[0]) >= 0xff)temp_data[1] = (~temp_data[1]) + 1;elsetemp_data[1] = ~temp_data[1];minus = 1; //温度为负值标志}display[6] = temp_data[0] &0x0f; //取小数位数据display[2] = (display[6] *10) / 16; //保留一位小数display[6] = ((temp_data[0] &0xf0) >> 4) | ((temp_data[1] &0x0f) << 4);//取整数display[5] = display[6] / 100; //百位display[4] = (display[6] % 100) / 10; //十位display[3] = display[6] % 10; //个位if (!display[5])//高位为0,不显示{display[5] = 0x0a;if (!display[4])//次高位为0,不显示display[4] = 0x0a;}if (minus){display[5] = 0x0d; //显示负号}}/********************************************************** 数码管显示子函数**********************************************************/ void ledplay(){unsigned char n, shift;shift = 0xfe; //位码初值for (n = 0; n < 6; n++)//6位数码管显示{if (n == 3)P0 = (LEDData[display[n]]) &0x7f;//加小数点显示elseP0 = LEDData[display[n]];//输出段码P2 = shift; //输出位码shift = (shift << 1) | 0x01; //修改位码delayms(1);}P2 = 0xff; //关闭显示delayms(1);}/********************************************************** 主函数**********************************************************/ void main(void){unsigned char m;P0 = 0xff;P2 = 0xff;while (1){Init_DS18B20();if (presence == 0){WriteOneChar(0xCC); //跳过ROM匹配操作WriteOneChar(0x44); //启动温度转换for (m = 0; m < 120; m++)//数码管初始化显示ledplay();//等待数据转换完成}Init_DS18B20();if (presence == 0){WriteOneChar(0xCC); //跳过ROM匹配操作WriteOneChar(0xBE); //读取温度寄存器temp_data[0] = ReadOneChar(); //温度低8位temp_data[1] = ReadOneChar(); //温度高8位Temperature_conver(); //数据转换for (m = 0; m < 120; m++)ledplay();//温度显示}else{beep(); //蜂鸣器报警P2 = 0xff; //关闭显示}}}/*********************************************************/。
基于DS18B20的温度采集控制系统

,
如 图 2 中 的 U3
,
,
以动态方式显 示
口
显示
送 出
位 控 信 号 由 P2
【] 3
,
送 出
,
经 U2 (
图 1
总体控 制框 图
7 4 LS 2 4 4 ) 进
行信号放 大
以 产生足 够 大 的 电流驱 动数
、
码 管显 示
。
数码 管 与单 片机 的连 接 见 图 2 所示 U3
。
U2 和
这里 我们采用单 片机最小系统 图 2 所示
2 1
.
,
系统硬件 电路 图如
U 1 的连 接
。
2 4
.
电机 控 制 模块
电机 采 用 直 流 电机
,
主控 制模块
由于 系统控制方案 简单
,
如 图 2 中的 B
,
1
,
额 定 电压 5 V
.
,
数据量也不 大
’
,
考虑 到 电路
调速采用
PW M
调速方法
利用单片机
P0 1 口
,
通过软
,
的 简单 和成 本 等 因 素
3I
0ND
一 D M 7 LS 4 4 Z
P O 2
22
O D' 1 R
P I 2
.
RS v P D XTAL2
.
I ==.
} 。 。
R 1 c 1 l‘ 千 一 F 亍 { -_ _一 3 0 p
G XL N T1 A D
85 91 5
自动
匐
基于
DS 188 2 0
DS18B20智能温度控制器(附软件程序)

DS18B20智能温度控制器DALLAS最新单线数字温度传感器DS18B20简介新的“一线器件”体积更小、适用电压更宽、更经济 Dallas 半导体公司的数字化温度传感器DS1820是世界上第一片支持“一线总线”接口的温度传感器。
一线总线独特而且经济的特点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。
DS18B20、 DS1822 “一线总线”数字化温度传感器同DS1820一样,DS18B20也支持“一线总线”接口,测量温度范围为 -55°C~+125°C,在-10~+85°C范围内,精度为±0.5°C。
DS1822的精度较差为± 2°C 。
现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。
适合于恶劣环境的现场温度测量,如:环境控制、设备或过程控制、测温类消费电子产品等。
与前一代产品不同,新的产品支持3V~5.5V 的电压范围,使系统设计更灵活、方便。
而且新一代产品更便宜,体积更小。
DS18B20、 DS1822 的特性 DS18B20可以程序设定9~12位的分辨率,精度为±0.5°C。
可选更小的封装方式,更宽的电压适用范围。
分辨率设定,及用户设定的报警温度存储在EEPROM中,掉电后依然保存。
DS18B20的性能是新一代产品中最好的!性能价格比也非常出色! DS1822与 DS18B20软件兼容,是DS18B20的简化版本。
省略了存储用户定义报警温度、分辨率参数的EEPROM,精度降低为±2°C,适用于对性能要求不高,成本控制严格的应用,是经济型产品。
继“一线总线”的早期产品后,DS1820开辟了温度传感器技术的新概念。
DS18B20和DS1822使电压、特性及封装有更多的选择,让我们可以构建适合自己的经济的测温系统。
DS18B20的内部结构DS18B20内部结构主要由四部分组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。
基于51单片机的温度监测系统(DS18B20)

DS18B20读时序
所有的读时隙都由拉低总线,持续至少1us后再释放总线(由于上拉电阻的作用,总线恢复为 高
配置寄存器
8 位 CRC 生成器
DS18B20的时序
DS18B20复位时序
DS18B20的所有通信都由由复位脉冲组成的初始化序列开始。该初始化序列由主 机发出,后跟由DS18B20发出的存在脉冲(presence pulse)。在初始化步骤中,总线 上的主机通过拉低单总线至少480μs来产生复位脉冲。然后总线主机释放总线并进入接收 模式。当总线释放后,5kΩ的上拉电阻把单总线上的电平拉回高电平。当DS18B20检测 到上升沿后等待15到60us,发出存在脉冲,拉低总线60-240us至此,初始化和存在时序 完毕。时序图如下:
1.主控制器电路和测温
电路的设计
主控制器电路由AT89S52 及外围时钟和复位电路构成, 测温电路由DS18B20、报警 电路组成。AT89C52是此硬 件电路设计的核心,通过 AT89S52的管脚P2.7与 DS18B20相连,控制温度的 读出和显示。硬件电路的功 能都是与软件编程相结合而 实现的。具体电路原理图如 右图2所示。
送1,以拉低总线的方式表示发送0.当发送0的时候,DS18B20在读时隙的末期将会释放总线,总线
将会被上拉电阻拉回高电平(也是总线空闲的状态)。DS18B20输出的数据在下降沿(下降沿产 生读时隙)产生后15us后有效。因此,主机释放总线和采样总线等动作要在15μs内完成。
单总线温度传感器DS18B20简介

单总线温度传感器DS18B20简介DS18B20是DALLAS公司生产的单总线式数字温度传感器,它具有微型化、低功耗、高性能、搞干扰能力强、易配处理器等优点,特别适用于构成多点温度测控系统,可直接将温度转化成串行数字信号(提供9位二进制数字)给单片机处理,且在同一总线上可以挂接多个传感器芯片。
它具有3引脚TO-92小体积封装形式,温度测量范围为-55℃~+125℃,可编程为9位~12位A/D转换精度,测温分辨率可达0.0625℃,被测温度用符号扩展的16位数字量方式串行输出,其工作电源既可在远端引入,也可采用寄生电源方式产生,多个DS18B20可以并联到3根或2根线上,CPU只需一根端口线就能与多个DS18B20通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路。
以上特点使DS18B20非常适用于远距离多点温度检测系统。
DS18B20外形及引脚说明外形及引脚如图2所示:图2 管脚排列图在TO-92和SO-8的封装中引脚有所不同,具体差别请查阅PDF手册,在TO-92封装中引脚分配如下:1(GND):地2(DQ):单线运用的数据输入输出引脚3(VDD):可选的电源引脚DS18B20工作过程及时序DS18B20内部的低温度系数振荡器是一个振荡频率随温度变化很小的振荡器,为计数器1提供一频率稳定的计数脉冲。
高温度系数振荡器是一个振荡频率对温度很敏感的振荡器,为计数器2提供一个频率随温度变化的计数脉冲。
初始时,温度寄存器被预置成-55℃,每当计数器1从预置数开始减计数到0时,温度寄存器中寄存的温度值就增加1℃,这个过程重复进行,直到计数器2计数到0时便停止。
初始时,计数器1预置的是与-55℃相对应的一个预置值。
以后计数器1每一个循环的预置数都由斜率累加器提供。
为了补偿振荡器温度特性的非线性性,斜率累加器提供的预置数也随温度相应变化。
计数器1的预置数也就是在给定温度处使温度寄存器寄存值增加1℃计数器所需要的计数个数。
ds18b20工作原理

ds18b20工作原理
DS18B20是一种数字温度传感器,它基于One-Wire总线协议进行通信。
其工作原理是利用温度对半导体器件电阻值的变化进行测量。
在DS18B20内部,有一个温度传感器、一个模数转换器和一个存储器。
在测量过程中,DS18B20内部的温度传感器会不断感知环境温度,并将温度转换为数字信号。
然后,模数转换器将数字信号转换成相应的数字代码,代表温度值。
这些数字代码通过One-Wire总线协议被传送给主控设备(如微控制器或电脑)进行处理。
DS18B20的One-Wire总线协议是一种串行通信协议,它使用单根数据线进行数据传输。
通信过程中,主控设备产生一个复位脉冲,然后从DS18B20传感器接收到ROM编号(唯一标识符)以便进行身份验证。
接下来,主控设备发送命令给传感器,比如读取温度值。
DS18B20会将温度值的数字代码通过数据线传输给主控设备,主控设备解析代码并将其转换为实际温度值。
DS18B20还具有一定的存储能力,在开启存储功能后,它可以将温度值存储在内部的存储器中。
这样,即使主控设备没有及时读取温度值,DS18B20也能够保存最新的温度数据。
总的来说,DS18B20通过测量半导体器件电阻值的变化来获取环境温度,并通过One-Wire总线协议将温度值传输给主控设备。
它的工作原理简单而可靠,在许多应用中被广泛使用。
DS18B20温度传感器的控制方法

DS18B20温度传感器的控制方法DS18B20的初始化:(1)先将数据线置高电平“1”。
(2)延时(该时间要求的不是很严格,但是尽可能的短一点)(3)数据线拉到低电平“0”。
(4)延时750微秒(该时间的时间范围可以从480到960微秒)。
(5)数据线拉到高电平“1”。
(6)延时等待(如果初始化成功则在15到60毫秒时间之内产生一个由DS18B20所返回的低电平“0”。
据该状态可以来确定它的存在,但是应注意不能无限的进行等待,不然会使程序进入死循环,所以要进行超时控制)。
(7)若CPU读到了数据线上的低电平“0”后,还要做延时,其延时的时间从发出的高电平算起(第(5)步的时间算起)最少要480微秒。
(8)将数据线再次拉高到高电平“1”后结束。
DS18B20的写操作:(1)数据线先置低电平“0”。
(2)延时确定的时间为15微秒。
(3)按从低位到高位的顺序发送字节(一次只发送一位)。
(4)延时时间为45微秒。
(5)将数据线拉到高电平。
(6)重复上(1)到(6)的操作直到所有的字节全部发送完为止。
(7)最后将数据线拉高。
DS18B20的读操作:(1)将数据线拉高“1”。
(2)延时2微秒。
(3)将数据线拉低“0”。
(4)延时15微秒。
(5)将数据线拉高“1”。
(6)延时15微秒。
(7)读数据线的状态得到1个状态位,并进行数据处理。
(8)延时30微秒。
根据DS18B20的通讯协议,主机(单片机)控制DS18B20完成温度转换必须经过三个步骤:每一次读写之前都要对DS18B20进行复位操作,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。
复位要求主CPU将数据线下拉500微秒,然后释放,当DS18B20收到信号后等待16~60微秒左右,后发出60~240微秒的存在低脉冲,主CPU收到此信号表示复位成功。
表2 ROM指令表指令约定代码功能读ROM 33H 读DS1820温度传感器ROM中的编码(即64位地址)符合ROM 55H 发出此命令之后,接着发出64 位ROM 编码,访问单总线上与该编码相对应的DS1820 使之作出响应,为下一步对该DS1820 的读写作准备。
ds18b20温度传感器工作原理

ds18b20温度传感器工作原理
DS18B20是一种数字温度传感器,它通过一根单一的数据总线进行工作。
传感器内部有一个精确的温度传感器和数字转换器。
以下是DS18B20温度传感器的工作原理:
1. 单线总线通信:DS18B20传感器使用单一的数据总线进行通信。
该总线不仅用于传输数据,还用于为传感器提供电源。
通过这种方式,可以减少传感器的引脚数量,使其适用于各种微控制器和嵌入式系统。
2. 温度测量:传感器内部有一个温度传感器,该传感器可以测量实时环境温度。
它使用精确的电阻和温度-电压转换技术,以确保温度测量的准确性和稳定性。
3. 数据转换:DS18B20传感器将温度测量结果转换为数字信号。
传感器内部的模数转换器将模拟信号转换为数字码,以便于传感器与主控制器之间的通信和处理。
4. ROM存储器:每个DS18B20传感器都有一个唯一的64位ROM存储器。
这个ROM存储器包含传感器的唯一序列号、制造商信息和其他相关信息。
这些信息可以用来识别传感器并设置其工作参数。
5. 通信协议:DS18B20传感器使用一种称为1-Wire协议的通信协议与主控制器进行通信。
该协议在传感器和主控制器之间建立一种基于时间的序列通信方式,主控制器上的软件可以通过这种协议与传感器进行数据传输、配置和控制。
总而言之,DS18B20温度传感器通过单一的数据总线进行通信,并使用内部的温度传感器和数字转换器测量环境温度。
它通过ROM存储器保存唯一的序列号和其他信息,使用1-Wire 协议与主控制器进行通信。
DS18B20温度控制系统设计

DS18B20温度控制系统设计【摘要】本设计通过以stc89c52单片机为核心,控制温度传感器ds18b20采集温度信号并直接以数字信号的方式传送给单片机,所测量结果由lcd1602显示出来,单片机将检测的温度与预先设定的温度值进行比较,该设定温度可以通过按键以1℃为单位进行调节。
当所测温度超过设定的温度值时,单片机将控制一个发光二极管和一个蜂鸣器进行声光报警,同时控制一个继电器的通断,达到简单调温的目的。
【关键词】单片机;ds18b20;lcd1602;声光报警一、功能简介本设计主要是以数字温度传感器ds18b20采集温度信号,将采集到的温度信号送给stc89c52单片机。
单片机将检测的温度与预先设定的温度值进行比较,该设定温度可以通过两个按键以1℃为单位进行调节。
当超过设定的温度值时,单片机将控制一个发光二极管和一个蜂鸣器进行声光报警,同时控制一个继电器的通断,达到简单调温的目的。
按模块可分为:(1)报警控制模块(2)温度采集模块(3)显示模块。
温度检测及显示要求实现以下功能:(1)用lcd直接显示读数、显示清晰直观。
(2)温度测量范围:0-100℃。
(3)可通过按键实现调节报警温度大小,单位1℃。
(4)精确度高。
(5)稳定性好。
二、方案简介理简单化。
采用温度芯片ds18b20测量温度,体现了作品芯片化这个趋势。
部分功能电路的集成,使总体电路更简洁,搭建电路和焊接电路时更快。
而且,集成块的使用,有效地避免外界的干扰,提高测量电路的精确度。
所以芯片的使用将成为电路发展的一种趋势。
本方案应用这一温度芯片,也是顺应这一趋势。
单片机温度控制系统是以ms-52单片机为控制核心,报警电路对温度监控的微机控制系统。
基本控制原理:ds18b20检测温度并将信号传送给单片机通过lcd显示出来,键盘设定温度上下限值,当所测温度超出所设置的初始温度时,报警装置响起,同时控制一个继电器的通断,达到简单调温的目的。
三、温度传感器的选取及特性选用美国dallas公司推出的一款单线数字温度传感器,此器件具有体积小,功耗低,精度高,可靠性好,易于单片机接口等优点其各方面特性都满足此系统的设计要求。
基于51单片机和DS18B20的数字温度计设计说明

基于51单片机和DS18B20的数字温度计设计说明
1.硬件设计:
-51单片机:选择合适的型号,如STC89C52或AT89C52等。
-DS18B20温度传感器:该传感器是一种数字温度传感器,具有单总线接口和高精度测量能力。
-接口电路:将51单片机和DS18B20传感器连接起来,要注意电平转换和信号线的阻抗匹配。
2.软件设计:
-初始化:在主函数中,首先对单片机进行初始化设置,包括时钟设置、串口配置等。
-DS18B20通信协议:使用单总线协议与DS18B20传感器进行通信,包括发送复位信号、读写数据等操作。
-温度测量:通过向DS18B20发送读取温度的命令,从传感器中读取温度值并保存。
-数据传输:将温度值转换为可显示的格式,如摄氏度或华氏度,并通过串口输出或LED显示。
3.程序流程:
-初始化单片机,设置时钟和串口参数。
-进入主循环,循环执行以下操作:
-发送复位信号,启动温度转换。
-等待转换完成,发送读取温度命令。
-读取温度值,并进行数据处理转换。
-输出温度值。
4.其他功能:
-可以添加LCD显示模块,将温度值显示在液晶屏上。
-可以添加按键输入模块,通过按键切换温度单位或进行其他操作。
需要注意的是,该设计只是一个简单的示例,实际应用中可能需要根据具体需求进行扩展和修改。
同时,在程序设计过程中,也要注意低功耗和数据稳定性等方面的考虑。
ds18b20工作原理

ds18b20工作原理
DS18B20是一种数字温度传感器,它能够通过一根数据线来传输温度数据,因此非常适合用于需要长距离传输温度数据的应用场景。
那么,DS18B20是如何工作的呢?接下来我们将详细介绍DS18B20的工作原理。
首先,DS18B20内部包含一个温度传感器和一个存储器,这个存储器用来存储唯一的64位ROM代码。
这个ROM代码可以用来区分不同的DS18B20传感器。
当我们连接DS18B20到一个微处理器或者微控制器时,可以通过这个ROM代码来识别不同的传感器。
其次,DS18B20采用的是单总线通信协议,这意味着它只需要一根数据线就可以和微处理器或者微控制器进行通信。
这种通信协议大大简化了连接的复杂性,也降低了成本。
当我们需要获取DS18B20传感器的温度数据时,我们可以通过发送一系列的命令来实现。
首先,我们需要发送启动转换命令,这个命令会让DS18B20开始进行温度转换。
接着,我们需要发送读取温度命令,DS18B20会将转换好的温度数据发送回来,我们可以通过解析这个数据来获取实际的温度数值。
另外,DS18B20还具有一些特殊的工作模式,比如它可以进入低功耗模式以节省能量。
在这种模式下,DS18B20会进入休眠状态,不进行温度转换,这样可以延长传感器的使用寿命。
总的来说,DS18B20的工作原理非常简单而有效。
它通过单总线通信协议和内部的温度传感器来实现温度数据的传输和获取。
同时,它还具有一些特殊的工作模式,可以满足不同应用场景的需求。
希望通过本文的介绍,你对DS18B20的工作原理有了更清晰的认识。
DS18B20水温控制系统+电路图程序

水温控制系统摘要:该水温控制系统采用单片机进行温度实时采集与控制。
温度信号由“一线总线”数字化温度传感器DS18B20提供,DS18B20在-10~+85°C范围内, 固有测温分辨率为0.5 ℃。
水温实时控制采用继电器控制电热丝和风扇进行升温、降温控制。
系统具备较高的测量精度和控制精度,能完成升温和降温控制。
关键字: AT89C51 DS18B20 水温控制Abstract: This water temperature control system uses the Single Chip Microcomputer to carry on temperature real-time gathering and controling. DS18B20, digitized temperature sensor, provides the temperature signal by "a main line". In -10~+85℃the scope, DS18B20’s inherent measuring accuracy is 0.5 ℃. The water temperature real-time control system uses the electricity nichrome wire carring on temperature increiseament and operates the electric fan to realize the temperature decrease control. The system has the higher measuring accuracy and the control precision, it also can complete the elevation of temperature and the temperature decrease control.Key Words:AT89C51 DS18B20 Water temperature control目录1. 系统方案选择和论证 (2)1.1 题目要求 (2)1.1.1 基本要求 (2)1.1.2 发挥部分 (2)1.1.3 说明 (2)1.2 系统基本方案 (2)1.2.1 各模块电路的方案选择及论证 (2)1.2.2 系统各模块的最终方案 (5)2. 硬件设计与实现 (6)2.1系统硬件模块关系 (6)2.2 主要单元电路的设计 (6)2.2.1 温度采集部分设计 (6)2.2.2 加热控制部分 (8)2.2.3 键盘、显示、控制器部分 (8)3. 系统软件设计 (10)3.1 读取DS18B20温度模块子程序 (10)3.2 数据处理子程序 (10)3.3 键盘扫描子程序 (12)3.4 主程序流程图 (13)4. 系统测试 (14)4.1 静态温度测试 (14)4.2动态温控测量 (14)4.3结果分析 (14)附录1:产品使用说明 (15)附录2:元件清单 (15)附录3:系统硬件原理图 (16)附录4:软件程序清单 (17)参考文献 (26)1.系统方案选择和论证1.1题目要求设计并制作一个水温自动控制系统,控制对象为1L净水,容器为搪瓷器皿。
基于单片机和DS18B20的空调温控系统毕业设计

目录第一章绪论11.1 课题研究背景11.1.1 空调的工作原理11.1.2 空调的功能21.2 控制技术介绍21.3 总体方案设计3第二章空调温度控制系统硬件设计52.1 单片机的选择52.1.1 AT89S52单片机简介52.1.2 AT89S52单片机引脚介绍52.1.3 AT89S52单片机的外围电路62.2 温度传感器的选择72.3 键盘的设计82.3.1 行列式键盘和独立键盘的接口设计82.3.2 矩阵键盘和独立键盘的工作原理92.4 液晶显示的设计92.4.1液晶1602的接口电路92.4.2 液晶1602工作原理92.4.3 液晶1602的其他参数102.5 DA转换电路设计112.5.1 DA转换器的选择112.5.2 DAC0832简介122.5.3 DAC0832结构12第三章空调温度控制设计133.1 PID调节器控制原理133.2 位置式PID算法143.3 数字PID参数的整定143.3.1 采样周期选择的原则153.3.2 PID参数对系统性能的影响153.3.3 PID计算程序17第四章空调温度控制系统软件设计204.1 系统部件的软件设计方案204.2 系统软件设计框图204.3 主程序和子程序流程图设计214.3.1 主程序流程图214.3.2 液晶1602流程图224.3.3 温度转换子程序流程图224.3.4 键盘处理子程序流程图23结束语24 参考文献26第一章绪论1.1 课题研究背景温度是一个和人们生活环境有着密切关系的物理量,也是一种在生产、科研、生活中需要测量和控制的重要物理量,是国际单位制七个基本量之一。
温度的变化会给我们的生活、工作、生产等带来重大影响,因此对温度的测量至关重要。
其测量控制一般使用各式各样形态的温度传感器。
随着现代计算机和自动化技术的发展,作为各种信息的感知、采集、转换、传输相处理的功能器件,温度传感器的作用日显突出,已成为自动检测、自动控制系统和计量测试中不可缺少的重要技术工具,其应用已遍与工农业生产和日常生活的各个领域。
51单片机DS18B20温度传感器原理及实验

51单片机DS18B20温度传感器原理及实验一、引言温度传感器是一种常用的传感器器件,它的作用是将物体的温度变化转换为电信号输出,以实现温度的监测和控制。
DS18B20是一种数字温度传感器,采用数字信号输出,具有体积小、精度高、线性度好等特点,被广泛应用于各种温度控制系统中。
本文将介绍DS18B20的工作原理及实验方法。
二、DS18B20的工作原理DS18B20是一种基于一线传输协议的数字温度传感器,其工作原理如下:1.接口电路:DS18B20具有三个引脚,分别是VDD、DQ和GND。
其中,VDD是供电引脚,DQ是数据引脚,GND是地引脚。
2.传感器原理:DS18B20内部包含一个温度传感器和一个数字转换器。
温度传感器采用热敏电阻的原理,通过测量热敏电阻的电阻值来反映物体的温度变化。
数字转换器将传感器测得的电阻值转换为数字信号输出。
三、实验流程以下是使用51单片机对DS18B20温度传感器进行实验的详细流程:1.硬件准备:-将DS18B20的VDD引脚连接到单片机的VCC引脚,DQ引脚连接到单片机的任意IO引脚,GND引脚连接到单片机的GND引脚。
-确保DS18B20的供电电压和单片机的工作电压一致。
2.初始化:-在程序中定义DS18B20的DQ引脚所对应的单片机的IO引脚。
-初始化DS18B20,即发送初始化指令给DS18B20。
3.温度转换:-发送温度转换指令给DS18B20,DS18B20开始测量温度。
-等待一定的延时,确保DS18B20完成温度转换。
4.读取温度:-发送读取温度指令给DS18B20,DS18B20将温度的原始数据发送给单片机。
-单片机通过计算将原始数据转换为温度值。
-温度值可以通过串口或LCD等方式进行显示。
5.循环实验:-以上步骤需要不断重复,以便实时监测温度的变化。
四、总结DS18B20温度传感器是一种常用的数字温度传感器,具有精度高、体积小、线性度好等特点,适用于各种温度控制系统。
基于DS18B20的温度控制系统设计

摘 要: 该温度控制系统以STC89C52单片机为核心,采用DS18B20数字温度传感器采集温度,并以PWM形式输出,确保温度输出的稳定,再结合PID闭环控制,使系统能够更稳定地运行。先利用Proteus软件结合Keil软件仿真,再用STC89C52单片机进行实测,从而进一步验证了设计的可靠性和准确性,所控制温度的精度能达到±1 ℃范围之内。该系统具有灵活性强、电路简单、可靠性高、易于操作等优点,能够实现对温度的稳定控制。关键词: STC89C52;DS18B20;PID闭环控制;Proteus
LCD1602字符型LCD通常有14条引脚线或16条引脚线的LCD,多出来的两条线是背光电源线。该模块用D0~D7作为8 bit双向数据线,4 bit数据分两次传送,可以节省CPU的I/O口资源[4]。 VSS、VDD分别接地和5 V电源。VEE为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高。RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。E(或EN)端为使能(Enable)端,下降沿使能。DB0~DB7为双向数据总线。2 温度控制系统软件设计 系统程序主要包括主程序、初始化子程序、PID计算子程序、温度比较处理子程序、延时子程序、T0中断服务子程序和DS18B20驱动程序等。主程序流程图。
void PIDInit(struct PID*pp){……{unsigned int dError,Error;Error=pp->SetPoint-NextPoint;//偏差pp->SumError+=Error;//积分dError=pp->LastError-pp->PrevError;//当前微分pp->PrevError=pp->LastError;pp->LastError=Error;return(pp->Proportion*Error//比例+pp->Integral*pp->SumError//积分项+pp->Derivative*dError);//微分项}3 实验结果 现利用Keil编辑程序结合Proteus所做的原理图进行仿真处理,仿真结果可以达到设计要求。本设计制作了硬件设计实物,通过PID控制,当加热电阻靠近温度传感器时,测量温度明显上升,并达到31℃(设置温度)。此后加热变缓,温度维持在31℃,系统温度误差精度可达到±1℃之内,并且用蜂鸣器发出鸣响。当加热电阻离开温度传感器,测量温度会降低,当实测温度低于设置温度,蜂鸣器不响。再次设置温度,当加热电阻再次靠近温度传感器时,测量温度又明显上升到设置温度。 为了更好地观察实验结果,证明仿真结果的可靠性,体现本设计对温度控制的稳定性和精确性,经过多次设置不同的温度,实验记录数据如表1所示。从记录数据分析可知,本设计达到了预期的设计目标,控制温度误差范围在±1℃之内。
基于51单片机的DS18B20温度显示

基于51单片机的DS18B20温度显示本讲内容:了解温度传感器DS18B20的使用,并通过一个例程展示温度传感器DS18B20测温过程。
DS18B20简介:DS18B20 是单线数字温度传感器,即“一线器件”,其具有独特的优点:(1)采用单总线的接口方式与微处理器连接时仅需要一条口线即可实现微处理器与 DS18B20 的双向通讯。
单总线具有经济性好,抗干扰能力强,适合于恶劣环境的现场温度测量,使用方便等优点,使用户可轻松地组建传感器网络。
(2)测量温度范围宽,测量精度高。
DS18B20 的测量范围为-55 ℃ ~+ 125 ℃;在 -10~+ 85°C 范围内,精度为± 0.5°C 。
(3)多点组网功能多个 DS18B20 并联在惟一的单线上,实现多点测温。
DS18B20的存储器由一个高速暂存RAM 和一个非易失性、电可擦除(E2)RAM 组成。
配置寄存器:出场设置默认R0、R1为11。
也就是12位分辨率,也就是1位代表0.0625摄氏度。
DS18B20经转换所得的温度值以二字节补码形式存放在高速暂存存储器的第0和第1个字节。
所以当我们只想简单的读取温度值的时候,只用读取暂存器中的第0和第1个字节就可以了。
简单的读取温度值的步骤如下: 1:跳过ROM 操作 2:发送温度转换命令 3:跳过ROM 操作 4:发送读取温度命令 5:读取温度值 DS18B20接口电路图:DS18B20的初始化:主机首先发出一个480-960微秒的低电平脉冲,然后释放总线变为高电平,并在随后的480微秒时间内对总线进行检测,如果有低电平出现说明总线上有器件已做出应答。
若无低电平出现一直都是高电平说明总线上无器件应答。
做为从器件的DS18B20在一上电后就一直在检测总线上是否有480-960微秒的低电平出现,如果有,在总线转为高电平后等待15-60微秒后将总线电平拉低60-240微秒做出响应存在脉冲,告诉主机本器件已做好准备。
DS18B20说明书

附录1:DS18B20型单线智能温度传感器简介由美国DALLAS半导体公司生产的DSl8B20型单线智能温度传感器,属于新一代适配微处理器的智能温度传感器,可广泛用于工业、民用、军事等领域的温度测量及控制仪器、测控系统和大型设备中,例如多路温度测控仪、中央空调、大型冷库、恒温装置等。
此外巧妙利用DSl8B20内部64位激光ROM中具有惟一性的48位产品序号,还可设计成专供大型宾馆客房或军事仓库使用的保密性极佳的电子密码锁。
DSl8B20的电源电压范围均扩展到+3~+5.5V,DSl8B20还能对温度分辨力进行编程,选择9位~12位模式下工作,在12位模式下的最高分辨力可达0.0625℃。
下面介绍DSl8B20的性能特点和工作原理。
1.1 DS18B20的性能特点(1)DSl8B20采用DALLAS公司独特的“单线(1-Wire)总线”专有技术,通过串行通信接口(I/O)直接输出被测温度值(9位二进制数据,含符号位)。
(2)在测温范围是-55~+125℃时,测量误差不超过±2℃,在-10~+85℃范围内,可确保测量误差不超过±0.5℃。
温度/数字量转换时间的典型值仅需93.75ms,比DS1820有很大的提高.(3)内含64位经过激光修正的只读存储器ROM,扣除8位产品系列号和8位循环冗余校验码CRC之后,产品序号占48位。
出厂前就作为DSl8B20惟一的产品序号,存入其ROM中。
在构成大型温控系统时,允许在单线总线上挂接多片DSl8B20。
(4)适配各种单片机或系统机。
(5)用户可分别设定各路温度的上、下限并写入随机存储器RAM中。
利用报警搜索命令和寻址功能,可迅速识别出发生了温度越限报警的器件。
(6)内含寄生电源。
该器件既可由单线总线供电,亦可选用外部+5V电源(允许电压范围是3.0~5.5V),进行温度/数字转换时的工作电流约为1.5mA,待机电流仅25uA,典型功耗为5mW。
18b20概述

数字温度传感器DS18B20概述传统的温度检测大多以热敏电阻为传感器,采用热敏电阻,可满足40 摄氏度至90 摄氏度测量范围,但热敏电阻可靠性差,测量温度准确率低,对于 1 摄氏度的信号是不适用的,还得经过专门的接口电路转换成数字信号才能由微处理器进行处理。
目前常用的微机与外设之间进行的数据通信的串行总线主要有I 2C 总线,SPI 总线等。
其中I 2C 总线以同步串行2 线方式进行通信(一条时钟线,一条数据线),SPI 总线则以同步串行3 线方式进行通信(一条时钟线,一条数据输入线,一条数据输出线)。
这些总线至少需要两条或两条以上的信号线。
而单总线(1-wire bus ),采用单根信号线,既可传输数据,而且数据传输是双向的,CPU 只需一根端口线就能与诸多单总线器件通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路。
因而,这种单总线技术具有线路简单,硬件开销少,成本低廉,软件设计简单,便于总线扩展和维护。
同时,基于单总线技术能较好地解决传统识别器普遍存在的携带不便,易损坏,易受腐馈,易受电磁干扰等不足,因此,单总线具有广阔的应用前景,是值得关注的一个发展领域。
单总线即只有一根数据线,系统中的数据交换,控制都由这根线完成。
主机或从机通过一个漏极开路或三态端口连至数据线,以允许设备在不发送数据时能够释放总线,而让其它设备使用总线。
单总线通常要求外接一个约为 4.7K 的上拉电阻,这样,当总线闲置时其状态为高电平。
DS18B20 数字式温度传感器,与传统的热敏电阻有所不同的是,使用集成芯片,采用单总线技术,其能够有效的减小外界的干扰,提高测量的精度,同时,它可以直接将被测温度转化成串行数字信号供微机处理,接口简单,使数据传输和处理简单化。
部分功能电路的集成,使总体硬件设计更简洁,能有效地降低成本,搭建电路和焊接电路时更快,调试也更方便简单化,这也就缩短了开发的周期。
DS18B20 单线数字温度传感器,即“一线器件”,其具有独特的优点:(1 )采用单总线的接口方式与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20 的双向通讯。
DS18B20的工作原理

DS18B20的工作原理DS18B20是一种数字温度传感器,具有高精度和数字输出的特点。
它采用1-Wire总线通信协议,可以方便地与微控制器进行通信。
本文将介绍DS18B20的工作原理,以帮助读者更好地理解这种传感器的工作方式。
一、DS18B20的基本结构1.1 DS18B20传感器由温度传感器、存储器和控制逻辑电路组成。
1.2 温度传感器部分采用模拟式温度传感器,能够将温度转换为电压信号。
1.3 存储器部分用于存储传感器的唯一标识号和温度数据。
二、DS18B20的工作原理2.1 当微控制器发送读取温度的命令时,DS18B20开始工作。
2.2 DS18B20将传感器测得的温度数据转换为数字信号,并通过1-Wire总线发送给微控制器。
2.3 微控制器接收到温度数据后,可以进行进一步的处理和显示。
三、DS18B20的精度和分辨率3.1 DS18B20具有高精度,温度测量精度可达±0.5°C。
3.2 DS18B20的分辨率可通过配置寄存器进行设置,最高可达12位。
3.3 高分辨率可以提供更精确的温度测量结果,但也会增加通信的时间。
四、DS18B20的应用领域4.1 DS18B20广泛应用于工业控制、电子设备和家用电器等领域。
4.2 在温度监控系统中,DS18B20可以实现对环境温度的实时监测和控制。
4.3 DS18B20还可以用于温度补偿、温度校准和温度报警功能。
五、DS18B20的优势和劣势5.1 DS18B20具有数字输出、高精度和简单的通信方式等优点。
5.2 DS18B20的缺点是对温度测量环境的要求较高,需要精确的供电和通信线路。
5.3 尽管存在一些局限性,但DS18B20仍然是一种性能稳定、可靠性高的温度传感器。
总结:DS18B20是一种高精度、数字输出的温度传感器,采用1-Wire总线通信协议。
通过本文的介绍,读者可以更好地了解DS18B20的工作原理和应用领域,为实际应用提供参考。
基于单片机的温度控制系统设计

基于单片机的温度控制系统设计温度控制系统是现代生活中不可或缺的一部分,常见于家庭的的空调、电饭煲、烤箱等家用电器,以及工业生产中的各种自动化设备。
本文基于单片机设计针对室内温度控制系统的实现方法进行说明,包括温度采集、温度控制器的实现和人机交互等方面。
一、温度采集温度采集是温度控制系统的核心部分。
目前比较常见的温度采集器主要有热电偶、热敏电阻和半导体温度传感器。
在本文中我们以半导体温度传感器为例进行说明。
常见的半导体温度传感器有DS18B20、LM35等,本次实验中采用DS18B20进行温度采集。
DS18B20是一种数字温度传感器,可以直接与单片机通信,通常使用仅三根导线连接。
其中VCC为控制器的电源正极,GND为电源负极,DATA为数据传输引脚。
DS18B20通过快速菲涅耳射线(FSR)读取芯片内部的温度数据并将其转换为数字信号。
传感器能够感知的温度范围通常为-55℃至125℃,精度通常为±0.5℃。
为了方便使用,DS18B20可以通过单片机内部的1-Wire总线进行控制和数据传输。
具体实现方法如下:1.首先需要引入相关库文件,如:#include <OneWire.h> //引用1-Wire库#include <DallasTemperature.h> //引用温度传感器库2.创建实例对象,其中参数10代表连接传感器的数字I/O引脚:OneWire oneWire(10); //实例化一个1-Wire示例DallasTemperature sensors(&oneWire); //实例化一个显示温度传感器示例3.在setup中初始化模块:sensors.begin(); // 初始化DS18B204.在主循环中,读取传感器数据并将温度值输出到串口监视器:sensors.requestTemperatures(); //请求温度值float tempC = sensors.getTempCByIndex(0); // 读取温度值Serial.println(tempC); //输出温度值二、温度控制器的实现温度控制器是本次实验的关键部件,主要实现对温度的控制和调节,其基本原理是根据温度变化情况来控制输出电压或模拟脚电平,驱动继电器控制电器设备工作。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#define uchar unsigned char
#define uint unsigned int
uchar bai,shi,ge,xiaoshu,fuhao;
bit sign; //负数的标志位
bit f; //DS18B20初始化成功标志位
sbit DQ=P1^7;
sbit LS138A= P2^0;//定义138译码器的输入A脚由P2.0控制
sbit LS138B = P2^1;//定义138译码器的输入脚B由P2.1控制
sbit LS138C= P2^2;//定义138译码器的输入脚C由P2.2控制
uchar Temp[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40/*负号*/};
case 5:LS138A=1; LS138B=0; LS138C=1; break;
case 6:LS138A=0; LS138B=1; LS138C=1; break;
case 7:LS138A=1; LS138B=1; LS138C=1; break;
}
delayms(1);
}
}
}
void main()
}
return dat;
}
//温度的转换,获取温度
uint wendu()
{
uchar temph,templ;
uint temp;
//float t;
init_ds18b20();
write_ds18b20(0xcc);
write_ds18b20(0x44);
delayms(10);
init_ds18b20();
DQ=0;
delayus(80);
DQ=1;
delayus(8);
delayus(4);
while(DQ==0)
f=1;
}
//写一个字节的数据,低位在前
void write_ds18b20(uchar date)
{
uchar i=0;
for(i=0;i<8;i++)
{
DQ=0;
DQ=date&0x01;
write_ds18b20(0xcc);
write_ds18b20(0xbe);
templ=read_ds18b20();
temph=read_ds18b20();
if((temph&0xf8)!=0x00)
{
sign=1;//此时温度为零下,即为负数
temph=~temph;
tБайду номын сангаасmpl=~templ;
}
LedOut[6]=Temp[ge]|0x80;//个位带小数点儿
LedOut[7]=Temp[xiaoshu]; //小数位
for( i; i<9; i++) //实现8位动态扫描循环
{
P0 = LedOut[i]; //将字模送到P0口显示
switch(i)
{
case 0:LS138A=0; LS138B=0; LS138C=0; break;
{
smg();
while(1)
{
wendu();
display();
}
if(bai==0)
{
i=5;
if(sign==1)//负号
{
i=4;
LedOut[4]=Temp[fuhao];
}
}
LedOut[5]=Temp[shi]; //十位
if(bai==0&&shi==0)
{
i=6;
if(sign==1)//负号
{
i=5;
LedOut[5]=Temp[fuhao];
}
delayus(4); //延时约48us
DQ=1;
date>>=1;
}
delayus(4);
}
//读一个字节的数据
uchar read_ds18b20()
{
uchar i=0,dat=0;
for(i=0;i<8;i++)
{
DQ=0;
dat>>=1;
DQ=1;
if(DQ==1)
dat|=0x80;
delayus(4);
{
uint LedOut[10],i=4;
uint num;
num=wendu();
bai=num/1000;
shi=num%1000/100;
ge=num%100/10;
xiaoshu=num%10;
fuhao=10;
if(!f)
P0=0x00;
else
{
LedOut[4]=Temp[bai];//百位
templ+=1;
if(templ>255)
temph++;
}
temp=temph;
temp&=0x07;
temp=((temph*256)+templ)*0.625+0.5;
return temp;
}
void smg()
{
LS138A=0;
LS138B=0;
LS138C=0;
P0=0;
}
void display()
void delayms(uint z) //延时大约1ms
{
uchar i,j;
for(i=0;i<z;i++)
for(j=0;j<115;j++);
}
void delayus(uchar i) //延时大约6us
{
while(i--);
}
void init_ds18b20()
{
DQ=1;
delayus(8);
case 1:LS138A=1; LS138B=0; LS138C=0; break;
case 2:LS138A=0; LS138B=1; LS138C=0; break;
case 3:LS138A=1; LS138B=1; LS138C=0; break;
case 4:LS138A=0; LS138B=0; LS138C=1; break;