Бегущая строка в LCD на HD44780.
Поиск "готового решения" бегущей строки на Си результата не дал. Поэтому пришлось делать самому. Этот "кусок" кода позволяет выводить бегущую строку (справа-налево), в любом месте и с использованием любого количества знакомест, в LCD индикаторах с контроллером HD44780 или аналогичном. Первое, на чем нужно остановиться, это то, что язык Си не позволяет работать со строками "напрямую". То есть невозможно скопировать символ из одной строки в другую при помощи оператора присваивания (=)... для этого нужно использовать специальную функцию strncpy(). Вообще говоря, для работы со строками в Си используются несколько функций. В самоМучителях использованию этих функций посвящена отдельная глава. В Help'e на CV_AVR описание функций для работы со троками находится в разделе " String Functions". Прототипы этих функций находятся в файле string.h. "...исходная строка..." - строка символы из которой нужно выводить в "бегущей" строке; "...отображаемые символы..." - собственно "бегущая строка". Для организации бегущей строки выбран такой алгоритм: 1. Отображаемые символы сдвигаются справо налево. Крайний левый при этом "теряется". 2. После сдвига, в крайний правый символ копируется очередной символ из исходной строки. 3. При достижении конца исходной строки, очередным становится первый символ исходной строки. Для сдвига символов - для сдвигаемой ячейки считывается код символа из экранного ОЗУ (DDRAM) HD44780 и записывается в левостоящую ячейку ОЗУ. Согласно DataSheet на HD44780 левый символ верхней строки имеет адрес в DDRAM - 0x00, а левый символ нижней строки - 0x40. При этом нужно помнить, что для того чтобы обратиться именно к экранному ОЗУ (а не к ОЗУ знакогенератора) необходимо чтобы бит RS был равен 1 (RS является старшим битом в байте адреса см.DataSheet). В итоге получаем, что для того чтобы "обратиться" ко второму слева символу верхней строки необходимо "работать" с адресом 0x01 | 0x80 = 0x81. Функции записи и чтения "внутреннего содержимого" HD44780 есть в библиотеке (прототипы в lcd.h ).... поэтому ..собственно программа:
Скорее всего, в каждом из существующих компиляторов Си имеются библиотечные функции для работы с HD44780. Поэтому "переделать" программу под "свой" компилятор не составит труда. Исходную строку я "готовлю" при помощи известной утилиты "HD44780.exe". При ее использовании, в коментариях, указывается длина строки: "/* Maximum length of a line: 43 byte */"
(C)STAS633 01.07.06г. |