我正在做一个7段显示系统,我希望,当我按下按钮时,在数字末尾打开和关闭小球,我知道来自byte seven _seg_digits[10] = {B11111100 // means number 1, ...}
的最后一个数字意味着小球,但我需要将最后一个数字的值更改为1,所以我尝试了这个:
int repeatDigit; // 0 or 1
byte digit;
byte seven_seg_digits[10] = {
B1111110 + repeatDigit, // = 0
B0110000 + repeatDigit, // = 1
B1101101 + repeatDigit, // = 2
B1111001 + repeatDigit, // = 3
B0110011 + repeatDigit, // = 4
B1011011 + repeatDigit, // = 5
B1011111 + repeatDigit, // = 6
B1110000 + repeatDigit, // = 7
B1111111 + repeatDigit, // = 8
B1110011 + repeatDigit // = 9
};
我删除了最后一个数字0并用int“repeatDigit”替换它,它没有给我一个编译错误,但7段显示没有正确显示数字
答案 0 :(得分:0)
我建议您阅读有关按位操作的内容。同时,如果要根据repeatDigit
将最后一位二进制数设置为0或1,则必须先提供一个8位值,而不是7位值:b1111110**0**
,而不是b1111110
。因为b1111110
确实是b01111110
,这不是你想要的。
接下来,请勿使用int
。你需要一个8位无符号整数,只需要它的LSB。所以你想要:
uint8_t repeatDigit;
现在你可以做到:
b10110110 | (repeatDigit & 0b00000001), // = 5
这会将repeatDigit
的LSB添加到b10110110
的LSB。因此,如果repeatDigit
为0,b10110110
将保持不变,如果为1,则会b10110111
。