找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2921|回复: 0
打印 上一主题 下一主题
收起左侧

数字温度传感器DS18D20的应用+protues仿真实例

[复制链接]
跳转到指定楼层
楼主
ID:354133 发表于 2018-6-26 14:17 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 fisheep 于 2018-6-26 14:20 编辑

DS18B20的原理与应用

单片机系统除了可以对电信号进行测量外,还可以通过外接传感器对温度信号进行测量。传统的温度检测大多以热敏电阻为传感器,但热敏电阻可靠性差、测量的温度不够准确,且必须经专门的接口电路转成数字信号后才能被单片机处理。DS18B20是一种集成数字温度传感器,采用单总线与单片机连接即可实现温度的测量。本节内容在先介绍DS18B20的工作原理、时序和指令后,然后设计完成一个数字温度计。温度计功能要求采用数码管显示温度,小数点后2位有效数字,实际温度高于某个值时用蜂鸣器报警。





一、程序设计

编程思路:首先单片机通过I/O口调用初始化函数Init_DS18B20()对DS18B20按照初始化时序进行初始化,启动温度的转换,再将转换后的数字传给单片机,单片机通过计算将数字温度转换成实际的温度值,通过数码管显示出来,数码管显示采取在定时器0中动态显示,P0端驱动共阳七段数码管,P20~P25端通过非门接共阳数码管的公共端,应用程序清单如下:

/*****************************************************************

        程序描述:温度超过35度,继电器吸合

P0端驱动共阳七段数码管,P2端接共阳数码管的公共端

******************************************************************/

#include<reg51.h>           

#defineuchar unsigned char

#defineuint unsigned int

sbitDQ = P1^0;        //DS18B20的DQ和单片机的P10脚连接

sbitjdq = P2^6;         //继电器的控制端和单片机的P26脚连接

code  uchar seven_seg[] ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

code uchar seven_bit[] = {0xfe,0xfd,0xfb,0x7f};

uchara,b,c,d,i,T;

/*******************延迟函数***************/

voiddelay(uint x)

{

while(x)   

x--;

}

/**************初始化DS18B20函数***********/

Init_DS18B20(void)

{

         unsigned char x = 0;

         DQ = 1;         //DQ复位

         delay(8);       //稍做延时

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

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

         DQ = 1;       //拉高总线

         delay(14);

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

         delay(20);

}

/*******************从18B20中读一个字节***************/

uchar read_OneChar(void)

{

         uchar i = 0;

         uchar dat = 0;

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

       {

       DQ = 0;          // 给脉冲信号

       dat >>= 1;

       DQ = 1;         // 给脉冲信号

       if(DQ)

      dat|= 0x80;

      delay(4);

       }

       return(dat);

}

/**********************向18B20中写一个字节**************/

void write_OneChar(uchar dat)

{

       uchar i = 0;

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

       {

       DQ = 0;

       DQ = dat&0x01;

       delay(5);

       DQ = 1;

       dat >> =1;

       }

       delay(4);

}

/***********************读取温度*************************/

ucharRead_Temperature(void)

{

         uchar i = 0,t = 0;

         Init_DS18B20();

         Write_OneChar(0xcc);  // 跳过读序号列号的操作

         Write_OneChar(0x44);  // 启动温度转换

         Init_DS18B20();

         Write_OneChar(0xcc); //跳过读序号列号的操作

         Write_OneChar(0xbe);  //读取温度寄存器等(共可读9个寄存器)前两个就是温度

         i =Read_OneChar();    //读取温度值低位

         t =Read_OneChar();    //读取温度值高位

         a = i & 0x0f;

         b = t;

         i = i >> 4;            //低位右移4位,舍弃小数部分

         t = t << 4;            //高位左移4位,舍弃符号位

         t = t | i;            

         return(t);

}

/*******************T0初始化函数***************/

voidtimer0_init(void)      

{

       TMOD = 0x01;

       TH0 = (65536-5000)/256;   //0xec;

       TL0 = (65536-5000)%256;  //0x78;

       TR0 = 1;

       EA = 1;

       ET0 = 1;

}

/*****************中断函数**********************/

voidtimer0_isr(void) interrupt 1            

{

       uchar j;

       TR0 = 0;

       EA = 0;

       TH0 = 0xec;

       TL0 = 0x78;

       TR0 = 1;

       EA = 1;

       i++;

         if(i == 200) //刚好1秒

   {

         T =Read_Temperature();

       i = 0;

       }

       switch(j)

       {

         case 0:P0 =seven_seg[a*10/16];break;

       case 1:P0 = 0x7f & seven_seg[T%10];break;

       case 2:P0 = seven_seg[T/10];break;

       case 3:if(b & 0x80 == 0x80)P0 =0xbf;break;

       }

       P2 = seven_bit[j];

       j++;

       if(j == 3) j=0;

}

voidmain(void)

{

       Init_DS18B20();

       timer0_init();

       while(1)

       {

        if(T >= 35)jdq = 0;

        else jdq = 1;

       }

}     




数字温度传感器DS18B20.zip

64.21 KB, 下载次数: 41, 下载积分: 黑币 -5

源码+仿真

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表