标题: 单片机温度采集问题 请教大神 [打印本页]

作者: 残破的羽翼    时间: 2016-5-22 00:29
标题: 单片机温度采集问题 请教大神
请问下面的语句中Temp=(((float)(ch)/51)*3+30)*10;是什么意思(部分管教定义省略)
void Display_Result(uchar ch)
{                 

                Temp=(((float)(ch)/51)*3+30)*10;

             a=Temp/100;
            b=(Temp-a*100)/10;
                c=Temp-a*100-b*10;

                DS1=0;DS2=1;DS3=1;DS4=1;
                P0=LEDData[a];DP=1;
                Delayms(2);
                 
                DS1=1;DS2=0;DS3=1;DS4=1;
                P0=LEDData[b]; DP=0;
                Delayms(2);

                DS1=1;DS2=1;DS3=0;DS4=1;
                P0=LEDData[c]; DP=1;
                Delayms(2);

                DS1=1;DS2=1;DS3=1;DS4=0;
                P0=0xF0; DP=0;
                Delayms(2);


作者: zzqDietrich    时间: 2016-5-22 10:50
daimazhenque
作者: yyg123321a    时间: 2016-5-22 14:47
//获取当前温度值
int getTmpValue()
{
    unsigned int tmpvalue;
   int value; //存放温度数值
  float t;
    unsigned char low, high;
   sendReadCmd();
    //连续读取两个字节数据
  low = readByte();
  high = readByte();
    //将高低两个字节合成一个整形变量
    //计算机中对于负数是利用补码来表示的
    //若是负值, 读取出来的数值是用补码表示的, 可直接赋值给int型的

value
    tmpvalue = high;
    tmpvalue <<= 8;
    tmpvalue |= low;
   value = tmpvalue;

    //使用DS18B20的默认分辨率12位, 精确度为0.0625度, 即读回数据的最低位代表0.0625度
   t = value * 0.0625;
    //将它放大100倍, 使显示时可显示小数点后两位, 并对小数点后第三进行4舍5入
   //如t=11.0625, 进行计数后, 得到value = 1106, 即11.06 度
   //如t=-11.0625, 进行计数后, 得到value = -1106, 即-11.06 度
    value = t * 100 + (value > 0 ? 0.5 : -0.5); //大于0加0.5, 小于0减0.5
   return value;
}




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1