Подключение LCD экрана WG12864B (KS0108) к Arduino


Всем привет!
Настоящая инструкция является вольным переводом известной статьи, расположенной на портале Arduino.cc.


Подключение графического жк экрана к Arduino, является довольно простой задачей, что мы и докажем. Возьмём графический экран, например WinStar WG12864B-TML-T, и загрузим специальную библиотеку по работе с ЖК экранами GLCD v3 в Arduino IDE. Для установки библиотеки, её нужно просто скопировать в папку librares, которая находится в папке Arduino IDE.
Теперь приступим к подключению экранчика. Так как существует огромное множество различных экранчиков, то и подключение у них может быть разное. Распределим все экраны на четыре варианта:

Вариант A:
HDM64GS12L-4
Crystalfontz CFAG12864B 
Sparkfun LCD-00710CM
NKC Electronics LCD-0022
WinStar WG12864B-TML-T

Вариант B:
HDM64GS12L-5
Lumex LCM-S12864GSF
Futurlec BLUE128X64LCD
AZ Displays AGM1264F
Displaytech 64128A BC
Adafruit GLCD
DataVision DG12864-88
Topway LM12864LDW
Satistronics RT12864J-1
Digitron SG12864J4
Неизвестный производитель QY-12864F
Неизвестный производитель TM12864L-2
Неизвестный производитель 12864J-1
Huahong Technology Ltd LMG12864 (LMG-SSC12A64DRY(-H) вариант, жёлто-зелёная подсветка, чёрное на зелёном)
Sure Electronics DE-LM105
Wide.hk «LCD Shield Pro + GLCD 128×64 LCD»

Вариант C:
Shenzhen Jinghua Displays Co Ltd. JM12864

Вариант D:
Дисплеи с разрешением 192 x 64:
Производитель/Модель/Чип/Ток
Wintek- Cascades/WD-G1906G/KS0108B/-7.5 to -10v
Wintek — GEN/WD-G1906G/KS0108B/-7.5 to -10v
Wintek/WD-G1906G/S6B0108A/-9.5 to -12v
TECDIS/Y19061/HD61202/-7.5 to -10v
Varitronix/MGLS19264/HD61202/-8.5 to -10.5v

Подсветке требуется 4.7v, рекомендуется использовать резистор на 10-12 Ом от +5v.
В ks0108_Manual_Config.h требуется изменить разрешение как показано ниже.
1. define DISPLAY_WIDTH 192
2. define DISPLAY_HEIGHT 64
и
1. elif glcd_CHIP_COUNT == 3
2. define glcd_CHIP0 glcdCSEL1,LOW, glcdCSEL2,LOW
3. define glcd_CHIP1 glcdCSEL1,LOW, glcdCSEL2,HIGH
4. define glcd_CHIP2 glcdCSEL1,HIGH, glcdCSEL2,LOW

В зависимости от используемого экранчика, осуществляем подключение к Arduino, согласно таблице:

Если вы используете экранчик WinStar WG12864B-TML-T, то поменяйте местами подключения 12 и 13 порта, получится что 12 пин подключается к alog1, а 13 пин подключается к alog0. Для подключения подсветки, используйте резистор на ~250 Ом. Пример подключения экранчика к плате Arduino:

Теперь настало время написать тестовый код.

Код программы:

  #include <ks0108.h>  // заголовки
  #include <Arial14.h>  // шрифт Arial.
  #include "SystemFont5x7.h"   // системный шрифт
  #include "ArduinoIcon.h"     // картинка Arduino
  unsigned long startMillis;
  unsigned int iter = 0;
void setup(){
  GLCD.Init(NON_INVERTED);   // инициализируем библиотеку
  GLCD.ClearScreen();
  GLCD.DrawBitmap(ArduinoIcon, 32,0, BLACK); // рисуем картинку Arduino
  delay(3000);
  GLCD.ClearScreen();
  GLCD.SelectFont(System5x7);       // выбираем шрифт
}
void loop(){ // главный бесконечный цикл
  startMillis = millis();
  while( millis() - startMillis < 1000){ // цикл для одной секунды
    GLCD.DrawRect(0, 0, 64, 61, BLACK); // рисуем квадрат в левой части экрана
    GLCD.DrawRoundRect(68, 0, 58, 61, 5, BLACK);  // рисуем квадрат с округлыми краями в правой части экрана
    for(int i=0; i < 62; i += 4) // рисуем графику
      GLCD.DrawLine(1,1,63,i, BLACK);
    GLCD.DrawCircle(32,31,30,BLACK);
    GLCD.FillRect(92,40,16,16, WHITE);
    GLCD.CursorTo(5,5);               // перемещаем курсор для вывода текста
    GLCD.PrintNumber(++iter);         // печатаем текущую итерацию курсора
  }
  // вывод на экран чило кадров в секунду
  GLCD.ClearScreen();               // чистим экран
  GLCD.CursorTo(13,2);              // перемещаем курсор
  GLCD.Puts("FPS= ");               // печатаем текст
  GLCD.PrintNumber(iter);           // печатаем число
 }

Если вы всё подключили правильно, то после загрузки программы на устройство на экране должна появиться анимация и подсчёт кадров.
Прежде чем заливать программу в Arduino, отсоедините экранчик от платы, чтобы прошивка прошла без сбоев (у меня процесс не пошёл, пока не отсоединил экранчик).

Для работы с экранчиком предназначен ряд процедур.
GLCD.Init(invert) — инициализация структур для нормального или инверсного режима.
GLCD.GotoXY(x,y) — перемещает курсор в указанную позицию. 0,0 — позиция крайнего верхнего левого пикселя.
GLCD.ClearScreen() - очистка экрана.
// Графические функции (цвет WHITE чистит пиксели, цвет BLACK заполняют пиксели)
GLCD.DrawCircle(x, y, radius, color) — рисование окружности с центром в позиции x,y.
GLCD.DrawLine(x1,y1,x2,y2,color) — рисование линии из точки x1,y1 в x2,y2.
GLCD.DrawVertLine(x, y, length, color) — рисование вертикальной линии
GLCD.DrawHoriLine(x, y, length, color) — рисование горизонтальной линии
GLCD.DrawRect(x, y, width, height, color) — рисование прямоугольника
GLCD.DrawRoundRect(x, y, width, height, radius, color) — рисование прямоугольника с закруглёнными краями
GLCD.FillRect(x, y, width, height, color) — рисование заполненного прямоугольника
GLCD.InvertRect(x, y, width, height) — инвертирование пикселей в области заданного прямоугольника
GLCD.SetInverted(invert) — установка режима рисования в инвертированном режиме
GLCD.SetDot(x, y, color) — рисование точки
GLCD.DrawBitmap(bitmap, x, y, color) — рисование картинки в указанном месте
// Функции по работе с текстом
GLCD.SelectFont(font, color ) - выбор шрифта, по умолчанию чёрного цвета
GLCD.PutChar(character) — печать символа в текущую позицию
GLCD.Puts(string) — печать строки в текущей позиции курсора
GLCD.Puts_P(string) — напечатать строку из программной памяти, в текущую позицию курсора
GLCD.PrintNumber(number) — печать цифры в текущую позицию курсора
GLCD.CursorTo(x, y) - перевод курсора в желаемую позицию
Вот и всё! Вместе с библиотекой поставляется набор интересных примеров, которые безусловно помогут вам в вашей работе!

Вместе с библиотекой идёт целый ряд интересных примеров, советую ознакомиться! 😉

Если немного поэкспериментировать, то можно сделать очень интересные вещи!

Если найдёте неточности, сообщайте!


0 комментариев на «“Подключение LCD экрана WG12864B (KS0108) к Arduino”»

    • К сожалению не подскажу. Если интересно то подобного рода музыку можно услышать на канале Cyber Space.

Добавить комментарий

Arduino

Что такое Arduino?
Зачем мне Arduino?
Начало работы с Arduino
Для начинающих ардуинщиков
Радиодетали (точка входа для начинающих ардуинщиков)
Первые шаги с Arduino

Разделы

  1. Преимуществ нет, за исключением читабельности: тип bool обычно имеет размер 1 байт, как и uint8_t. Думаю, компилятор в обоих случаях…

  2. Добрый день! Я недавно начал изучать программирование под STM32 и ваши уроки просто бесценны! Хотел узнать зачем использовать переменную типа…

3D-печать AI Arduino Bluetooth CraftDuino DIY Google IDE iRobot Kinect LEGO OpenCV Open Source Python Raspberry Pi RoboCraft ROS swarm ИК автоматизация андроид балансировать бионика версия видео военный датчик дрон интерфейс камера кибервесна манипулятор машинное обучение наше нейронная сеть подводный пылесос работа распознавание робот робототехника светодиод сервомашинка собака управление ходить шаг за шагом шаговый двигатель шилд юмор

OpenCV
Робототехника
Будущее за бионическими роботами?
Нейронная сеть - введение