Страница 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

проверил , работает. СПАСИБО.

Сдвиг числ влево.
Добавлено: 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-го знакоместа.
А так да, мы любую программу делаем под конкретный случай.
И тогда пожалуй я бы внёс ещё одно исправление. После блока "Вычитание", я бы поставил переменную. И уже эту переменную подавал на блок MUX. Как мне кажется скорость маленько должна была бы возрасти. Иначе длина строки высчитывается для каждого входа MUX.
[spoiler]
Офтопик
Вот ещё бы попросить автора программы изменить код MUX и DMS. Сделать вместо конструкции if - else if. Скорость выполнения могла бы слегка увеличиться.
[/spoiler]