DS18B20温度传感器电路设计(参考)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

关键词:单片机AT89C51;温度传感器DS18B20;数码显示

实现功能:可以测得的温度范围0~125度并显示一位小数

有报警功能当15度

(默认上限温度为30 下限温度为15)

当T>30度时红灯亮

T<15度时绿灯亮

有调整上下限温度功能按下相应按钮可以调整报警温度范围

元件清单

AT89C51单片机芯片1块

DS18B20温度传感器1个

4位共阳极数码管1块

红色发光二极管1个

绿色发光二极管1个

八分之一W 1K电阻10个

1W 4.7K电阻1个

弹性开关3个

本方案设计的系统由单片机系统、数字温度传感器、LED显示模块、按键控制模块、温度报警模块组成,其总体架构如下图1.

图1 系统总体方框图

DS18B20性能

1独特的单线接口仅需一个端口引脚进行通信

2简单的多点分布应用

3无需外部器件

4可通过数据线供电

5零待机功耗

6测温范围-55~+125℃,以0.5℃递增

7可编程的分辨率为9~12位,对应的可分辨温度分别为0.5℃、

0.25℃、0.125℃和0.0625℃

8温度数字量转换时间200ms,12位分辨率时最多在750ms内把温度转换为数字

9应用包括温度控制、工业系统、消费品、温度计和任何热感

测系统

10负压特性:电源极性接反时,传感器不会因发热而烧毁,

但不能正常工作。

DS18B20外形及引脚说明

图3 DS18B20外形及引脚

GND:地

DQ:单线运用的数据输入/输出引脚

VD:可选的电源引脚

存储在18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际温度。例如+125℃的数字输出为07D0H,

实际温度=07D0H*0.0625=2000*0.0625=125℃。

例如-55℃的数字输出为FC90H,则应先将11位数据位取反加1得370H(符号位不变,也不作运算),

实际温度=370H*0.0625=880*0.0625=55℃。

可见其中低四位为小数位。

DS18B20温度数据表

AT89C51

AT89C51单片机Atmel公司的生产的AT89C51单片机是一种低功耗/低电压、高性能的8位单片机,内部除CPU外,还包括128字节RAM,4个8位并行I/O口,5个中断优先级,2层中断嵌套中断,2个16位可编程定时计数器,片内集成4K字节可改变程序Flash存储器,具有低功耗,速度快,程序擦写方便等优点,完全满足本系统设计需要。单片机P2^2口作为ADC0809转换数据的输入端。P0的输出信号作为数码管的显示,P2.4~P2.7则作为4个数码管的位选信号控制,P2^0,P2^1,作为报警装置的输出。

仿真图

源程序

#include

#define uint unsigned int

#define uchar unsigned char //宏定义

sbit p2_4=P2^4;

sbit p2_5=P2^5;

sbit p2_6=P2^6;

sbit dp=P0^7;

sbit p2_7=P2^7;

sbit DQ=P2^2; //定义DS18B20总线I/O

sbit SET=P3^1; //定义选择调整报警温度上限和下限(1为上限,0为上限)

/****P3.2和P3.3为调整温度报警增加键和减少键******/

sbit HONGDENG=P2^0; sbit LVDENG=P2^1; //定义亮灯

signed char m; //温度值全局变量

bit sign=0; //外部中断状态标志

signed char shangxian=30; //上限报警温度,默认值为30

signed char xiaxian=15; //下限报警温度,默认值为15

uchar code

LEDData[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf};

/*****延时子程序*****/

void Delay(uint i) {

while( i-- ); }

/*****初始化DS18B20*****/

void Init_DS18B20(void) {

unsigned char x=0;

DQ=1;

Delay(8); //稍作延时

DQ=0; //单片机将DQ拉低

Delay(80); //精确延时,大于480us

DQ=1; //拉高总线

Delay(14);

x=DQ; //稍作延时后如果X=0则初始化成功,X=1则初始化失败

Delay(20); }

/*****读一个字节*****/

unsigned char ReadOneChar(void) {

unsigned char i=0;

unsigned char dat=0;

for (i=8;i>0;i--){

DQ=0; //给脉冲信号

dat>>=1;

DQ=1; //给脉冲信号

相关文档
最新文档