Что означает 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

Возможно, это поможет немного осветить ситуацию

, 👍0


1 ответ


Лучший ответ:

0

Сначала возьмем самую сложную строку. Начнем с "изнутри" наружу.

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

Если бы вы вводили более одной цифры, вам все равно хотелось бы использовать массив.

,