Samou4ka » 🐞 AVR.Начинающим » Библиотека графического LCD 128×64

Библиотека графического LCD 128×64

Решил тут недавно поработать с экранчиком WG12864 и оформил результаты в виде небольшой библиотеки для WinAVR. Используя эту библиотеку можно рисовать точку, линию, прямоугольник, круг, символ и строку на экране (поддержка английских и русских символов), можно настроить, чтобы графика выводилась на белом фоне или на черном. Конечно, можно еще совершенствовать эту библиотеку, но это буду делать по мере использования дисплея.

Итак, эта библиотека подходит для ЖКИ с управляющим контроллером KS0108. Состоит из трех файлов — lcd12864.h, lcd12864.c, chars.h. Файл chars.h содержит коды символов, а файлы lcd12864.h и lcd12864.c и есть собственно библиотека для работы с дисплеем. Подключается аналогично библиотеке символьного ЖКИ — Подключение библиотеки символьного ЖКИ в WinAVR.

Хотя, кратко и здесь опишу подключение:

  1. Создаем проект в WinAVR и копируем файлы библиотеки в папку с проектом.
  2. Добавляем в основном файле программы заголовочный файл lcd12864.h.
  3. В Makefile, в разделе SRC=$(TARGET).c добавляем через пробел файл lcd12864.c. Должно получиться так: SRC=$(TARGET).c lcd12864.c.
  4. Теперь можем работать с функциями дисплея.

В конце статьи можно скачать библиотеку и пример подключения дисплея в Proteus’e. Библиотеку подключили, теперь нужно разобраться к каким ножкам МК подключать дисплей. Для этого в файле lcd12864.h есть такие строчки

#define LCD_PORT PORTD
#define LCD_DDR DDRD
#define LCD_PIN PIND
#define CMD_PORT PORTC
#define CMD_DDR DDRC
#define DI 0
#define RW 1
#define E 2
#define RST 3
#define CS1 4
#define CS2 5
#define CS 0//0 или 1 — в зависимости от уровня которым включается контроллер 
#define MODE 0// 0 — белый фон и черная графика, 1 — черный фон и белая графика

Порт помеченный LCD_ подключается к шине данных дисплея, а c порта CMD_ подаются управляющие сигналы. Дальше перечисляются биты управляющего порта МК, к которым подключены управляющие сигналы.

Так как включаться управляющий контроллер может разным уровнем сигнала на CS1 и CS2, ввел параметр CS, которым мы и будем определять каким уровнем включить контроллер дисплея. Параметр MODE служит для определения фона рисования. MODE=0 — белый фон и черная графика, MODE=1 — черный фон и белая графика. Дальше в заголовочном файле lcd12864.h перечисляются функции для работы с дисплеем, реализацию которых можно посмотреть в lcd12864.c.

Рассмотрим все функции:

void LCD12864_Com(unsigned char cmd) — посылка команды ЖКИ.
void LCD12864_Data(unsigned char data) — посылка данных ЖКИ.
void LCD12864_Clr() — очистка экрана.
void LCD12864_GotoXY(unsigned char x, unsigned char y) — установка координат, x — строка(0..8), y — столбец(0..127).
void LCD12864_Init() — инициализация ЖКИ.
void LCD12864_Point(unsigned char x, unsigned char y) — рисование точки на экране, x — координата х (0..63), y — координата y (0..127).
int LCD12864_abs(int x) — возвращает абсолютное значение числа.
int LCD12864_sign(int x) — возвращает знак числа.
void LCD12864_Line(unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2) — рисование линии, используется алгоритм Брэзенхема. (x1,y1) — координаты начальной точки (x1 — 0..64, y1 — 0..127), (x2,y2) — координаты конечной точки.
void LCD12864_Rect(unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2) — рисование квадрата по координатам двух точек
void LCD12864_Ellipse(unsigned char x0, unsigned char y0, unsigned char radius) — рисование круга — x0, y0 — координаты центра, r — радиус круга.
void LCD12864_Char(unsigned char x0, unsigned char y0, unsigned char code) — x0 — строка(0..8), y0 — столбец(0..127), code — символ.
void LCD12864_String(unsigned char x0,unsigned char y0,char* buffer, unsigned char count) — функция выводит строку на экран. x0 — строка(0..8), y0 — столбец, buffer — текст, count — длина текста.

В общем-то, многие управляющие функции совпадают с функциями описанными в статье — Работа с графическим LCD WG12864C. Для рисования линии и круга используется алгоритм Брэзенхема. В википедии можно найти уже готовые функции реализации алгоритма на языке С. Для адаптирования этих функций под WinAVR требуются минимальные изменения. Для проверки этой библиотеки использовал дисплей WG12864C. У этого дисплея точки на экране вытянуты по вертикали, поэтому рисовать круг не получается — рисуется вытянутый по вертикали эллипс. Если взять дисплей с квадратными пикселями, получится довольно красивый круг.

Важно!!!

  1. Библиотека проверена на частотах работы микроконтроллера от 1 до 4 МГц. При других частотах нужно подбираться другие задержки в функциях.
  2. При работе библиотеки в Proteus’e и в реальном железе есть отличия в задержках в функции вывода точки на экран. В модели — перед считыванием данных с дисплея достаточно задержки 1мкс, а в реальном устройстве — задержка увеличивается до 10мкс, иначе не читает данные и на экране выводятся точки в разных местах дисплея. Эта строка помечена комментарием в файле lcd12864.c.

Вот собственно и все. Пишите отзывы, пожелания, что работает, что нет.

В ближайших планах:

  1. Хочу сделать отдельную функцию, чтобы в нее передавался параметр MODE, чтобы, например, вся графика выводится на белом фоне, а какой-то кусок графики на черном.
  2. Рисование дуги.
  3. При выходе строки за пределы экрана, строка переносится на следующую строку. Сейчас этого нет.

Datasheet WG12864C-TFH-VN

Как вам статья? Ваша реакция:
+1
0
+1
0
+1
0
+1
0
+1
0
+1
0
Расскажите друзьям:
Оцените статью:

4 комментария

  • Подключил библиотеку к avr studio на atmega128 12Мгц

    Работает очень медленно, приведенный пример отрисовывается почти за 3 секунды. Что можно сделать чтоб ускорить?

  • Подскажите, почему написано что это библиотека для WinAVR, неужели её нельзя использовать для CVAVR или аврстудии?

Оставить комментарий