可以逐句解释吗
时间: 2023-12-17 19:02:34 浏览: 31
当然可以,以下是逐行解释:
```
short DS18B20_Get_Temp(void) {
```
定义一个名为`DS18B20_Get_Temp`的函数,返回值类型为`short`,没有输入参数。
```
u8 temp;
u8 TL,TH;
short tem;
```
定义了三个变量,`temp`、`TL`和`TH`的类型为`u8`,即无符号8位整型数,`tem`的类型为`short`,即有符号16位整型数。
```
DS18B20_Start (); // ds1820 start convert
DS18B20_Rst();
DS18B20_Check();
DS18B20_Write_Byte(0xcc);// skip rom
DS18B20_Write_Byte(0xbe);// convert
```
调用了`DS18B20_Start`、`DS18B20_Rst`、`DS18B20_Check`、`DS18B20_Write_Byte`等函数,对DS18B20温度传感器进行了一系列操作,包括启动转换、复位、检测是否存在、发送读取命令等。
```
TL=DS18B20_Read_Byte(); // LSB
TH=DS18B20_Read_Byte(); // MSB
```
调用了`DS18B20_Read_Byte`函数,读取DS18B20温度传感器返回的温度值的低8位和高8位,并将其分别赋值给`TL`和`TH`变量。
```
if(TH>7)
{
TH=~TH;
TL=~TL;
temp=0;//温度为负
}
else
{
temp=1;//温度为正
}
```
判断温度值是否为负,如果温度值为负,则将`TH`和`TL`取反,并将`temp`变量赋值为0,否则将`temp`变量赋值为1。
```
tem=TH; //获得高八位
tem<<=8;
tem+=TL;//获得底八位
tem=(float)tem*0.625;//转换
```
将温度值的高8位和低8位组合成一个16位整型数,并将其乘以0.625,得到最终的温度值。
```
if(temp)
return tem; //返回温度值
else
return -tem;
```
如果温度值为正,则直接返回温度值,否则返回其相反数,即负数。