心得分享:DS18B20数据处理那些事
21ic 2023-05-29

采集完数据,数据的处理方法很多,选中一种好的思路,那才是王道!

1.

unsigned int ReadTemperature(void)

{

unsigned char a=0;

unsigned int b=0;

unsigned int t=0;

Init_DS18B20();

WriteOneChar(0xCC); // 跳过读序号列号的操作

WriteOneChar(0x44); // 启动温度转换

DelayMs(10);

Init_DS18B20();

WriteOneChar(0xCC); //跳过读序号列号的操作

WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度

a=ReadOneChar(); //低位

b=ReadOneChar(); //高位

b<<=8;

t=a+b;

return(t);

}

int temp;

float temperature;

ReadTempFlag=0;

temp=ReadTemperature();

temperature=(float)temp*0.0625;

2.

unsigned char temp;

unsigned char temp1;

void Temp_test(void)

{

uchar low,high;

Ds18b20Initial();

Ds18b20Write(0xcc);

Ds18b20Write(0x44);

// Ds18b20Delay(5);

Ds18b20Initial();

Ds18b20Write(0xcc);

Ds18b20Write(0xbe);

low = Ds18b20Read();//低位

high = Ds18b20Read();//高位

temp = high;

temp <<=8;

temp |= low;

temp = ((low >> 4)+((high & 0x07)*16));

temp1 = low&0x0f; //这就是小数位,不需要转成float,然后又要转回int型处理

}

int temp;

float temperature;

temperature=(float)

Temp_shi=temp/10;

Temp_ge=temp;

Temp_xiao=(temp1*625+500)/1000;//为了留一位小数,并实现四舍五入

总结:之前在51上做,当程序比较多时,用上float型,容易出错;后来在cc2530上做温度采集时,为了显示小数这一位,用了很多方法,显示整数两位没有问题,一加上小数位,就读不出来,后来在网上看到第2中方法的处理,它是一直用unsigned char,这种处理数据方法,对于某些场合,真的很好用。

声明: 本文转载自其它媒体或授权刊载,目的在于信息传递,并不代表本站赞同其观点和对其真实性负责,如有新闻稿件和图片作品的内容、版权以及其它问题的,请联系我们及时删除。(联系我们,邮箱:evan.li@aspencore.com )
0
评论
  • 相关技术文库
  • 模拟
  • 模电
  • 运放
  • 放大
下载排行榜
更多
评测报告
更多
广告