Arduino int в байт

Я делаю 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 или 1, на основе repeatDigitсначала вы должны указать 8-битное значение, а не 7-битное: b1111110**0**не b1111110, Так как b1111110 действительно b01111110что не то, что вы хотите.

Далее, не используйте int, Вам нужно 8-разрядное целое число без знака и только его младший бит. Итак, вы хотите:

uint8_t repeatDigit;

Теперь вы можете сделать:

b10110110 | (repeatDigit & 0b00000001), // = 5

Это добавляет младший бит repeatDigit в LSB из b10110110, Так что если repeatDigit это 0, b10110110 останется прежним, и если оно будет равно 1, оно станет b10110111,

Другие вопросы по тегам