簡體   English   中英

根據AD值創建和使用查找表

[英]creating and using lookup table based on AD value

我在創建和使用查找表時遇到了一些麻煩。
我的代碼用於輪詢11位AD轉換器的微控制器,並根據該值更新7段顯示。

我要編寫代碼的方式是創建一個具有2047個值的表,每個值都有一個附加的二進制模式,該模式表示哪個引腳打開和關閉,然后讓該表將該二進制值返回為int。

但是我不確定創建表或調用表的語法。

到目前為止,我得到了:

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個十進制數字中的每一個的查找表,而只是讓函數一次將結果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;
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM