这是一个有硬件限制的编程问题。我正在从事“智能”恒温器的逆向工程/黑客项目。(它不是那么聪明,但它能够处理 MQTT 流量。)
我的问题是内置 LED 矩阵显示器。有 5 个 7 段,其中两个也有 DP,显示屏周围有 19 个图标。
通常我会这样解决显示:
#define MAKE_BINARY(a,b,c,d,e,f,g,h) (((a)<<7)|(b)<<6)|((c)<<5)|((d)<<4)|((e)<<3|((f)<<2)|((g<<1)|h))
static unsigned char int_to_7leds [] = {
MAKE_BINARY (0,0,0,0,0,0,1,1), // 0
MAKE_BINARY (1,0,0,1,1,1,1,1), // 1
MAKE_BINARY (0,0,1,0,0,1,0,1), // 2
MAKE_BINARY (0,0,0,0,1,1,0,1), // 3
MAKE_BINARY (1,0,0,1,1,0,0,1), // 4
MAKE_BINARY (0,1,0,0,1,0,0,1), // 5
MAKE_BINARY (0,1,0,0,0,0,0,1), // 6
MAKE_BINARY (0,0,0,1,1,1,1,1), // 7
MAKE_BINARY (0,0,0,0,0,0,0,1), // 8
MAKE_BINARY (0,0,0,0,1,0,0,1), // 9
但是,这有一个小问题。板上有五个 74HC595 移位寄存器,它们与 LED 相连,如下所示:
这不是您在设计东西时通常想要做的事情,至少我尝试将其保持为 8 位(1 SR)/ 7 段,并在最后处理其余部分。
正如我已经提到的,这是纯粹的黑客行为,我没有原始代码或原理图。我想就如何操作 7 个字节以将其分解为以下内容寻求一些帮助:
- 5 个字符
- 21个布尔变量来设置其他一切
我已经开始考虑一个 56 位长的变量和一个巨大的 switch-case 结构来设置每个字符,但是应该有其他更好的解决方案。
谢谢您阅读此篇!
欢迎所有建议。