Решил тут недавно поработать с экранчиком WG12864 и оформил результаты в виде небольшой библиотеки для WinAVR. Используя эту библиотеку можно рисовать точку, линию, прямоугольник, круг, символ и строку на экране (поддержка английских и русских символов), можно настроить, чтобы графика выводилась на белом фоне или на черном. Конечно, можно еще совершенствовать эту библиотеку, но это буду делать по мере использования дисплея.
Итак, эта библиотека подходит для ЖКИ с управляющим контроллером KS0108. Состоит из трех файлов — lcd12864.h, lcd12864.c, chars.h. Файл chars.h содержит коды символов, а файлы lcd12864.h и lcd12864.c и есть собственно библиотека для работы с дисплеем. Подключается аналогично библиотеке символьного ЖКИ — Подключение библиотеки символьного ЖКИ в WinAVR.
Хотя, кратко и здесь опишу подключение:
- Создаем проект в WinAVR и копируем файлы библиотеки в папку с проектом.
- Добавляем в основном файле программы заголовочный файл lcd12864.h.
- В Makefile, в разделе SRC=$(TARGET).c добавляем через пробел файл lcd12864.c. Должно получиться так: SRC=$(TARGET).c lcd12864.c.
- Теперь можем работать с функциями дисплея.
В конце статьи можно скачать библиотеку и пример подключения дисплея в Proteus’e. Библиотеку подключили, теперь нужно разобраться к каким ножкам МК подключать дисплей. Для этого в файле lcd12864.h есть такие строчки
Порт помеченный LCD_ подключается к шине данных дисплея, а c порта CMD_ подаются управляющие сигналы. Дальше перечисляются биты управляющего порта МК, к которым подключены управляющие сигналы.
Так как включаться управляющий контроллер может разным уровнем сигнала на CS1 и CS2, ввел параметр CS, которым мы и будем определять каким уровнем включить контроллер дисплея. Параметр MODE служит для определения фона рисования. MODE=0 — белый фон и черная графика, MODE=1 — черный фон и белая графика. Дальше в заголовочном файле lcd12864.h перечисляются функции для работы с дисплеем, реализацию которых можно посмотреть в lcd12864.c.
Рассмотрим все функции:
В общем-то, многие управляющие функции совпадают с функциями описанными в статье — Работа с графическим LCD WG12864C. Для рисования линии и круга используется алгоритм Брэзенхема. В википедии можно найти уже готовые функции реализации алгоритма на языке С. Для адаптирования этих функций под WinAVR требуются минимальные изменения. Для проверки этой библиотеки использовал дисплей WG12864C. У этого дисплея точки на экране вытянуты по вертикали, поэтому рисовать круг не получается — рисуется вытянутый по вертикали эллипс. Если взять дисплей с квадратными пикселями, получится довольно красивый круг.
Важно!!!
- Библиотека проверена на частотах работы микроконтроллера от 1 до 4 МГц. При других частотах нужно подбираться другие задержки в функциях.
- При работе библиотеки в Proteus’e и в реальном железе есть отличия в задержках в функции вывода точки на экран. В модели — перед считыванием данных с дисплея достаточно задержки 1мкс, а в реальном устройстве — задержка увеличивается до 10мкс, иначе не читает данные и на экране выводятся точки в разных местах дисплея. Эта строка помечена комментарием в файле lcd12864.c.
Вот собственно и все. Пишите отзывы, пожелания, что работает, что нет.
В ближайших планах:
- Хочу сделать отдельную функцию, чтобы в нее передавался параметр MODE, чтобы, например, вся графика выводится на белом фоне, а какой-то кусок графики на черном.
- Рисование дуги.
- При выходе строки за пределы экрана, строка переносится на следующую строку. Сейчас этого нет.
Подключил библиотеку к avr studio на atmega128 12Мгц
Работает очень медленно, приведенный пример отрисовывается почти за 3 секунды. Что можно сделать чтоб ускорить?
Подскажите, почему написано что это библиотека для WinAVR, неужели её нельзя использовать для CVAVR или аврстудии?
думаю с незначительными изменениями можно, но я не проверял
поставьте внешний кварц на 16мгц и прошейте бит фьюзы соответственно