Подключение 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 128x64 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) — перевод курсора в желаемую позицию
Вот и всё! Вместе с библиотекой поставляется набор интересных примеров, которые безусловно помогут вам в вашей работе!

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

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


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

Комментарии (2)

RSS свернуть / развернуть
+
0
а не подскажете что за музычка в ролике?
avatar

Luan

  • 16 марта 2012, 20:49
+
+1
К сожалению не подскажу. Если интересно то подобного рода музыку можно услышать на канале Cyber Space.
avatar

SinauRus

  • 16 марта 2012, 22:16

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.