📄 ds18b20.c
字号:
#include"DS18B20.h"
#include"led_display.c"
#include<math.h>
uchar temp_low,temp_high;
//DS18B20初始化函数*******************************************************//
uchar Reset_DS18B20(void)
{
uchar t=6,temp;
Set_DS18B20_dq_DDR();
Clr_DS18B20_dq();
while(t--)
{
_delay_us(90);
}
Set_DS18B20_dq();
_delay_us(75);
temp=In_DS18B20_dq();
_delay_us(90);
_delay_us(90);
_delay_us(90);
if(temp)
return 0;
else return 1;
}
//写命令或数据到温度芯片DS18B20(发送一个字节)*****************************//
void Write_DS18B20(uchar data)
{
uchar i=0;
Set_DS18B20_dq_DDR();
for(i=0;i<8;i++)
{
if(data&0x01)
{
Clr_DS18B20_dq();
_delay_us(8);
Set_DS18B20_dq();
_delay_us(92);
}
else
{
Clr_DS18B20_dq();
_delay_us(98);
Set_DS18B20_dq();
_delay_us(4);
}
data>>=1;
}
}
//从温度芯片DS18B20读配置或数据(接收一个字节)*****************************//
uchar Read_DS18B20(void)
{
uchar data=0,i=0;
Set_DS18B20_dq_DDR();
for(i=0;i<8;i++)
{
data>>=1;
Clr_DS18B20_dq();
_delay_us(8);
Set_DS18B20_dq();
_delay_us(4);
if(In_DS18B20_dq())
data|=0x80;
_delay_us(70);
// data>>=1;
}
return(data);
}
//读取温度****************************************************************//
void Get_Temperature()
{
Reset_DS18B20(); // 总线复位
Write_DS18B20(DS18B20_skip_rom);
Write_DS18B20(DS18B20_read_ram);
temp_low=Read_DS18B20(); // 温度的低8位
temp_high=Read_DS18B20(); // 温度的高8位
Reset_DS18B20();
Write_DS18B20(DS18B20_skip_rom);
Write_DS18B20(DS18B20_convert_tem);
}
//将得到的数据转换成摄氏度************************************************//
int Convert_Temperature(void)
{
int T_Value;
uchar flag=0;
if(temp_high>127)
{
temp_high = 256-temp_high;
temp_low = 256-temp_low;
flag=1;
}
T_Value = (temp_high*256+temp_low)/16;
if(flag)
{
T_Value=(-1)*T_Value;
}
return T_Value;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -