Страница 1 из 1

Выравнивание символов по правому краю

Добавлено: 27 дек 2019, 18:28
MTSnik
Всем привет. Возможно плохо искал, но не смог найти на форуме как сдвинуть число влево при подсчете на один символ. Накидал схемку, работает. Единицы,десятки,сотни,тысячи. Но в схеме идет привязка к нескольким блокам дисплеев. Возможно ли как-то по-другому собрать схему чтоб был один блок дисплея и сдвиг осуществлялся через вход?

Сдвиг числ влево.

Добавлено: 27 дек 2019, 18:55
edyapd
Кое-как понял, что вы написали. Сказали бы проще "Как выравнять строку по правому краю на дисплее HD44780?"
Если честно, то я не знаю. Но вашу схему я бы маленько упростил. После поиска длины строки поставил DMS (демультиплексор). И с его помощью выбирал экран.

Сдвиг числ влево.

Добавлено: 27 дек 2019, 19:15
Sancho
[ref]MTSnik[/ref], Скажите, Эдуард, [ref]edyapd[/ref], правильно уловил Вашу затею?
Если да, тоя где-то выкладывал блок.
Но можно и штатными средствами.

Отправлено спустя 2 минуты 3 секунды:
Нарисуйте хотя-бы от руки на бумаге , сфоткайте и выложите зодумку.

Сдвиг числ влево.

Добавлено: 27 дек 2019, 19:36
MTSnik
Верно.
То есть идет перебор чисел. Например единицы (числа от 0...9) располагаются на 16столбце, при переходе с10 до 99 идет отображение 15,16 столбце. Сотни 14,15,16. Тысячи 13,14,15,16 и т.д.

Отправлено спустя 3 минуты 13 секунд:
____________5
___________23
__________100
_________3890
Так

Сдвиг числ влево.

Добавлено: 27 дек 2019, 19:57
Sancho
[ref]MTSnik[/ref], Понял, сейчас набросаю штатными блоками...

Отправлено спустя 16 минут 55 секунд:
Типа так

Отправлено спустя 2 минуты 54 секунды:
Это для неспешных проектов.

Сдвиг числ влево.

Добавлено: 28 дек 2019, 05:52
MTSnik
:smile9: проверил , работает. СПАСИБО. :smile9:

Сдвиг числ влево.

Добавлено: 28 дек 2019, 06:16
MTSnik
По совету Edyapd переделал свой проект, добавил [dms] пришлось еще добавить блок (вычитание). Без него число начинало показ с 19Го столбца.

Отправлено спустя 5 минут 11 секунд:
Как-то так.

Сдвиг числ влево.

Добавлено: 28 дек 2019, 07:26
edyapd
[ref]MTSnik[/ref], уберите блок вычитания. А на первый дисплей возьмите с Q1, второй с Q2 и т.д.

Сдвиг числ влево.

Добавлено: 28 дек 2019, 07:56
MTSnik
Понятно. Исправил.

Сдвиг числ влево.

Добавлено: 28 дек 2019, 08:26
Sancho
[ref]MTSnik[/ref], [ref]edyapd[/ref], По моему - неправильна сама идея по сути в том формате, в котором сейчас есть блок для дисплея. Код - просто монстр...
Если у блока дисплея появится вход позиции - тогда да!
Сама плата №2 в посте 5 имеет всего
несколько строк цикла. И всё.

Код: Выделить всё

//Плата:2
//Наименование:Дополняем пробелами слева
//Комментарии:Значение - сколько хотим получить символов всего
while (_gtv2 != 5) {
_gtv1 = ((String("")) + (_gtv1));
_gtv2 = (_gtv2)+(1);
}
//Плата:3
При желании можно ускорить проект, добавив детектор изменения и обработку переменной при этом.
ИМХО.

Сдвиг числ влево.

Добавлено: 28 дек 2019, 08:39
edyapd
[ref=#ff8000]Sancho[/ref], я разве спорю? Даже более, на основе вашего решения хотел сделать ПБ. Просто если это будет единичный случай, то не хочется заморачиваться. А если это супер нужная вещь, то стоит просить автора программы, чтобы добавил возможность выбора координат через вход.
[ref]MTSnik[/ref], возможно просто не решился добавлять ещё две дополнительные платы.
Просто вы смотрите на код, а он на визуальное восприятие схемы(моё мнение).

Сдвиг числ влево.

Добавлено: 28 дек 2019, 09:03
Sancho
edyapd писал(а): 28 дек 2019, 08:39 хотел сделать ПБ
Не нашёл сначала...
Но там немного по другому.

Сдвиг числ влево.

Добавлено: 28 дек 2019, 09:52
edyapd
Интересно, а так будет работать? У меня такого дисплея нет, чтобы проверить.
сдвиг3_1.flp
Отправлено спустя 2 минуты 33 секунды:
Если так не заработает, тогда надо добавить мультиплексору ещё один вход. На всех входах константу увеличить на один пробел. А вывод на дисплей сдвинуть на одну позицию влево.

Сдвиг числ влево.

Добавлено: 28 дек 2019, 10:18
Sancho
edyapd писал(а): 28 дек 2019, 09:52 Интересно, а так будет работать?
Будет. Только нужно корректно вставить константы :)
Или, что-бы не запутаться, вот так:

Сдвиг числ влево.

Добавлено: 28 дек 2019, 10:48
edyapd
Так я посмотрел, что топикстартер использует только четырёхзначные числа, поэтому и сделал такие константы.
У меня просто сомнения были, что будет на выходе у MUX(а соответственно на входе строкового сумматора), когда на входе будет 4.
Если там будет null, то это как раз то, что надо.
[ref=#ff8000]Sancho[/ref], а ваш проект получается для пятизначных цифр.

Сдвиг числ влево.

Добавлено: 28 дек 2019, 10:53
Sancho
edyapd писал(а): 28 дек 2019, 10:48 а ваш проект получается для пятизначных цифр.
как-бы да, но это только как пример, как идея не запутаться. но есть ещё отрицательные числа, у нас ведь int, а не uint, -12345, а это шесть символов :)
Под каждый конкретный случай делать необходимое - и будет ок.

Сдвиг числ влево.

Добавлено: 28 дек 2019, 11:39
MTSnik
Я привел пример для теста, дальше лень было делать. Поэтому только на 4 цифры. Сборка ув. Sancho на 5, после идет счет сначала.

Сдвиг числ влево.

Добавлено: 28 дек 2019, 12:19
Sancho
Решил, таки, допилить :)
Каждый переделает или сделает дополнительные под свои нужду, при необходимости.

Сдвиг числ влево.

Добавлено: 28 дек 2019, 12:28
edyapd
Sancho писал(а): 28 дек 2019, 10:53 но это только как пример, как идея не запутаться ....
Под каждый конкретный случай делать необходимое
Но тогда и в блоке дисплея надо было исправить. Вывод должен начинаться с 16-го знакоместа.
А так да, мы любую программу делаем под конкретный случай. :yes:
И тогда пожалуй я бы внёс ещё одно исправление. После блока "Вычитание", я бы поставил переменную. И уже эту переменную подавал на блок MUX. Как мне кажется скорость маленько должна была бы возрасти. Иначе длина строки высчитывается для каждого входа MUX.

[spoiler]
Офтопик
Вот ещё бы попросить автора программы изменить код MUX и DMS. Сделать вместо конструкции if - else if. Скорость выполнения могла бы слегка увеличиться.
[/spoiler]