📄 ds18b20.c
字号:
sbit d_18b20=P0^0;//18b20器件引脚
unsigned char temp_int;//整数部分
unsigned char temp_point;//小数部分
unsigned int flag;//器件检测位
unsigned int temph;
unsigned int templ;
void delay_18b20(unsigned int i)//18b20延时程序
{
while(--i);
}
void initial_18b20()//初始化
{
d_18b20=1;
delay_18b20(1);
d_18b20=0;
delay_18b20(600);
d_18b20=1;
delay_18b20(30);
flag=d_18b20;
delay_18b20(20);
while(flag);
}
void ww_byte_18b20(unsigned char _data)//向18b20写入数据
{unsigned char i;
for(i=0;i<8;i++)
{
d_18b20=0;
d_18b20=_data&0x01;
delay_18b20(15);
d_18b20=1;
_data>>=1;
}
}
unsigned int rebyte(void)//读取温度子程序
{
unsigned char i,dat=0;
for(i=0;i<8;i++)
{dat>>=1;
d_18b20=0;
d_18b20=1;
delay_18b20(1);
if(d_18b20)dat|=0x80;
delay_18b20(8);
}
return(dat);
}
readtemp()//读取温度
{
initial_18b20();//先初始化18b20
ww_byte_18b20(0xcc);//跳过ROM匹配
ww_byte_18b20(0x44);//启动温度转换
delay_18b20(160);
initial_18b20();
ww_byte_18b20(0xcc);//跳过ROM匹配
ww_byte_18b20(0xbe);//读取温度寄存器等
templ=rebyte();
temph=rebyte();
temp_int=((temph<<4)&0x70)|((templ>>4)&0x0f);//整数部分
temp_point=(templ&0x0f)*5;//小数部分
return(temp_int*100+temp_point);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -