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

 

 

 

Урок 37

Часть 8

 

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

 

 

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

Поэтому проверим мы данную функцию уже в этой части.

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

 

image11 image12 image13 image14

 

Теперь давайте займемся приятным делом – красивыми изображениями на дисплее из файлов картинок.

Для этого на флешку скопируем несколько рисунков, один мой авторский, остальные – файлы из папок примеров, переименованные в удобные имена, чтобы не запутаться.

В файл ili9341.h добавим макрос для конвертирования пикселей в 16-битный формат.

 

#define  WHITE 0xFFFF

 

#define convert24to16(x) (((x & 0x00f80000) >> 8 ) | ((x & 0x0000fc00) >> 5) |((x & 0x000000f8) >> 3))

 

 

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

 

void TFT9341_DrawBitmap(uint16_t x, uint16_t y,        char *s)

{

        uint16_t i,h;

  uint32_t index = 0, width = 0, height = 0, bitpixel = 0;

  FRESULT res;          /* FatFs function common result code */

        uint32_t bytesread;

        uint32_t tmpcolor;

        uint8_t *bufbmp = NULL;

        f_close(&MyFile);

        if(f_open(&MyFile, s, FA_READ) != FR_OK)

        {

                Error_Handler();

        }

        else

        {

                bufbmp = (uint8_t*) malloc(100);

                res = f_read(&MyFile, bufbmp, 90, (void *)&bytesread);

                if((bytesread == 0) || (res != FR_OK))

                {

                        Error_Handler();

                }

                else

                {

                        index = bufbmp[10];//адрес начала данных в файле

                        index |= bufbmp[11] << 8;

                        index |= bufbmp[12] << 16;

                        index |= bufbmp[13] << 24;

                        width = bufbmp[18];//ширина растра

                        width |= bufbmp[19] << 8;

                        width |= bufbmp[20] << 16;

                        width |= bufbmp[21] << 24;

                        height = bufbmp[22];//высота растра

                        height |= bufbmp[23] << 8;

                        height |= bufbmp[24] << 16;

                        height |= bufbmp[25] << 24;

                        bitpixel = bufbmp[28];//формат пикселя (бит/пиксель)

                        bitpixel |= bufbmp[29] << 8;

                        for(h=0;h<height;h++)

                        {

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

                                {

                                        switch(bitpixel)

                                        {

                                                case 24:

                                                        f_lseek(&MyFile,index+((height-h-1)*width*3)+(i*3));

                                                        res = f_read(&MyFile, bufbmp, 3, (void *)&bytesread);

                                                        if((bytesread == 0) || (res != FR_OK))

                                                        {

                                                                Error_Handler();

                                                        }

                                                        tmpcolor = bufbmp[0];

                                                        tmpcolor |= bufbmp[1]<<8;

                                                        tmpcolor |= bufbmp[2]<<16;

                                                        break;

                                        }

                                        if(((i+x)<width)|((h+y)<height))

                                                                TFT9341_DrawPixel(i+x,h+y,(uint16_t)convert24to16(tmpcolor));

                                }

                        }                        

                        f_close(&MyFile);

                }

                free(bufbmp);

        }

}

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

 

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

 

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

 

 

Cодержимое FLASH Drive

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

 

 

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

STM32F4-DISCOVERY

Дисплей LCD 20×4

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

 

 

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

 

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

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

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

*