cmqdcyy 发表于 2012-7-27 14:36:54

msp430求助

下面这是一个DS18B20温度传感器的数码管显示函数,请问这里免得数值转换是怎么个换算原理啊?其中temper是已经把传感器中的16位值处理好送进函数的
void Disp_Numb(uint temper)
{
   
    uchar i;
   
    for(i = 0;i < 6;i++) dN = 0; //初始化显示变量

    //数值转换
    if(temper & BIT0)
    {
      dN = 5;
      dN = 2;
      dN = 6;
    }
    if(temper&BIT1)   
    {
      dN += 5;
      dN += 2;
      dN += 1;
    }
    if(temper & BIT2)   
    {
      dN += 5;
      dN += 2;
      if(dN >= 10)
      {
            dN -= 10;
            dN += 1;
      }
    }
    if(temper&BIT3)   
    {
      dN += 5;
    }
    if(temper & BIT4)
    {
      dN += 1;
    }
    if(temper & BIT5)   
    {
      dN += 2;
    }
    if(temper & BIT6)
    {
      dN += 4;
    }
    if(temper & BIT7)   
    {
      dN += 8;
      if(dN >= 10)
      {
            dN -= 10;
            dN += 1;
      }
    }
    if(temper & BIT8)
    {
      dN += 6;
      dN += 1;
      if(dN >= 10)
      {
            dN -= 10;
            dN += 1;
      }
    }
    if(temper & BIT9)
    {
      dN += 2;
      dN += 3;
      if(dN >= 10)
      {
            dN -= 10;
            dN += 1;
      }
    }
    if(temper & BITA)
    {
      dN += 4;
      dN += 6;
      if(dN >= 10)
      {
            dN -= 10;
            dN += 1;
      }
      if(dN >= 10)
      {
            dN -= 10;
      }
    }
}

lcw_swust 发表于 2012-7-27 17:25:40

   //数值转换
    if(temper & BIT0)
    {
      dN = 5;
      dN = 2;
      dN = 6;
    }
这就是说,BIT0为1代表0.0625,
if(temper & BIT4)
    {
      dN += 1;
    }
这就是说,BIT4为1代表1,类推,BIT5、BIT6.....代表2,4,8,16,32,64
这不就是二进制吗,怎么弄得这么麻烦

cmqdcyy 发表于 2012-7-28 13:06:32

lcw_swust 发表于 2012-7-27 17:25 static/image/common/back.gif
//数值转换
    if(temper & BIT0)
    {


我知道BIT0 1 等是是代表第几位是1的,我是看不懂他的转换原理,为什么一开始是各个位赋值分别625后面又成了125之类的,有点迷糊,我看了很多资料,都说是就是那个数值转时候都是乘以精度,也就是0.0625,所以我写了下面这个转换:
dN = ((temper * 625/10000))/10;
dN = ((temper * 625/10000))%10;
dN = ((temper * 625/1000))%10;
dN = ((temper * 625/100))%10;
dN = ((temper * 625/10))%10;
dN = ((temper * 625))%10;
可是结果却是不对的,不知道这个对不对,还是哪里出问题了

lcw_swust 发表于 2012-7-28 13:09:20

cmqdcyy 发表于 2012-7-28 13:06 static/image/common/back.gif
我知道BIT0 1 等是是代表第几位是1的,我是看不懂他的转换原理,为什么一开始是各个位赋值分别625后面又 ...

可能乘法溢出了,temper 定义成32位数试试

cmqdcyy 发表于 2012-7-28 13:16:27

lcw_swust 发表于 2012-7-28 13:09 static/image/common/back.gif
可能乘法溢出了,temper 定义成32位数试试

我试了一下,不行,出来的温度总是在变,一会30多,一会八十多,很不稳定?我这个转换应该没问题吧?

lcw_swust 发表于 2012-7-28 13:25:29

cmqdcyy 发表于 2012-7-28 13:16 static/image/common/back.gif
我试了一下,不行,出来的温度总是在变,一会30多,一会八十多,很不稳定?我这个转换应该没问题吧? ...

应该没问题,这样,temper 不转换,直接通过串口发出来看看,看是不是从18B20读的数不对
页: [1]
查看完整版本: msp430求助