Управление жк через ht1621b

А я запрещал?))
Я лишь показал как сделал бы я (первое что в голову пришло).

Ещё раз здравствуйте! Нужна помощь по скетчу. Имеется переменная Float DIST= 13469. Необходимо каждую цифру из этой переменной вывести отдельно на жк экран. Удалось вывести только первую и последнюю цифру.

uint32_t km1 = DIST;
Write_1621( 18,num[km1 / 10000]);  // зажигаем первую цифру
                                      //зажигаем вторую цифру
                                     //зажигаем третью цифру
                                    //зажигаем четвёртую цифру
Write_1621( 10,num[km1 % 10]);  // зажигаем пятую цифру 

//адреса цифр 1-18 | 2-16 | 3-14 | 4-12 | 5-10. (цифра-адрес)
void setup() {
  Serial.begin(9600);
  
  uint32_t km1 = 12345;
 for(byte n = 10; n < 19; n+=2){
  byte r = (byte)(km1 % 10);
  km1 = km1 / 10;
// Write_1621( n, num[r]);  
  Serial.print("adres = ");//это просто для наглядности
  Serial.println(n);// потом убрать
  Serial.print("num = ");
  Serial.println(r);  // выводим, начиная с младшего разряда
 }  
}

void loop() {
  // put your main code here, to run repeatedly:
}
1 лайк

Послепервая и предпоследняя точно так же.

1 лайк

Ну и выводи так же как и до этого выводил…
Вот для наглядности и понимания:

uint32_t km1 = DIST;
Write_1621(18, num[(km1 / 10000) % 10]);  // зажигаем первую цифру
Write_1621(16, num[(km1 / 1000)  % 10]);  // зажигаем вторую цифру
Write_1621(14, num[(km1 / 100)   % 10]);  // зажигаем третью цифру
Write_1621(12, num[(km1 / 10)    % 10]);  // зажигаем четвёртую цифру
Write_1621(10, num[(km1 / 1)     % 10]);  // зажигаем пятую цифру 

//адреса цифр 1-18 | 2-16 | 3-14 | 4-12 | 5-10. (цифра-адрес)

Общее в формуле проследил?

Чуть подправил и формил код @Дим-мычъ в функцию, получилось вот это:

// Функция выводит с младцего разряда к старшему число number,
// которое передается в качестве аргумента в функцию NumPrint, 
// если число имеет менее 5 разрядов, то вместо старших разрядов будет "пусто"
// Например число 124 выведет так: "  124" (то есть "[пусто][пусто]124")
void NumPrint (uint32_t number) {
  for (uint8_t addr = 10; addr < 19; addr += 2) {
    uint8_t r = (uint8_t)(number % 10);
    Write_1621(addr, ((number > 0 ) ? num[r] : 0x00));
    number = number / 10;
  }
//адреса цифр 1-18 | 2-16 | 3-14 | 4-12 | 5-10. (цифра-адрес)
}
...

uint32_t km1 = DIST;
NumPrint (km1);

1 лайк

Да, тоже думал, но чего-то поленился))

Дык, вроде ж

Если number == 0; то и r == 0, т.е num[0]; // то что надо
Т.е. тоже надо хотябы один 0 выводить, а если запятая есть, то два.
Write_1621(addr, num[r]); // ? Или нет?

А, пардоньте… :smiley:
Про просто ноль я и забыл…
Сейчас добавим :smiley:
Вот так правильнее будет ))

// Функция выводит с младцего разряда к старшему число number,
// которое передается в качестве аргумента в функцию NumPrint,
// если число имеет менее 5 разрядов, то вместо старших разрядов будет "пусто"
// Например число 124 выведет так: "  124" (то есть "[пусто][пусто]124")
void NumPrint (uint32_t number) {

  if (number == 0) {
    Write_1621(10, num[number]);
    for (uint8_t addr = 12; addr < 19; addr += 2) {
      Write_1621(addr, 0x00);
    }
  } else {
    for (uint8_t addr = 10; addr < 19; addr += 2) {
      uint8_t r = (uint8_t)(number % 10);
      Write_1621(addr, ((number > 0 ) ? num[r] : 0x00));
      number = number / 10;
    }
  }
  //адреса цифр 1-18 | 2-16 | 3-14 | 4-12 | 5-10. (цифра-адрес)
}
...

uint32_t km1 = DIST;
NumPrint (km1);
...

uint32_t km1 = DIST;
NumPrint (km1);

А без вот этого:

Число 253 выводилось бы так:

00253

А ноль знаешь как? Вот так:

00000

Мне так не нравится ))

1 лайк

а так у тебя, если число == 0 то вапще ничего не выведется

Я поправил это в #48

Луче па щеччику

Вот так сократил:


void NumPrint (uint32_t number) {

    for (uint8_t addr = 10; addr < 19; addr += 2) {
      uint8_t r = (uint8_t)(number % 10);
      Write_1621(addr, ((number > 0) ? num[r] : ((addr == 10) ? num[r] : 0x00)));
      number = number / 10;
    }
  //адреса цифр 1-18 | 2-16 | 3-14 | 4-12 | 5-10. (цифра-адрес)
}

Вроде бы не накосячил…)))

1 лайк

Вот вы развлекаетесь, а тс закинул запрос и свалил

Чё тут думать, трясти надо!

1 лайк

Мне нравится как ТС приходит сюда за каждым чихом, а как только всей толпой чих решат, он вроде исчезает, но тут же приходит за следующим.

Напомнило пьесу “Драма на системной магистрали”. Автора не помню, но это из 80-х. Вот полный текст. Обратите внимание на ремарку “проходит одна миллисекунда” в конце :slight_smile:

Драма на системной магистрали

Действующие лица:
ПРОГРАММА - программа пользователя
СИСТЕМА - операционная система
КАНАЛ - магистральный канал
ПРИНТЕРљ
ТЕРМИНАЛ
ДИСК
БУФЕР

Действие происходит в обычном компьютере

ПРОГРАММА: - Эй, Система!
СИСТЕМА: - Чего тебе?
ПРОГРАММА. - Цифру “6” напечатать надо.
СИСТЕМА: - Эй, Принтер!
ПРИНТЕР: - Я занят.
ПРОГРАММА: - Тогда, Система, дай еще памяти.
СИСТЕМА: - Нет памяти, пиши на диск. Диск!
ДИСК поднимает флаг готовности: - Вызывали?
СИСТЕМА: - Записать надо!
ДИСК: - Есть!
КАНАЛ: - Система! Для вас получен байт.
СИСТЕМА: - Жди. Диск, записал?
ДИСК: - Нет свободного места.
СИСТЕМА: - Канал! Давай свой байт!
КАНАЛ: - Я уже принял следующий, а старый стер.
СИСТЕМА: - Программа, это тебе прислали байт?
ПРОГРАММА: - Нет.
СИСТЕМА (засовывает байт в буфер): - Терминал! Пользователь что-нибудь нажимал?
ТЕРМИНАЛ: - Нет.
СИСТЕМА: - Программа! Работай дальше.
ПРОГРАММА: - Не могу, цифру “6” напечатать надо.
СИСТЕМА: - Эй, Принтер!
ПРИНТЕР: - Я занят.
КАНАЛ: - Система, для вас получен байт.
СИСТЕМА: - Давай. Программа, это твой байт?
ПРОГРАММА: - Нет.
СИСТЕМА: - Буфер!
БУФЕР: - Я переполнен.
СИСТЕМА выбрасывает байт: - Эй, Принтер!
ПРИНТЕР. - Свободен.
СИСТЕМА: - Печатай цифру “6”.
ПРИНТЕР: - Есть.
СИСТЕМА: - Программа, работай дальше. (Программа работает, проходит одна миллисекунда)
ПРОГРАММА: - Эй, Система! Цифру “7” напечатать надо!

2 лайка

О том и речь… )))

Особенно драматично это сейчас выглядит с гигагерцами) Как всё тормозило, так и тормозит)

И диски террабайтные полны… )))
Если мне память не изменяет, то во времена написания «драмы» диски мегабайтами считались.)