STM32 и LCD. Работа с графическим дисплеем.

Читатель нашего блога Михаил (mishadesh) создал отличную библиотеку для работы с LCD и предложил написать статью для демонстрации ее возможностей. Собственно, сегодня именно об этом и пойдет речь 😉 Разберем, какие реализованы функции, а также в конце статьи будет выложен пример для работы с дисплеем.

Работа с LCD

Как обычно начнем  с обсуждения железа… А тут на самом деле и не о чем говорить. Как и в первой статье, посвященной работе с дисплеями (ссылка), мы будем использовать отладочную плату Mini STM32. Собственно, подключение дисплея, основные команды для записи данных, последовательность инструкций для инициализации — все это там есть =) Поэтому сейчас переходим сразу к обсуждению библиотеки для работы с графическими дисплеями.

Вот полный список функций с пояснениями:

void LCD_PutPixel( uint16_t x, uint16_t y, uint16_t color );

Функция принимает 3 аргумента — координаты точки (x и y), а также цвет и меняет цвет пикселя, расположенного по указанным координатам.

void LCD_SetOrient( TOrientation orientation );

Следующая функция, как видно из ее названия, меняет ориентацию экрана. Возможно два положения экрана, соответственно два возможных значения параметра orientation:

  • Orientation_Portrait
  • Orientation_Album

Идем дальше:

uint16_t LCD_GetMaxX ( void );
uint16_t LCD_GetMaxY ( void );

Две похожие функции — одна возвращает максимальное значение координаты по оси x, другая — по оси y. Функции учитывают текущее положение экрана.

Переходим к функциям рисования 😉 И первая на очереди:

uint8_t LCD_DrawChar(uint16_t x, uint16_t y, uint8_t c, uint16_t textColor, uint16_t backColor, uint8_t isTransparent);

Функция отрисовывает на графическом дисплее символ, располагая его по переданным в функцию координатам, а также задавая его цвет. Начертание символа соответствует шрифту, определенному в файле font.c (файл идет в составе библиотеки).

Из функции LCD_DrawChar() плавно вытекает следующая функция:

void LCD_DrawString(char* s, uint16_t x, uint16_t y, uint16_t color, uint16_t backColor, uint8_t isTransparent);

Тут понятно и без лишних слов 😉 Функция печатает на LCD строку текста. Базой для этой функции является предыдущая — LCD_DrawChar().

Помимо символов и текста, конечно же, необходимо иметь возможность нарисовать основные графические примитивы, например линию или круг. Для этого реализовано следующее:

void LCD_drawLine ( int x1, int y1, int x2, int y2, uint16_t color);
void LCD_DrawRect ( int x1, int y1, int x2, int y2, uint16_t color, uint8_t filled );
void LCD_DrawEllipse(uint16_t X1, uint16_t Y1, uint16_t R, uint16_t color);

Для рисования линии нужно передать в функцию координаты начальной точки, координаты конечной точки, а также нужный цвет. Для прямоугольника — координаты верхнего левого угла и координаты правого нижнего угла (!). Последний параметр filled — определяет, необходимо ли выполнять заливку фигуры. Единица — значит да, фигура будет закрашена выбранным цветом, ноль — будет нарисован только контур фигуры. С этим понятно ) Осталась только окружность — функция DrawEllipse(). Здесь вместо координат начала и конца (верхнего/нижнего углов) передаем в качестве аргументов центр окружности и радиус.

Ну и напоследок еще одна функция:

void LCD_FillScr(uint16_t color);

Функция позволяет залить экран сплошным цветом.

Все перечисленные функции реализованы в файле GUI_DRV.c.

Помимо них библиотека включает в себя функции для записи данных в дисплей (LCD_DRIVER.c) а также уже упомянутые шрифты (font.c). Как видите, все четко отсортировано по разным файлам, так что в принципе все очень понятно, поэтому давайте перейдем к практическому примеру!

Вот ссылка на полный проект с примером — LCD Example

Давайте разбираться! Идем в файл main.c… Не буду приводить полный код функций инициализации периферии и дисплея, все это можно посмотреть непосредственно в файле, либо в предыдущей статье, ссылка на которую была в начале этой статьи 😉 Функция main():

int main(void) 
{
    initPeriph();
    initFSMC();
    initLCD();
    delay(10000);
    LCD_FillScr(0xFFFF);
    delay(100);
    LCD_SetOrient(Orientation_Album);
    delay(100);
    LCD_DrawString("Библиотека для LGDP4532",30,30,0x888F,0x0000,0);
    LCD_DrawRect(100,100,200,200,0x0000,0);
    LCD_DrawRect(120,120,180,180,0xFF00,1);
    LCD_DrawEllipse(150,150,50,0xF000);
 
    while (1) 
    {
    }
}

Начинаем с инициализации, закрашиваем экран белым цветом и устанавливаем альбомную ориентацию экрана. И теперь переходим к отрисовке графики )

Выводим на экран строку, а также два прямоугольника и круг. Результат налицо:

LCD

Очевидно, что все работает отлично 😉

Итак, на этом на сегодня заканчиваем, огромное спасибо Михаилу за проделанную работу и приведенные материалы. Вот контакты автора библиотеки:

Skype — mishadesh

Mail — mishadesh@gmail.com

На этом все, спасибо за внимание, до скорых встреч!

 

 

Понравилась статья? Поделись с друзьями!

STM32 и LCD. Работа с графическим дисплеем.: 3 комментария
  1. Знаки на дисплей выводятся как битмап-изображения.
    К каждому ASCII карактеру привязывается массив с закодированой картинкой, после пишутся функции вывода, по очереди отрисовывающие битмапы слева направо… Ну или как там у вас, а то тусил как-то на иранском форуме… 😀

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *