ST7920 и u8g2 используют только часть дисплея 128x64.
Я пытаюсь использовать библиотеку u8g2 и Arduino Mega для управления ЖК-дисплеем. Адаптируя HelloWorld
из примеров, включенных в библиотеку, для использования портов SPI Mega (50-52), я привел код ниже.
Это немного разочаровывающее приветствие, как на картинке ниже. Похоже, что Arduino не имеет доступа ко всем пикселям и может изменять состояния только трех блоков (верхнего с надписью «Hello V» и двух темных областей внизу).
Дисплей представляет собой 128X64ZW-10
, извлеченный из 3D-принтера, который работал при подключении к материнской плате принтера. Распиновка выведена какими-то добрыми людьми здесь и здесь (перевод). Пока я переключал провода, я ненадолго увидел, как случайные символы пиньинь мигают по всему дисплею. Эти два факта, а также тот факт, что рабочие области пикселей расположены не случайным образом, заставляют меня подозревать, что это проблема проводки или кодирования, и что пиксели не мертвы.
Вот код:
#include <Arduino.h>
#include <U8g2lib.h>
#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif
#ifdef U8X8_HAVE_HW_I2C
#include <Wire.h>
#endif
int LCD_CLK_PIN = 52; //Часы (белые)
int LCD_RW_PIN = 50; //Чтение-Запись (синий)
int LCD_RS_PIN = 51; //Выбор регистра (зеленый)
U8G2_ST7920_128X64_F_SW_SPI u8g2(U8G2_R0, LCD_CLK_PIN, LCD_RW_PIN, LCD_RS_PIN,U8X8_PIN_NONE);
void setup(void) {
/* U8g2 Project: SSD1306 Test Board */
//pinMode(10, ВЫХОД);
//pinMode(9, ВЫХОД);
//цифровая запись(10, 0);
//цифровая запись(9, 0);
/* U8g2 Project: T6963 Test Board */
//pinMode(18, ВЫХОД);
//digitalWrite(18, 1);
/* U8g2 Project: KS0108 Test Board */
//pinMode(16, ВЫХОД);
//digitalWrite(16, 0);
/* U8g2 Project: LC7981 Test Board, connect RW to GND */
//pinMode(17, ВЫХОД);
//digitalWrite(17, 0);
/* U8g2 Project: Pax Instruments Shield: Enable Backlight */
//pinMode(6, ВЫХОД);
//цифровая запись(6, 0);
u8g2.begin();
}
void loop(void) {
u8g2.firstPage();
do {
u8g2.setFont(u8g2_font_ncenB10_tr);
u8g2.drawStr(1,18,"Hello World!");
} while ( u8g2.nextPage() );
//задержка(1000);
}
Я потратил на это пару дней, но безуспешно. Есть идеи?
@maker.li, 👍2
1 ответ
Большое спасибо за ваши фотографии.
Тест проводился на материнской плате Ender3 V1.1.3
Конфигурация PIN-кода: библиотека U8g2lib
#include <U8g2lib.h>
#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif
#ifdef U8X8_HAVE_HW_I2C
#include <Wire.h>
#endif
int LCD_CLK_PIN = 30; //Часы (белые)
int LCD_RW_PIN = 17; //Чтение-Запись (синий)
int LCD_RS_PIN = 28; //Выбор регистра (зеленый)
U8G2_ST7920_128X64_F_SW_SPI u8g2(U8G2_R0, LCD_CLK_PIN, LCD_RW_PIN, LCD_RS_PIN,U8X8_PIN_NONE);
Конфигурация: библиотека U8glib
#include "U8glib.h"
U8GLIB_ST7920_128X64_1X u8g(30, 17, 28); // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
Ваша программа работает правильно.
- Кнопка двойного состояния Nextion
- mcufriend 2.4 tft мега 2560
- ЖК-дисплей 16x2, показывающий блоки под текстом
- Печать содержимого файла SD - карты на ЖК-дисплее
- Как инициализировать RepRap Discount 12864 на u8glib?
- Использование модуля JYETech 2.4 Inch LCD Display Screen Module с Arduino?
- lcd.clear не работает с Serial.begin(9600) на Arduino Mega 2560
- Как сделать динамическое меню с подменю ( Arduino mega или Arduino Uno)
Добро пожаловать в Arduino Stack Exchange. В будущем, пожалуйста, публикуйте ответы на английском языке. Я перевел для вас ваш пост. Также, пожалуйста, отформатируйте свой код в будущем, выделив его и нажав Ctrl+K., @Nick Gammon