根据AD值创建和使用查找表

creating and using lookup table based on AD value

本文关键字:查找 AD 创建 根据      更新时间:2023-10-16

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

我想写代码的方式是创建一个有2047个值的表,每个值都有一个二进制模式附加到它上,代表哪些引脚和开关,然后让表返回该二进制值为int。

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

So far i got:

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

表示

这是一个大量重复的位,有很多运行时开销,我甚至想不出一个有效的方法来使用它。为什么不创建一个包含10个十进制数字的查找表,然后简单地用一个函数一次组装一个十进制数字的结果呢?

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;
};