找回密码
 立即注册

QQ登录

只需一步,快速开始

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

18B20单线温度检测的应用样例程序

[复制链接]
跳转到指定楼层
楼主
ID:854459 发表于 2021-1-5 23:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/*-----------------------------------------------
  名称:18B20温度传感器
  网站:
  编写:
  日期:2013.2
  修改:无
  内容:18B20单线温度检测的应用样例程序
------------------------------------------------*/
#include"delay.h"
#include"18b20.h"
/*------------------------------------------------
                    18b20初始化
------------------------------------------------*/
bit Init_DS18B20(void)
{
        bit dat=0;
        DQ = 1;                                    //DQ复位
        DelayUs2x(5);                   //稍做延时
        DQ = 0;                         //单片机将DQ拉低
        DelayUs2x(200);                 //精确延时 大于 480us 小于960us
        DelayUs2x(200);
        DQ = 1;                                //拉高总线
        DelayUs2x(50);                         //15~60us 后 接收60-240us的存在脉冲
        dat=DQ;                                //如果x=0则初始化成功, x=1则初始化失败
        DelayUs2x(25);                         //稍作延时返回
        return dat;
}

/*------------------------------------------------
                    读取一个字节
------------------------------------------------*/
unsigned char ReadOneChar(void)
{
        unsigned char i=0;
        unsigned char dat = 0;
        for (i=8;i>0;i--)
        {
                  DQ = 0;                         // 给脉冲信号
                  dat>>=1;
                  DQ = 1;                         // 给脉冲信号
                  if(DQ)
                   dat|=0x80;
                  DelayUs2x(25);
        }
        return(dat);
}
/*------------------------------------------------
                    写入一个字节
------------------------------------------------*/
void WriteOneChar(unsigned char dat)
{
        unsigned char i=0;
        for (i=8; i>0; i--)
        {
                  DQ = 0;
                  DQ = dat&0x01;
                  DelayUs2x(25);
                  DQ = 1;
                  dat>>=1;
        }
        DelayUs2x(25);
}

/*------------------------------------------------
                    读取温度
------------------------------------------------*/
unsigned int ReadTemperature(void)
{
        unsigned char a=0;
        int b=0;
        int t=0;
        float tt=0;
        while(Init_DS18B20());         //检测初始化是否成功
        WriteOneChar(0xCC);         // 跳过读序号列号的操作
        WriteOneChar(0x44);         // 启动温度转换
        DelayMs(10);
        Init_DS18B20();
        WriteOneChar(0xCC);         //跳过读序号列号的操作
        WriteOneChar(0xBE);         //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
        a=ReadOneChar();                   //低位
        b=ReadOneChar();                   //高位
        t=b;
        t<<=8;
        t=t|a;
        tt=t*0.0625;
        t= tt*10+0.5;
        return(t);
}


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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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