Arduino int成一个字节

时间:2018-04-30 20:35:19

标签: c++ arduino int byte seven-segment-display

我正在做一个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段显示没有正确显示数字

1 个答案:

答案 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