📄 18b20.h
字号:
#ifndef __18B20_H__
#define __18B20_H__
#include<intrins.h>
sbit DQ = P1^4;
//延时函数
void delay2us(unsigned char t) //2us
{
while(t--);
}
//DS18B20初始化函数
bit init_ds18b20(void)
{
bit initflag = 0;
DQ = 1;
delay2us(1);
DQ = 0;
delay2us(250); // 延时大于480us
DQ = 1;
delay2us(10); // 15us<waits<80us
initflag = DQ; // initflag等于1初始化失败
delay2us(40); //< 60us<presebcepulse<240us
return initflag;
}
//通过单总线向从器件写一个字节
void WriteOneChar(unsigned char byt)
{
unsigned char i;
for(i=0;i<8;i++)
{
DQ = 1;
_nop_();
DQ = 0;
DQ = byt&0x01;
delay2us(15);
DQ = 1;
byt >>= 1;
}
delay2us(5);
}
//通过单总线从从器件读一个字节
unsigned char ReadOneChar(void)
{
unsigned char i;
unsigned char byt;
for(i=0;i<8;i++)
{
DQ = 0; // 拉低开始读时间隙
byt >>= 1;
DQ = 1; //单片机释放总线
if(DQ) //18b20有效数据出现
byt |= 0x80;
delay2us(30);
}
return byt;
}
//温度转换、读取及数据处理器函数
unsigned char rd_temperature(void)
{
unsigned char low,high;
char temp;
init_ds18b20();
WriteOneChar(0xCC);
WriteOneChar(0x44); //启动温度转换
init_ds18b20();
WriteOneChar(0xCC);
WriteOneChar(0xBE); //读取寄存器
low = ReadOneChar(); //低字节
high = ReadOneChar(); //高字节
temp = high<<4;
temp += ((low&0xf0)>>4);
return temp;
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -