51单片机DS18B20温度传感器驱动,仅有.h文件,无.c文件。
/*************************************************************************************
**************
**************************************************************************************/
#ifndef __DS18B20_H__
#define __DS18B20_H__
#include "DS18B20.h"
#define uchar unsigned char
#define uint unsigned int
sbit DQ = P2^2;
void dealy(uchar n)
{
while(n--);
}
void DS18B20_init()
{
DQ = 1;
dealy(4);
DQ = 0;
dealy(100);
DQ = 1;
dealy(40);
}
//
unsigned char DS18B20_read()
{
unsigned char i = 0;
unsigned char dat = 0;
for(i=8;i>0;i--)
{
DQ = 1;
dealy(1);
DQ = 0;
dat >>= 1;
DQ = 1;
if(DQ)
dat |= 0x80;
dealy(10);
}
return(dat);
}
//
void DS18B20_write(unsigned char dat)
{
unsigned char i = 0;
for(i=8;i>0;i--)
{
DQ = 0;
DQ = dat & 0x01;
dealy(10);
DQ = 1;
dat >>= 1;
}
}
//
uint DS18B20_getwendu()
{
uint date;
uchar m,n;
DS18B20_init();
DS18B20_write(0xcc); //跳过读序列号
DS18B20_write(0x44); //启动温度转换
DS18B20_init();
DS18B20_write(0xcc);
DS18B20_write(0xbe); //发送读取温度命令
m = DS18B20_read(); //低位
n = DS18B20_read(); //高位
date = n;
date <<= 8;
date = date|m;
date = (date*0.0625)*10; //精度为0.0625
return date;
}
#endif
个人见解,感谢阅读。