Что означает display.setSegments(&segto, 1, 1); делать?
Я использую дисплей TM1637 для своего Arduino Uno. Цель состояла в том, чтобы просто осветить одну точку двоеточия посередине, что кажется невозможным. Во время исследования я наткнулся на следующий фрагмент, который я не совсем понимаю:
uint8_t segto;
int value = 1244;
segto = 0x80 | display.encodeDigit((value/100)%10);
display.setSegments(&segto, 1, 1);
Хорошо, строка 1, кажется, объявляет s.th. как char, беззнаковое 8-битное целое. Строка 2 должна быть чистой. Строка 3: Символ трубы, кажется, является своего рода дополнением — никогда раньше такого не было. Остальное мне тоже непонятно - зачем эти странные вычисления передавать значение (здесь 2) в .encodeDigit() ? Наконец, строка 4: Почему в функцию передается адрес 'segto', а не просто значение?
Все это заканчивается показом "2:" на дисплее. Я получил фрагмент из этого «руководства»: https://robojax.com/learn/arduino/robojax-TM1637_display_manual. pdf
Возможно, это поможет немного осветить ситуацию
@data-research, 👍0
1 ответ
Лучший ответ:
Сначала возьмем самую сложную строку. Начнем с "изнутри" наружу.
segto = 0x80 | display.encodeDigit((value/100)%10);
Самый внутренний бит:
value/100
Это дает вам 12 из 1244.
Тогда есть модуль 10.
12%10
Это дает вам 2 (разделите на 10 и верните остаток - 12/10 = 1,2 или 1 остаток 2)
Затем он передается через функцию, которая вычисляет, какие сегменты нужно включить, чтобы представить цифру 2. Допустим, это 00110111
в двоичном формате, где каждый бит представляет отображаемый сегмент.
К этому вы хотите добавить двоеточие, которое стоит на месте старшего бита. Итак, вы установили этот бит. Это делается с помощью оператора OR
, который в C равен |
. 0x80
равно 10000000
в двоичном формате.
ИЛИ два значения вместе:
00110111 10000000 ======== 10110111
Затем это значение присваивается переменной segto
.
Я не знаком с этой библиотекой, но могу предположить, что функция setSegments
ожидает массив настроек сегмента, количество цифр, к которым она применяется, и, возможно, смещение цифр в дисплей (наверное).
В C нет реальной разницы между использованием массива из 1 элемента и использованием переменной и получением ее адреса.
С тем же успехом вы могли бы использовать:
00110111
10000000
========
10110111
Если бы вы вводили более одной цифры, вам все равно хотелось бы использовать массив.
- Как отображать переменные на 0,96-дюймовом OLED-дисплее с библиотекой u8glib?
- Как отобразить переменные с плавающей запятой на OLED-дисплее (0,96 дюйма)
- Сохранение файла .txt на SD-карту и чтение данных каждого содержимого в файл txt, а затем сохранение его в переменной
- Пользовательская функция сна для Nextion
- Объявленная переменная внутри void setup не видится в void loop
- Как узнать максимальное используемое пространство стека?
- Хранить переменную?
- Как заставить текст мигать на экране ssd1306 i2c