Всем привет!
Недавно возникла необходимость замены TFT-дисплея на базе контроллера st7735, описанного мною в одной из предыдущих статей серии, на LCD-дисплей под управлением контроллера ssd1283a.
Львиная доля времени ушла не на программирование, а на поиск информации об этом дисплее в сети. Чтобы избавить вас, уважаемые датагорцы, от неоправданных потерь времени, решил поделиться накопленной информацией и библиотекой, написанной на языке Си.
Содержание статьи / Table Of Contents
↑ Общая информация о дисплейном модуле на SSD1283A
• Размеры модуля: 54 мм × 36 мм × 7 мм.• Разрешение: 130×130 пикселей.
• Цветность: 256 тысяч цветов в формате RGB 5-6-5.
• Напряжение питания: 5 В.
• Протокол обмена данными: SPI.
↑ Назначение выводов дисплейного модуля на SSD1283A
• SCK, MOSI — линии протокола SPI. Альтернативные названия — DO/DI, SCL/SDA.• CS — выбор чипа. Активный уровень низкий. Для экономии можно соединить этот вывод с землёй.
• A0/DC — выбор типа записываемого в модуль слова — данные или команда.
• RESET — аппаратный сброс. Этот вывод можно соединить с выводом VCC.
• VCC, GND — линии питания контроллера.
• LED — подсветка дисплея.
Поскольку на оборотной стороне модуля присутствует преобразователь 5В → 3.3 В, можно соединить между собой выводы LED и VCC, если нет необходимости в программном управлении подсветкой.
↑ Управление модулем на SSD1283A
Обмен информацией с модулем производится посредством протокола SPI. Для удобства я выбрал программный вариант интерфейса.Управление дисплеем осуществляется посредством четырёх функций:
↑ Функция записи команды
void lcdWriteCommand (uint8_t command)
{
DC_LOW;
spiWriteByte (command);
}
↑ Функция записи данных в 8-битном формате
void lcdWriteData (uint8_t data)
{
DC_HIGH;
spiWriteByte (data);
}
↑ Функция записи данных в 16-битном формате
void lcdWriteData16(uint16_t data)
{
DC_HIGH;
spiWriteByte (data ≫ 8);
spiWriteByte (data);
}
↑ Функция записи в определённый регистр данных в 16-битном формате
void lcdWriteReg (uint16_t command, uint16_t data)
{
DC_LOW;
spiWriteByte (command);
DC_HIGH;
spiWriteByte (data ≫ 8);
spiWriteByte (data);
}
На базе этих основных функций написаны дополнительные функции.
↑ Функция установки ориентации дисплея
lcdSetRotation (uint8_t rotation) — функция установки ориентации дисплея, где параметр rotation может принимать значения от 0 до 3, включительно.↑ Функция определения рабочей области дисплея
lcdSetWindowAddress (int16_t x1, int16_t y1, int16_t x2, int16_t y2) — функция определения рабочей области дисплея, где параметры задают начало и конец области по соответствующим координатам. В частности эта функция используется для прорисовки точки и закрашивания дисплея.↑ Функция закрашивания дисплея
lcdClearDisplay (int16_t color) — функция закрашивания дисплея заданным цветом.↑ Функция прорисовки точки
drawPixel (int16_t x, int16_t y, int16_t color) — функция прорисовки точки с заданными координатами и цветом.↑ Функция инициализации дисплея
lcdInit (void) — функция инициализации дисплея.↑ Графическая библиотека
Далее подключается графическая библиотека, о которой я писал в статье «Визуализация для микроконтроллера. Часть 5. Графика».В заключение привожу короткое видео с демонстрацией работы дисплея ssd1283a.
↑ Файлы
Исходный код и даташит контроллера ssd1283a выложены в архив.🎁datagor_ru-ssd1283-project.7z 380.94 Kb ⇣ 87
🎁ssd1283a-datasheet.7z 645.9 Kb ⇣ 74
Всем удачи!
↑ Полезняхи
? Модуль 1.6" SPI LCD Display Module на SSD1283A? Паяльники на любой вкус
? Отличные платы для прототипирования конструкций
Камрад, рассмотри датагорские рекомендации
🌼 Полезные и проверенные железяки, можно брать
Опробовано в лаборатории редакции или читателями.