⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ds18b20.c

📁 此程序用的时钟芯片为12887
💻 C
字号:
/*************************
函数名:DS18B20
功能:发送复位和初始化
      读数据
	  写数据
**************************/
#include <clock.h>

void dsreset(void)       //发送复位和初始化
{
  uint i;
  DS=0;
  i=103;
  while(i>0)i--;  //延时
  DS=1;
  i=4;
  while(i>0)i--;
}

bit tmpreadbit(void)       //读取数据的一位
{
   uint i;
   bit dat;
   DS=0;i++;          //i++ for delay
   DS=1;i++;i++;
   dat=DS;
   i=8;while(i>0)i--;
   return (dat);
}

uchar tmpread(void)   //读一个字节
{
  uchar i,j,dat;
  dat=0;
  for(i=1;i<=8;i++)
  {
    j=tmpreadbit();
    dat=(j<<7)|(dat>>1);   //读出的数据最低位在最前面,这样刚好一个字节在DAT里
  }
  return(dat);
}

void tmpwritebyte(uchar dat)   //write a byte to ds18b20
{
    uint i;
    uchar j;
    bit testb;
    for(j=1;j<=8;j++)
    {
        testb=dat&0x01;
        dat=dat>>1;
        if(testb)     //write 1
        {
        	DS=0;
            i++;i++;
        	DS=1;
            i=8;while(i>0)i--;
    	}
        else
        {
            DS=0;       //write 0
            i=8;while(i>0)i--;
        	DS=1;
            i++;i++;
        }
    }
}

void tmpchange(void)  //DS18B20 begin change
{
    dsreset();
    delay(1);
    tmpwritebyte(0xcc);  // address all drivers on bus
    tmpwritebyte(0x44);  //  initiates a single temperature conversion
}

void tmp()               //读取温度
{
    float tt;
    uchar a,b;
    dsreset(); //复位
    delay(1);
    tmpwritebyte(0xcc);   //跳过序列号命令
    tmpwritebyte(0xbe);   //发转换命令
    a=tmpread();  //读取低位温度
    b=tmpread();  //读取高位温度
    temp=b;
    temp<<=8;             //two byte  compose a int variable
    temp=temp|a;
    tt=temp*0.0625;
    temp=tt*10+0.5;
//      return temp;
}

void write_tmp(uchar add2,uchar date)  //写温度
{
    uchar bai,shi,ser;
    ser=temp/10;
    SBUF=ser;
    bai=temp/100;
    shi=temp%100/10;
    write_com(0x80+0x40+add2);
    write_date(0x30+bai);
    write_date(0x30+shi);
}
void write_tmp1 (uchar add3,uchar date)  //写温度小数点后一位
{
    uchar ge,ser;
    ser=temp/10;
    SBUF=ser;
    ge=temp%10;
    write_com(0x80+0x40+add3);
    write_date(0x30+ge);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -