// в майн // загрузка знакогенератора (символы "стрелка вверх" и "стрелка вниз") LCDcommand((1<<LCD_CGRAM)); for(a=0; a<16; a++) { LCDdata(updown_symbols[a]); }
LCDdata(0); LCDdata(1); // вывод на экран загруженных стрелочек
Данный пример выдернул из рабочей поделки, грузит только 2 символа (стрелочки) Но как писали коллеги выше, только 8 символов можно загрузить одновременно
ps
и вроде как, если биты порта идут по порядку, в библиотеке это место:
aleksey chilov, написание/исправление чужого кода - это работа в 3 раза больше: сначала программист-помощник должен понять, как Вы написал метод, например. по pdf, потом что Вы пропустили или накосячили, в-третьих: с Ваши уже сделани готовые функции программист-помощник должен написать новые функции. Лучше всего находите свой пропуск самостоятельно .
Что я вижу: Вы загружаете букву 'Д' в ячейку 0 в CGRAM. ОК. Второе: Вызовите знак 'Д'. А компилятор еще не знает, что это 'Д'. Он знает, что есть data в ячейка 0. На более позднем этапе, если необходимо, в другой функции свяжете ячейку 0 с 'Д'.
Вместо LCDstring("Д", 3, 0) попробуйте LCDdata(uint8_t(0)); 'Д' должен загореться. --- И вопрос: в стремлении к универсальности: действительно ли Вам нужны все эти функции для работы с LCD-дисплеем? Обнаружил, что для "малых" и "средних" МК лучше всего подходит конкретное написание, без универсальности.
Последний раз редактировалось veso74 Ср ноя 30, 2022 15:30:29, всего редактировалось 4 раз(а).
Мужики. Давайте я скину библиотеку свою ( что я использую ) вы посмотрите её и может быть подскажете как мне в ней добавить функцию записи в CGRAM и вывода оттуда?
Я не знаю Си, потому могу только на словах рассказать как записывается пользовательский символ… ну а как его выводить на экран, так это как и все остальные символы согласно указанного адреса… обычно применяют два способа вывода символа на экран: 1 указывают непосредственно адрес знака. 2 компилятор сам подставляет адрес знака согласно кодировке ASCII.
Второй способ применяется когда в программе символ указан в кавычках (к примеру "D") и тогда компилятор в место символа вставляет соответствующий код ASCII, это будет $44 (68)… в дисплее стандартные символы латиницы соответствуют кодам ASCII, но чтобы выводить и иные символы, то лучше указывать непосредственно адрес напрямую… то есть если записали допустим пользовательский символ Ж по адресу $00 то чтобы его вывести на экран, необходимо указывать непосредственно этот адрес $00 где непосредственно находится данный символ… ежели написать в кавычках данный символ ("Ж"), то компилятор подставит соответствующий код ASCII, а это соответственно будет $86 (134)… в индикаторе по данному адресу (если память полностью задействована) окажется другой знак, но в большинстве случаях по данному адресу ничего нет и тогда на экран будет выведен как бы пробел (нет символа)…
Заголовок сообщения: Помогите с кодом на си для AVR (Atmega8)
Добавлено: Чт дек 01, 2022 16:52:22
Встал на лапы
Зарегистрирован: Вс мар 27, 2022 09:38:17 Сообщений: 115
Рейтинг сообщения:0
Добрый вечер участникам! Снова прошу пощи. Как вывести русский символ я уже понял. А вот как вывести строку из двухмерного массива ну ни как не получается. Что-то делаю не так. Подсобите пожалуйста кому не сложно. Фотки кода который используется я приложил. Не могу функцию LCD_string переточить для вывода из массива кириллицы.
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Это макрос. В зависимости от того, используется ли ножка RW (чтение/запись) дисплея или нет, вызывается либо чтение дисплея до тех пор, пока бит BF не уйдет, либо если RW-ножка не используется, то в WAIT стоит небольшая задержка для того, чтобы в дисплей не писалось быстрее, чем он может принимать. На практике - 43 мкс минимум для всех команд и данных кроме двух. В принципе, если МК работает медленно, на 8 МГц, то можно не использовать задержек, там и так всё уложится.
Да, но это был код для дисплея С КИРИЛЛИЦЕЙ! А раз в вашем дисплее её нет, то он не подойдет. Вернее, подойдет только в части вывода латиницы.
Смотря где массив строки расположен. Или это стандартные сообщения из ПЗУ или специальный раздел "подставной строки" в ОЗУ. У АВРок разное обращение к таким массивам...
aleksey chilov, в поисках фрагмента кода, который Вы предоставили, я наткнулся вероятно на авторскую страницу кода. Можете найти информацию полезной. В приведенном примере LCD дисплей печатает массив кириллических букв.
Перед использованием функции LCDline_of_flash, нужно фо флеш память вклинить например такую строку в конце не забываем символ 0 вставить, иначе эта функция выведет на дисплей всю флеш память МК.
Потом эту строку из флеша выводим на LCD так: LCDline_of_flash(text,0,1);//В позицию 0,1 на русском выведется Привет детка!, если твой LCD поддерживает русские символы.
Заголовок сообщения: Re: Помогите с кодом на си для AVR (Atmega8)
Добавлено: Пт дек 02, 2022 19:23:18
Встал на лапы
Зарегистрирован: Вс мар 27, 2022 09:38:17 Сообщений: 115
Рейтинг сообщения:0
Здравствуйте форумчане опять! Блин ну ни как! Научился выводить по 1-й букве. Где-то прочитал где-то под смотрел что-то изменил и вроде выводит Русские символы но только по 1-му. А вот как зарядить функцию чтоб я мог в неё предать допустим номера массива и чтоб она прописала все 64 бита в CGRAM 0x00-0x07 а потом вытащить ну вообще не вариант! Ни как! всё сыпется всё валится компилятор скоро нах*й меня начнёт по Русски посылать! Вопрос, как сделать функцию? Пример кода. Можно организовать? Хоть посмотреть как это правильно делают...
Возможно, стоит потренироваться передавать массив в функцию, прочитав вначале в книжке Кернигана "Язык программирования Си" как это делается. Допустим имеем маасив байтов char array[10], и нам их надо передать в функцию. Запишем функцию так:
Код:
void Function(char *input) { /* всё, мы приняли указатель на массив *input, теперь можем работать с ним */ Write(*input); // отправляем в функцию Write первый байт принятого массива input++; // передвигаем указатель на следующий байт массива Write(*input); // отправляем второй байт массива input++; // передвигаем указатель на следующий байт /* и так дальше. Можем сделать это в цикле for от 0 до числа байт принятого массива */ }
А можно записать немного иначе, вот так:
Код:
void Function(char *input) { /* а тут с указателем можем работать через индексы как с обычным массивом: */ Write(input[0]); Write(input[1]); Write(input[2]); /* или в цикле for */ }
И передаем массив в функцию, имя массива служит его адресом:
Код:
Function(array);
а если хотим передать в функцию массив не с его начала, а с некоторого энного элемента, надо прямо указать адрес этого элемента через его индекс:
Код:
Function(&array[2]); // передать массив, начиная с третьего элемента (индекс 2)
А зря! Там был раскрыт секрет "как сделать невидимой инфо на дисплее"
Вообще же, работа с текстовой строкой аналогична работе с массивом при передаче его в фукнцию. Потому как текстовая строка в Си представляет собой массив элементов типа char. Чтобы понять, как это все работает, нужно прочитать в книжке про арифметику указателей и про работу с ними вообще. А дисплей-двухстрочник сам по себе имеет механизм автоинкремента позиции выводимого символа и ему не надо вручную указывать новую позицию.
Заголовок сообщения: Re: Помогите с кодом на си для AVR (Atmega8)
Добавлено: Вт дек 06, 2022 07:52:23
Встал на лапы
Зарегистрирован: Вс мар 27, 2022 09:38:17 Сообщений: 115
Рейтинг сообщения:0
Доброе утро всем! Я тут чутка почитал и накалякал вот такое. Подскажите имеет ли право на жизнь вот эта конструкция? Ожидается что она будет из массива пререписывать щт 1-го до 8-ми байт в CGRAM для дальнейшего вывода слов на LCD 1602.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 37
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения