[英]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.