Я делаю 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 или 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
,
Других решений пока нет …