传感器资讯网<br>——最新最专业的物联网传感器资讯平台

传感器资讯网
——最新最专业的物联网传感器资讯平台
一起来关注各类工业传感器、工业自动化、工业互联网、物联网

基于ds18b20温度传感器的51单片C语言程序

更新时间:2016-08-20 17:25:39人气:731

温度传感器

基于ds18b20温度传感器51单片C语言程序

#include

#define uchar unsigned char

#define uint  unsigned int

sbit DQ="P1^1;

uchar code SEG7[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

uchar tplsb,tpmsb;

/*延时tms*/

void delay(uint t)

    uint i;

 while(t--)

 {

   for (i="0;i<125;i++)

   {;}

   }

 }

/* 产生复位脉冲初始化DS18B20 */

void TxReset(void)

{

  uint i;

  DQ="0;

 /* 拉低约900us */

 i="100;

 while (i>0) i--;

 DQ="1;

 i="4;

 while (i>0) i--;

 }

 /* 等待应答脉冲 */

 void RxWait (void)

 {

  uint i;

  while(DQ)

  while(~DQ)

  i="4;

  while (i>0) i--;

  }

/* 读取数据的一位,满足读时隙要求 */

bit RdBit(void)

{

 uint i;

 bit b;

 DQ="0;

 i++;

 DQ="1;

 i++;

 i++;

 b="DQ;

 i="8;

 while(i>0) i--;

 return(b);

 }

 /* 读取数据的一个字节 */

uchar RdByte(void)

{

   uchar i,j,b;

 b = 0;

 for (i="1;i<=8;i++)

 {

  j = RdBit();

  b = (j<<7)|(b>>1);

 }

 return(b);

 }

 /* 写数据的一个字节,满足写1和写0的时隙要求 */

void WrByte(uchar b)

{

 uint i;

 uchar j;

 bit btmp;

 for(j="1;j<=8;j++)

 {

  btmp = b&0x01;

  b = b>>1;

   if (btmp)

  {

   /* 写1 */

   DQ = 0;

   i++;i++; // 延时,使得15us以内拉高

   DQ = 1;

   i = 8;

   while(i>0) i--; // 整个写1时隙不低于60us

     }

  else

  {

   /* 写0 */

   DQ = 0;   

   i = 8;

   while(i>0) i--; // 保持低在60us到120us之间

   DQ = 1;

   i++;

   i++;

  }

 }

}

/* 启动温度转换 */

void convert(void)

{

 TxReset();   // 产生复位脉冲,初始化DS18B20

 RxWait();   // 等待DS18B20给出应答脉冲

 delay(1);   // 延时

 WrByte(0xcc);  // skip rom 命令

 WrByte(0x44);  // convert T 命令

}

/* 读取温度值 */

void RdTemp(void)

{

 TxReset();   // 产生复位脉冲,初始化DS18B20

 RxWait();   // 等待DS18B20给出应答脉冲

 delay(1);   // 延时

 WrByte(0xcc);  // skip rom 命令

 WrByte(0xbe);  // read scratchpad 命令

 tplsb = RdByte(); // 温度值低位字节(其中低4位为二进制的“小数”部分)

 tpmsb = RdByte(); // 高位值高位字节(其中高5位为符号位)  

}

void send (void)

{  uchar b,c;

   uint i,j;

   b="(tpmsb<<4)|(tplsb">>4);

   for(j="800;j">=0;j--)

   {

   if(j!=0)

   {  

    p1=0x80;

    delay(2);

       p1=0x00;

    delay(2);

    p1=0x80;

    delay(2);

    for(i="8;i">>=1;i--) 

          { c="b;

            c<

            P1=c; // P1.7输出

            delay(4);

            }

  }

 else return;}

}

 

/* 主程序,读取的温度值最终存放在tplsb和tpmsb变量中。

   tplsb其中低4位为二进制的“小数”部分;tpmsb其中高

   5位为符号位。真正通过数码管输出时,需要进行到十进

   制有符号实数(包括小数部分)的转换。              */

 void main(void)

{

 do

 { 

  delay(1);  // 延时1ms

  convert();  // 启动温度转换,需要750ms

  delay(1000); // 延时1s

  RdTemp();  // 读取温度 

  delay(1);

  send();

  

 }

 while(1);

}

PREVIOUS东湖综合保税区将建激光传感器产业园

近日,记者从武汉市东湖综保区获悉,在2016年鄂粤合作项目对接洽谈会上,东湖综合保税区与深圳丰泽合创光电科技有限公司签约,将在东湖综合保税区建设激光传感器产业园。“目前还处于拿地阶段,计划是建30亩。”据东湖综合保税区相关负责人介绍,...

2016-2022年中国压力开关行业分析及行业调研报告NEXT

报告说明: 博思数据发布的《2016-2022年中国压力开关行业分析及行业调研报告》介绍了压力开关行业相关概述、中国压力开关产业运行环境、分析了中国压力开关 行业的现状、中国压力开关行业竞争格局、对中国压力开关行业做了重点企业经营状况分析及中国压力开关产业...

closense-els16