Страница 1 из 1
Блок для дисплея на чипе HD44780
Добавлено: 28 июл 2020, 21:54
notfun
Добрый день, форумчане!
Очень часто в своих проектах приходиться выводить информацию на дисплеи, он есть в стандартных блоках. Для изменения адреса, строки и столбца нужно входить в сам блок и проводить редактирование в нем. Очень хочется делать это с помощью переменных и вносить изменение в ходе проекта с помощью входов на это блок, то есть в проекте 1 блок для дисплея и в зависимости от требований и блока выбора sel я мог бы перемещаться по строкам и столбцам. Такой блок я написал, но есть проблема при обращении к нему он не затирает старые символы, что были записаны ранее. Может кто помочь "допилить" или указать на ошибку?
Блок для дисплея на чипе HD44780
Добавлено: 28 июл 2020, 22:25
Labu559
notfun писал(а): 28 июл 2020, 21:54
есть проблема при обращении к нему он не затирает старые символы
Если только проблема в очистке, то
Код: Выделить всё
if (En) {
lcd.clear(); // Очистка дисплея
--Stroka;
--Stolbec;
lcd.setCursor(Stolbec, Stroka); // Установка курсора в начало первой строки
lcd.print(D); // Набор текста на первой строке
}
Блок для дисплея на чипе HD44780
Добавлено: 28 июл 2020, 23:12
notfun
я так пробовал, не работает, так как при 1 на входе En - в каждом цикле программы будет происходить очистка дисплея. По логике, нужно очистить при каждом новом обращении. Возможно добавить вход "Clr" и перед ним детектор изменения числа
Блок для дисплея на чипе HD44780
Добавлено: 28 июл 2020, 23:26
notfun
Вроде получилось, спасибо. добавил вход Clr, и условие при 1 на вход очистит дисплей, буду использовать в связке с rtrig и входом En
Блок для дисплея на чипе HD44780
Добавлено: 28 июл 2020, 23:28
Labu559
notfun писал(а): 28 июл 2020, 23:12
так как при 1 на входе En - в каждом цикле программы будет происходить очистка дисплея
А для чего, тогда по Вашему вход Еn, что-бы блок бомбил в каждом цикле при статичных данных? Ставьте детектор изменения данных на вход Еn- это и есть его основное назначение. Очистка дисплея необходима если предыдущие данные длиннее текущих, её менее ресурсозатратно сделать всякий раз при смене данных, чем анализировать эти данные.
Блок для дисплея на чипе HD44780
Добавлено: 28 июл 2020, 23:33
notfun
av писал(а): 28 июл 2020, 23:23
[ref]notfun[/ref], а почему вы не используете хоть на каждый символ строк по блоку ? Понимаю что блоков будет куча и не красиво, но новый добавленный блок не займет слишком много памяти (допустим выводите слово из пяти символов одним блоком или пять символов пятью блоками разница будет небольшой). Единственная проблема в управлении этими блоками когда на какой блок нужно подать сигнал на вывод на дисплей или отключить вывод на дисплей.
Например я хочу вводить номер телефона в епром используя дисплей и енкодер. Получается на каждый символ мне придется ставить свой дисплей с фиксированной строкой и столбцом. А могу использовать счетчик для перемещения по строке, значение с счетчика прицепить к входу блока дисплея "stolbec" и крутя энкодер двигаться по номеру для редактирования нужного числа
Отправлено спустя 4 минуты 22 секунды:
Labu559 писал(а): 28 июл 2020, 23:28
notfun писал(а): 28 июл 2020, 23:12
так как при 1 на входе En - в каждом цикле программы будет происходить очистка дисплея
А для чего, тогда по Вашему вход Еn, что-бы блок бомбил в каждом цикле при статичных данных? Ставьте детектор изменения данных на вход Еn- это и есть его основное назначение. Очистка дисплея необходима если предыдущие данные длиннее текущих, её менее ресурсозатратно сделать всякий раз при смене данных, чем анализировать эти данные.
Я пробовал добавить как Вы написали, наблюдал мерцание дисплея, для себя сделал вывод, что очистка в каждом цикле
Блок для дисплея на чипе HD44780
Добавлено: 28 июл 2020, 23:42
ecoins
У стандартного блока есть совокупность достоинств, но есть и недостатки:
1. Он "тормозит" работу основной программы. Порой существенно.
2. Он работает со строковыми переменными - это и память, и время, и сложность формирования поля при изменении параметров.
3.
notfun писал(а): 28 июл 2020, 21:54
Для изменения адреса, строки и столбца нужно входить в сам блок и проводить редактирование в нем. Очень хочется делать это с помощью переменных и вносить изменение в ходе проекта с помощью входов на это блок, то есть в проекте 1 блок для дисплея и в зависимости от требований и блока выбора sel я мог бы перемещаться по строкам и столбцам. Такой блок я написал, но есть проблема при обращении к нему он не затирает старые символы, что были записаны ранее. Может кто помочь "допилить" или указать на ошибку?
-----------------------
В основном эти проблемы решены блоками и библиотекой ecoins. Поддерживает русификацию для дисплеев с прошитой кириллицей.
Но там иные походы работы по сравнению со стандартным блоком.
Блок для дисплея на чипе HD44780
Добавлено: 28 июл 2020, 23:49
notfun
ecoins писал(а): 28 июл 2020, 23:42
В основном эти проблемы решены блоками и библиотекой ecoins. Поддерживает русификацию для дисплеев с прошитой кириллицей.
Но там иные походы работы по сравнению со стандартным блоком.
Спасибо, посмотрю в этом направлении
av писал(а): 28 июл 2020, 23:42
Сделайте в коде по условию "if" сравнение старого значения на входе и нового, а так же сравнение старых координат с новыми и если они не равны очищайте командой очистки и выводите новое значение или старое значение но по новым координатам.
Буду экспериментировать, спасибо за совет. Но в случае с номером телефона затрется все, кроме текущей выводимой позиции. Пока использую вход En с rtrig для первоначальной очистки.
Блок для дисплея на чипе HD44780
Добавлено: 29 июл 2020, 00:23
notfun
av писал(а): 29 июл 2020, 00:03
Если да, тогда следующий вопрос как вы раскладываете строку для последующего ее изменения ?
Прямо сейчас думаю над этим вопросом, в мыслях после достижения определенной ячейки будет сообщение о сохранении номера, если подтверждаю, то собранная из строки UlongInt запишу в епром, если нет счетчик возвращается в 1 ячейку с номером