STM Урок 37. Дисплей TFT 240×320 8bit. Часть 4

 

 

 

Урок 37

Часть 4

 

Дисплей TFT 240×320 8bit

 

 

В прошлой части данного урока мы закончили инициализацию дисплея и уже написали парочку простейших теста для оценки его работы, что показало, что дисплей не смотря на его крошечную цену вполне достойный.

Поэтому будем продолжать с ним работать и напишем в файле ili9341.c функцию для вывода точки определенного цвета на экран

 

//—————————————————————

void TFT9341_DrawPixel(int x, int y, uint16_t color)

{

        if((x<0)||(y<0)||(x>=X_SIZE)||(y>=Y_SIZE)) return;

    TFT9341_SetAddrWindow(x, y, x, y);

    TFT9341_SendCommand(0x2C);

    TFT9341_SendData(color >> 8);

    TFT9341_SendData(color & 0xFF);

}

 

Добавим на нее также прототип в хедер ну и в честь этого конечно тест в main(), только сначала скопируем в main.c функцию задержки

 

/* USER CODE BEGIN 0 */

__STATIC_INLINE void DelayMicro(__IO uint32_t micros)

{

        micros *=(SystemCoreClock / 1000000) / 5;

        while (micros—);

}

//—————————————————————

void FileReadWrite(void)

Ну и собственно тест.

        TFT9341_FillScreen(BLACK);        

        for(i=0;i<15000;i++)

         {

                 TFT9341_DrawPixel(HAL_RNG_GetRandomNumber(&hrng)%240,HAL_RNG_GetRandomNumber(&hrng)%320,TFT9341_RandColor());

                 DelayMicro(100);

         }

        HAL_Delay(500);

        TFT9341_FillScreen(BLACK);

 

Соберем и прошьем проект.

Вот как выглядит наш тест на экране дисплея

 

image05

 

Напишем функцию вывода прямой линии на экран

 

void TFT9341_DrawLine(uint16_t color, uint16_t x1, uint16_t y1,

                                                         uint16_t x2, uint16_t y2)

{

        int steep = abs(y2-y1)>abs(x2-x1);

        if (steep)

        {

                swap(x1,y1);

                swap(x2,y2);

        }

        if(x1>x2)

        {

                swap(x1,x2);

                swap(y1,y2);

        }

        int dx,dy;

        dx=x2-x1;

        dy=abs(y2-y1);

        int err=dx/2;

        int ystep;

        if(y1<y2)        ystep = 1;

        else                ystep = -1;

        for (;x1<=x2;x1++)

        {

                if (steep)        TFT9341_DrawPixel(y1,x1,color);

                else TFT9341_DrawPixel(x1,y1,color);

                err-=dy;

                if (err<0)

                {

                        y1 += ystep;

                        err+=dx;

                }

        }

}

//—————————————————————

 

 

Напишем прототип и тест в main()

Добавим сначала еще одну переменную в main()

 

  /* USER CODE BEGIN 1 */

        uint16_t i,j;

  /* USER CODE END 1 */

И собственно сам тест

        TFT9341_FillScreen(BLACK);

         for(j=0;j<20;j++)

        {

                for(i=0;i<240;i++)

                {

                                        TFT9341_DrawLine(TFT9341_RandColor(),i,0,i,319);

                }

                HAL_Delay(100);

        }

        HAL_Delay(500);

        TFT9341_FillScreen(BLACK);

 

Вот так выглядит тест после сборки и прошивки

 

image06

 

Напишем ещё один тест, для этого нам новых функций не потребуется

 

        TFT9341_FillScreen(BLACK);

        for(i=0;i<1000;i++)

        {

                TFT9341_DrawLine(TFT9341_RandColor(),HAL_RNG_GetRandomNumber(&hrng)%240,

                                HAL_RNG_GetRandomNumber(&hrng)%320,HAL_RNG_GetRandomNumber(&hrng)%240,

                                HAL_RNG_GetRandomNumber(&hrng)%320);

                 HAL_Delay(1);

        }

        HAL_Delay(1000);

        TFT9341_FillScreen(BLACK);

 

Соберём код, прошьём контроллер и получим вот такой результат

 

image07

 

Дальнейшие тесты и функции для них мы напишем в следующей части занятия.

 

Предыдущая часть Программирование МК STM32 Следующая часть

 

 

Техническая документация на контроллер дисплея

 

 

Отладочную плату и дисплей LCD 20×4 можно приобрести здесь:

STM32F4-DISCOVERY

Дисплей LCD 20×4

Где приобрести именно такой дисплей TFT 240×320, написать затрудняюсь, так как может прийти не всегда именно такой дисплей, какой заявлен в продаже. Либо придет подключаемый по SPI, либо с другим контроллером. Поэтому все тонкости уточняйте у продавца.

 

 

Смотреть ВИДЕОУРОК (нажмите на картинку)

STM Дисплей TFT 240x320 8bit

5 комментариев на “STM Урок 37. Дисплей TFT 240×320 8bit. Часть 4
  1. Анас:

    В функции TFT9341_DrawLine(), где-то есть ошибка, не подскажете где можно посмотреть оригинал. Огромное спасибо за уроки.

  2. Илья:

    По непонятным причинам функция DrawLine почему-то не позволяет нарисовать треугольник(полигон)

    В сети нашел такую же функцию но исправленную

    void ILI9341_DrawLine(uint16_t color, uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2)
    {
        int deltaX = abs(x2-x1);
        int deltaY = abs(y2-y1);
        int signX = x1 < x2 ? 1 : -1;
        int signY = y1 < y2 ? 1 : -1;
        int error = deltaX — deltaY;
        for(;;)
        {
            ILI9341_DrawPixel(x1,y1,color);
            if(x1 == x2 && y1 == y2)
            {
                break;
            }
            int error2 = error * 2;
            if(error2 > -deltaY)
            {
                error -= deltaY;
                x1 += signX;
            }
            if(error2 < deltaX)
            {
                error += deltaX;
                y1 += signY;
            }
        }
    }

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

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

*