Дисплей 12864b v2.0 (Arduino)

Графический дисплей 12864b v2.0 (ST7920) представляет собой ЖК-матрицу с разрешением в 128  на 64 точек, предназначен для вывода графической и текстовой информации. Поддерживает 8/4-битный параллельный режим работы и поставляется вместе с микросхемой контроллера/драйвера ST7290. Также дисплей поддерживает последовательный режим работы по шине PSB (программный SPI), именно в этом режиме будет работать описанный в этой статье дисплей.

Основное напряжение питания +5 В, дополнительное 3,3 В используется для подсветки дисплея. Рассматриваемый в статье дисплей на плате имеет регулятор контрастности, но может поставляться и без него, тогда на вход Vo подается напряжение с потенциометра (см. схему).

Встроенный потенциометр

Подключение дисплея к Arduino Nano:

Дисплей Arduino
Vss или GND GND
Vdd или VCC  +5V
Vo не используется (см. выше)
RS D12
R/W D11
E D10
PSB GND
BLA
+3.3V
BLK
GND

При работе с дисплее можно использовать библиотеку U8glib , в папке библиотеки много различных примеров скетчей. Установить библиотеку можно через менеджер библиотек Arduino IDE.

Пример 1

#include <U8glib.h> 
#include "rus6x10.h" // http://forum.rcl-radio.ru/misc.php?action=pan_download&item=717&download=1
 
U8GLIB_ST7920_128X64 u8g(10, 11, 12, U8G_PIN_NONE); // настройка пинов
 
void draw() {
  u8g.setRot180();
  u8g.setFont(u8g_font_unifont);
  u8g.drawStr(15, 12, "RCL-RADIO.RU");
  u8g.drawLine(0, 15, 128, 15);
  u8g.setFont(u8g_font_6x12);
  u8g.drawStr(45, 25, "ST7920");
  u8g.setColorIndex(1);           
  u8g.drawBox(0, 35, 128, 20);
  u8g.setFont(u8g_font_unifont);
  u8g.setColorIndex(0);
  u8g.drawStr(35, 50, "ARDUINO");
  u8g.setColorIndex(1); 
  u8g.setFont(rus6x10);
  u8g.drawStr(45, 64, "ПРИВЕТ");
}
 
void setup() {
}
 
void loop() {
  u8g.firstPage();  
  do {
    draw();
  } while( u8g.nextPage() );
}

Для поддержки русского шрифта скачайте архив шрифта и распакуйте его в папку со скетчем.

Пример 2

Ниже показан пример создания простых часов, в примере используется модуль часов реального времени DS3231. Время устанавливается по времени компиляции.

#include <U8glib.h> 
#include "rus6x10.h" // http://forum.rcl-radio.ru/misc.php?action=pan_download&item=717&download=1
#include "digits32.h" // http://forum.rcl-radio.ru/misc.php?action=pan_download&item=718&download=1
#include <Wire.h>
#include <DS3231.h>// http://rcl-radio.ru/wp-content/uploads/2022/08/DS3231.zip
DS3231 clock;RTCDateTime DateTime;
U8GLIB_ST7920_128X64 u8g(10, 11, 12, U8G_PIN_NONE); // настройка пинов
 
char * mes[12]{"ЯНВАРЯ","ФЕВРАЛЯ","МАРТА","АПРЕЛЯ","МАЯ","ИЮНЯ","ИЮЛЯ","АВГУСТА","СЕНТЯБРЯ","ОКТЯБРЯ","НОЯБРЯ","ДЕКАБРЯ"};   
 char * den[7]{"ВОСКРЕСЕНЬЕ","ПОНЕДЕЛЬНИК","ВТОРНИК","СРЕДА","ЧЕТВЕРГ","ПЯТНИЦА","СУББОТА"};                 
 
void draw() {
  u8g.setRot180();
  u8g.setFont(rus6x10);
  u8g.setPrintPos( 10, 10);  u8g.print(DateTime.day);
  u8g.drawStr(26, 10, mes[DateTime.month-1]);
  u8g.drawStr(75, 10, den[DateTime.dayOfWeek]);
  u8g.setFont(digits32);
  if(DateTime.hour/10==1){u8g.setPrintPos( 15, 47); u8g.print(DateTime.hour / 10);}else{u8g.setPrintPos( 1, 47);  u8g.print(DateTime.hour / 10);}
  if(DateTime.hour%10==1){u8g.setPrintPos( 34, 47); u8g.print(DateTime.hour % 10);}else{u8g.setPrintPos( 20, 47); u8g.print(DateTime.hour % 10);}
  u8g.setPrintPos( 39, 47); u8g.print(":");
  if(DateTime.minute/10==1){u8g.setPrintPos( 59, 47); u8g.print(DateTime.minute / 10);}else{u8g.setPrintPos( 45, 47); u8g.print(DateTime.minute / 10);}
  if(DateTime.minute%10==1){u8g.setPrintPos( 78, 47); u8g.print(DateTime.minute % 10);}else{u8g.setPrintPos( 64, 47); u8g.print(DateTime.minute % 10);}
  u8g.setPrintPos( 83, 47); u8g.print(":");
  if(DateTime.second/10==1){u8g.setPrintPos( 103, 47); u8g.print(DateTime.second / 10);}else{u8g.setPrintPos( 89, 47); u8g.print(DateTime.second / 10);}
  if(DateTime.second%10==1){u8g.setPrintPos( 122, 47); u8g.print(DateTime.second % 10);}else{u8g.setPrintPos( 108, 47); u8g.print(DateTime.second % 10);}
 // u8g.drawLine(0, 15, 128, 15);
  u8g.setFont(u8g_font_unifont);
  u8g.drawStr(20, 60, "TEMP");
  u8g.setPrintPos( 60, 60);  u8g.print(clock.readTemperature(),1);
  u8g.drawStr(100, 60, "C");
 
}
 
void setup() {
  Wire.begin(); 
  clock.begin();
 // clock.setDateTime(__DATE__, __TIME__); // установка времени по времени компиляции
}
 
void loop() {
   DateTime=clock.getDateTime();
  u8g.firstPage();  
  do {
    draw();
  } while( u8g.nextPage() );
}

Для поддержки семисегментных цифр скачайте архив шрифта и распакуйте его в папку со скетчем.

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

Войти с помощью: