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



Урок 37

Часть 7

 

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

 

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

Ну, раз уж функция такая сложная, то не обошлось без ошибок. Давайте их исправлять. Их целых 8. Вообще весь этот процесс интереснее всего смотреть в видеоуроке, потому что текст функции, размещенной в прошлом занятии, написан без ошибок.

Работа над ошибками:

1.

typedef struct _tFont

{

        uint16_t Width;

        uint16_t Heigth Height;

} sFONT;

2.

void TFT9341_FontsIni(void)

{

        Font8.Heigth Height=8;

        Font8.Width=5;

        Font12.Heigth Height=12;

        Font12.Width=7;

        Font16.Heigth Height=16;

        Font16.Width=11;

        Font20.Heigth Height=20;

        Font20.Width=14;

        Font24.Heigth Height=24;

        Font24.Width=17;

3.

        if((x+width)>=X_SIZE) return;

        switch(height)

4.

        height = lcdprop.pFont->Heigth Height;

        uint16_t fontsize=0;//размер символа в байтах в таблице

5.

        uint16_tuint32_t line=0;//горизонтальная линия пикселей шрифта

6.

                else if((height==16)||(height==20)) line=(charbuf[i*2]<<8)|(charbuf[i*2+1]);

                else line=(charbuf[i*3]<<16)||(charbuf[i*3+1]<<8)|(charbuf[i*3+2]); (вместо двух || одна |)

7.

                                TFT9341_DrawPixel(x+j,y,lcdprop.TextColor);

                        }

                        else

                        if(line&(1<<(width-j+offset1-1)))

                        {

8.

                                TFT9341_DrawPixel(x+j,y,lcdprop.BackColor);

                        }

                        y++;

                }

                y++;

        }

 

 

Добавим прототип данной функции в хедер-файл.

 

 

Напишем ещё три функции для установки размера шрифта, цвета шрифта и цвета фона символа

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

void TFT9341_SetFont(uint8_t f)

{

        switch(f)

        {

                case 8:

                        f_close(&MyFile);

                        if(f_open(&MyFile, «font8.bin», FA_READ) != FR_OK)

                        {

                                Error_Handler();

                        }

                        else

                        {

                                lcdprop.pFont=&Font8;

                        }

                        break;

                case 12:

                        f_close(&MyFile);

                        if(f_open(&MyFile, «font12.bin», FA_READ) != FR_OK)

                        {

                                Error_Handler();

                        }

                        else

                        {

                                lcdprop.pFont=&Font12;

                        }

                        break;

                case 16:

                        f_close(&MyFile);

                        if(f_open(&MyFile, «font16.bin», FA_READ) != FR_OK)

                        {

                                Error_Handler();

                        }

                        else

                        {

                                lcdprop.pFont=&Font16;

                        }

                        break;

                case 20:

                        f_close(&MyFile);

                        if(f_open(&MyFile, «font20.bin», FA_READ) != FR_OK)

                        {

                                Error_Handler();

                        }

                        else

                        {

                                lcdprop.pFont=&Font20;

                        }

                        break;

                case 24:

                        f_close(&MyFile);

                        if(f_open(&MyFile, «font24.bin», FA_READ) != FR_OK)

                        {

                                Error_Handler();

                        }

                        else

                        {

                                lcdprop.pFont=&Font24;

                        }

                        break;

        }

}

 

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

void TFT9341_SetTextColor(uint16_t color)

{

        lcdprop.TextColor=color;

}

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

void TFT9341_SetBackColor(uint16_t color)

{

        lcdprop.BackColor=color;

}

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

 

 

Добавим на них на все прототипы

Напишем тест вывода символов на экран в теле функции FileReadWrite

Предыдущие тесты пока закомментируем

 

        else

        {

                TFT9341_FillScreen(BLACK);

                while(1)

                {

                        TFT9341_FillScreen(BLACK);

                        TFT9341_SetTextColor(YELLOW);

                        TFT9341_SetBackColor(BLUE);

                        TFT9341_SetFont(24);

                        TFT9341_DrawChar(10, 10, (uint8_t)'S');

                        TFT9341_DrawChar(27, 10, (uint8_t)'t');

                        TFT9341_DrawChar(44, 10, (uint8_t)'m');

                        TFT9341_DrawChar(61, 10, (uint8_t)'3');

                        TFT9341_DrawChar(78, 10, (uint8_t)'2');

                        TFT9341_SetTextColor(GREEN);

                        TFT9341_SetBackColor(RED);

                        TFT9341_SetFont(20);

                        TFT9341_DrawChar(10, 34, (uint8_t)'S');

                        TFT9341_DrawChar(24, 34, (uint8_t)'t');

                        TFT9341_DrawChar(38, 34, (uint8_t)'m');

                        TFT9341_DrawChar(52, 34, (uint8_t)'3');

                        TFT9341_DrawChar(66, 34, (uint8_t)'2');

                        TFT9341_SetTextColor(BLUE);

                        TFT9341_SetBackColor(YELLOW);

                        TFT9341_SetFont(16);

                        TFT9341_DrawChar(10, 54, (uint8_t)'S');

                        TFT9341_DrawChar(21, 54, (uint8_t)'t');

                        TFT9341_DrawChar(32, 54, (uint8_t)'m');

                        TFT9341_DrawChar(43, 54, (uint8_t)'3');

                        TFT9341_DrawChar(54, 54, (uint8_t)'2');

                        TFT9341_SetFont(12);

                        TFT9341_SetTextColor(CYAN);

                        TFT9341_SetBackColor(BLACK);

                        TFT9341_DrawChar(10, 70, (uint8_t)'S');

                        TFT9341_DrawChar(17, 70, (uint8_t)'t');

                        TFT9341_DrawChar(24, 70, (uint8_t)'m');

                        TFT9341_DrawChar(31, 70, (uint8_t)'3');

                        TFT9341_DrawChar(38, 70, (uint8_t)'2');

                        TFT9341_SetFont(8);

                        TFT9341_SetTextColor(RED);

                        TFT9341_SetBackColor(GREEN);

                        TFT9341_DrawChar(10, 82, (uint8_t)'S');

                        TFT9341_DrawChar(15, 82, (uint8_t)'t');

                        TFT9341_DrawChar(20, 82, (uint8_t)'m');

                        TFT9341_DrawChar(25, 82, (uint8_t)'3');

                        TFT9341_DrawChar(30, 82, (uint8_t)'2');

                        HAL_Delay(5000);

                }

        }

Соберем, прошьем, посмотрим

 

image10

 

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

void TFT9341_String(uint16_t x, uint16_t y,        char *str)

{

        while (*str)

        {

                TFT9341_DrawChar(x,y,str[0]);

                x += lcdprop.pFont->Width;

                (void)*str++;

        }

}

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

 

Напишем прототип и попробуем повыводить строки в main.c в функции FileReadWrite

Создадим переменную

 

void FileReadWrite(void)

{

        uint8_t i=0;

        if(f_mount(&USBDISKFatFs,(TCHAR const*)USBH_Path,0)!=FR_OK)

 

Предыдущий код вывода отдельных символов закомментируем

Вот собственно тест

 

//                        HAL_Delay(10000);

                        TFT9341_SetTextColor(YELLOW);

                        TFT9341_SetBackColor(BLUE);

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

                        {

                                TFT9341_SetFont(24);

                                TFT9341_FillScreen(BLACK);

                                TFT9341_String(1, 100,        «ABCDEF12345678»);

                                TFT9341_SetFont(20);

                                TFT9341_String(1, 124,        «ABCDEFGHI12345678»);

                                TFT9341_SetFont(16);

                                TFT9341_String(1, 144,        «ABCDEFGHIKL 123456789»);

                                TFT9341_SetFont(12);

                                TFT9341_String(1, 160,        «ABCDEFGHIKLMNOPQRSTUVWXY 123456789»);

                                TFT9341_SetFont(8);

                                TFT9341_String(1, 172,        «ABCDEFGHIKLMNOPQRSTUVWXYZ 123456789 ABCDEFGHIKL»);

                                HAL_Delay(2000);

                                TFT9341_SetRotation(i%4);

                        }

 

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

 

 

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

 

 

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

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

 

 

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

STM32F4-DISCOVERY

Дисплей LCD 20×4

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

 

 

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

 

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

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

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

*