基于AD值创建和使用查找表

时间:2014-07-21 21:39:01

标签: c++ microcontroller

创建和使用查找表时遇到一些麻烦 我的代码是用于轮询11位AD转换器的微控制器,并根据该值更新7段显示。

我想编写代码的方法是创建一个包含2047个值的表,每个值都附加一个二进制模式,表示哪些引脚打开和关闭,然后让表将该二进制值返回为int。 / p>

但是我不确定创建表或调用它的语法。

到目前为止我得到了:

int table[2048][2];
j=0;
for(i=0; i<2048; i++)
{
    if(i%204==8)
    {
        j++;
    }

    if(j==0)
    {
        value=0x3F;
    }

    if(j==1)
    {
        value=0x06;
    }
    table[i][2]={i},{value}; 
}

if语句一直下降到j == 9,该值是我有兴趣返回的二进制模式。

这是解决问题的明智方法吗?如果返回的AD值是例如300,我将如何在表中查找它以获得0x06作为我想要的数字?

每个第二段的位是

 111
6   2
6   2
 777
5   3
5   3
 444

因此数字2的位设置为1,2,4,5和7,因此用0x5B表示

1 个答案:

答案 0 :(得分:1)

这是重复位的很多,有很多运行时开销,我甚至无法想到使用它的有效方法。为什么不是10个十进制数字中的每一个的查找表,并且只是有一个函数一次汇总结果1个十进制数字?

static const unsigned char segment7digits = {
    0x3F, //0 -> 00111111 
    0x3F, //1 -> 00000110 
    0x5B, //2 -> 01011011
    0x4F, //3 -> 01001111
    0x66, //4 -> 01100110
    0x6D, //5 -> 01101101
    0x7D, //6 -> 01111101
    0x07, //7 -> 00000111
    0x7F, //8 -> 01111111
    0x6F, //9 -> 01101111
    }; //these values are untested and probably have errors

int lookup_7segment_bits(int value) {
   assert(value>=0 && value<=9999);
   int result;
   result  = segment7digits[value/1%10]; //least significant decimal digit
   result |= segment7digits[value/10%10]<<7;
   result |= segment7digits[value/100%10]<<14;
   result |= segment7digits[value/1000%10]<<21; //most significant decimal digit
   return result;
};