搜索
bottom↓
回复: 5

msp430求助

[复制链接]

出0入0汤圆

发表于 2012-7-27 14:36:54 | 显示全部楼层 |阅读模式
下面这是一个DS18B20温度传感器的数码管显示函数,请问这里免得数值转换是怎么个换算原理啊?其中temper是已经把传感器中的16位值处理好送进函数的
void Disp_Numb(uint temper)
{
   
    uchar i;
   
    for(i = 0;i < 6;i++) dN[i] = 0; //初始化显示变量

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

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2012-7-27 17:25:40 | 显示全部楼层
   //数值转换
    if(temper & BIT0)
    {
        dN[0] = 5;
        dN[1] = 2;
        dN[2] = 6;
    }
这就是说,BIT0为1代表0.0625,
if(temper & BIT4)
    {
        dN[4] += 1;
    }
这就是说,BIT4为1代表1,类推,BIT5、BIT6.....代表2,4,8,16,32,64
这不就是二进制吗,怎么弄得这么麻烦

出0入0汤圆

 楼主| 发表于 2012-7-28 13:06:32 | 显示全部楼层
lcw_swust 发表于 2012-7-27 17:25
//数值转换
    if(temper & BIT0)
    {

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

出0入0汤圆

发表于 2012-7-28 13:09:20 | 显示全部楼层
cmqdcyy 发表于 2012-7-28 13:06
我知道BIT0 1 等是是代表第几位是1的,我是看不懂他的转换原理,为什么一开始是各个位赋值分别625后面又 ...

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

出0入0汤圆

 楼主| 发表于 2012-7-28 13:16:27 | 显示全部楼层
lcw_swust 发表于 2012-7-28 13:09
可能乘法溢出了,temper 定义成32位数试试

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

出0入0汤圆

发表于 2012-7-28 13:25:29 | 显示全部楼层
cmqdcyy 发表于 2012-7-28 13:16
我试了一下,不行,出来的温度总是在变,一会30多,一会八十多,很不稳定?我这个转换应该没问题吧? ...

应该没问题,这样,temper 不转换,直接通过串口发出来看看,看是不是从18B20读的数不对
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-28 16:40

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表