根据AD值创建和使用查找表
creating and using lookup table based on AD value
我在创建和使用查找表时遇到了一点麻烦。
我的代码是用于轮询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;
};
相关文章:
- 正在查找文档以获得PS4平台的C++中的设备信息
- 在C++中查找文件
- 模板元程序查找相似的连续类型名称
- 在UNIX系统中使用DIR查找文件的字节大小
- 查找最接近的大于当前数字的数字的索引
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 查找后更改类变量
- 使用正则表达式regex_search在字符串中查找字符串
- 使用gcc从静态链接的文件中查找可选符号
- 在C++中查找范围的长度
- 算法问题:查找从堆栈中弹出的所有序列
- 在Windows中查找扬声器输出的当前音量级别
- 如何在C++中使用X509证书模在令牌中查找私钥
- 使用.find函数在c++中查找字符和另一个字符之间的大小
- 在 Windows 上,是否可以让 dll 在不使用 PATH 环境变量的情况下在另一个文件夹中查找依赖项?
- 在 for 循环中查找问题时遇到困难
- 如何在文件中查找字节序列
- 试图创建一个多线程程序来查找0-100000000之间的总素数
- 使用堆查找第K个最大元素的时间复杂性
- 根据AD值创建和使用查找表