// в майн // загрузка знакогенератора (символы "стрелка вверх" и "стрелка вниз") 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 переточить для вывода из массива кириллицы.
Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.
Компания 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.
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения