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



 

Урок 34

Часть 5

 

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

 

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

Давайте теперь окрасим дисплей во все те цвета, которые мы прописали в макросах. Зайдём в функцию main() и напишем там код после вызова функции инициализации дисплея

 

TFT9341_ini();

TFT9341_FillScreen(RED);

_delay_ms(500);

TFT9341_FillScreen(BLUE);

_delay_ms(500);

TFT9341_FillScreen(GREEN);

_delay_ms(500);

TFT9341_FillScreen(CYAN);

_delay_ms(500);

TFT9341_FillScreen(MAGENTA);

_delay_ms(500);

TFT9341_FillScreen(YELLOW);

_delay_ms(500);

TFT9341_FillScreen(WHITE);

_delay_ms(500);

TFT9341_FillScreen(BLACK);

_delay_ms(500);

while (1)

 

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

 

image10

 

Продолжаем дальше.

Напишем функцию заливки прямоугольной области экрана, то есть не всю область, а отдельный прямоугольник с заранее заданными координатами. Вернёмся в файл ili9341.c и напишем данную функцию сразу после функции заливки полного экрана

 

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

void TFT9341_FillRectangle(unsigned int color,unsigned int x1, unsigned int y1,

unsigned int x2, unsigned int y2)

{

TFT9341_SetAddrWindow(x1, y1, x2, y2);

TFT9341_Flood(color, (long)(x2x1+1) * (long)(y2y1+1));

}

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

 

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

 

 

Напишем также в заголовочный файл прототип данной функции.

Теперь напишем функцию генерирования случайного цвета

 

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

unsigned int TFT9341_RandColor(void)

{

  unsigned char c = rand()%8;

  switch(c)

  {

    case 0:

    return BLACK;

    break;

    case 1:

    return BLUE;

    break;

    case 2:

    return RED;

    break;

    case 3:

    return GREEN;

    break;

    case 4:

    return CYAN;

    break;

    case 5:

    return MAGENTA;

    break;

    case 6:

    return YELLOW;

    break;

    case 7:

    return WHITE;

    break;

  }

  return BLACK;

}

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

 

 

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

 

_delay_ms(500);

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

{

  TFT9341_FillRectangle(TFT9341_RandColor(),0,0,119,159);

  _delay_ms(100);

  TFT9341_FillRectangle(TFT9341_RandColor(),120,0,239,159);

  _delay_ms(100);

  TFT9341_FillRectangle(TFT9341_RandColor(),0,160,119,319);

  _delay_ms(100);

  TFT9341_FillRectangle(TFT9341_RandColor(),120,160,239,319);

  _delay_ms(100);

}

TFT9341_FillScreen(BLACK);

 

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

 

image11

 

Опять вернёмся в наш файл с функциями и напишем там функцию вывода точки определённого цвета на экран

 

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

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

{

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

  CS_ACTIVE;

  TFT9341_SetAddrWindow(x,y,X_SIZE-1,Y_SIZE-1);

  CS_ACTIVE;

  CD_COMMAND;

  TFT9341_Write8(0x2C);

  CD_DATA;

  TFT9341_Write8(color>>8);TFT9341_Write8(color);

  CS_IDLE;

}

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

 

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

Напишем для данной функции прототип.

Ну и, соответственно, тест в main()

 

TFT9341_FillScreen(BLACK);

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

{

  TFT9341_DrawPixel(rand()%240,rand()%320,TFT9341_RandColor());

}

TFT9341_FillScreen(BLACK);

 

Мы будем выводить здесь 15000 точек случайного цвета в случайное место дисплея.

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

 

image12

 

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

 

 

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

 

 

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

 

Программатор, символьный дисплей LCD 20×4 и переходник для него можно приобрести здесь:

Программатор USBASP USBISP с адаптером USBASP USBISP 3.3 с адаптером

Дисплей LCD 20×4

Переходник PCF8574 IIC

 

 

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

 

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

Один комментарий на “AVR Урок 34. Дисплей TFT 240×320 8bit. Часть 5
  1. Валерий:

    Функция TFT9341_DrawPixel не верна.
    Вызов функции TFT9341_SetAddrWindow выведет информацию куда захочет, только не на экран.
    С уважением.

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

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

*