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;
}
}
} //数值转换
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
这不就是二进制吗,怎么弄得这么麻烦
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;
可是结果却是不对的,不知道这个对不对,还是哪里出问题了 cmqdcyy 发表于 2012-7-28 13:06 static/image/common/back.gif
我知道BIT0 1 等是是代表第几位是1的,我是看不懂他的转换原理,为什么一开始是各个位赋值分别625后面又 ...
可能乘法溢出了,temper 定义成32位数试试 lcw_swust 发表于 2012-7-28 13:09 static/image/common/back.gif
可能乘法溢出了,temper 定义成32位数试试
我试了一下,不行,出来的温度总是在变,一会30多,一会八十多,很不稳定?我这个转换应该没问题吧? cmqdcyy 发表于 2012-7-28 13:16 static/image/common/back.gif
我试了一下,不行,出来的温度总是在变,一会30多,一会八十多,很不稳定?我这个转换应该没问题吧? ...
应该没问题,这样,temper 不转换,直接通过串口发出来看看,看是不是从18B20读的数不对
页:
[1]