Эксперимент 48. Отображение картинки

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

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

Наш дисплей имеет разрешение 128*160 точек. Попробуем занять весь дисплей одним большим изображением. Тогда оно должно быть такого же размера. Если оно будет меньше — то останется незаполненная область экрана. Если больше — обрежется. Можно загрузить в память микроконтроллера любое свое изображение, но если подходящего изображения под рукой нет, то можно скачать нашу картинку с самолетом и загрузить в МК ее.

Схема эксперимента

Рисунок 1. Монтажная схема эксперимента для дисплея с 8 выводами

Рисунок 2. Монтажная схема эксперимента для дисплея с 11 выводами

Программный код эксперимента

Напишем приветственную надпись на дисплее.

Exp47.py
  1. from machine import Pin, SPI
  2. from tft import TFT_GREEN
  3. _init()
  4.  
  5.  
  6. dc = Pin(4, Pin.OUT)
  7. cs = Pin(2, Pin.OUT)
  8. rst = Pin(5, Pin.OUT)
  9.  
  10. spi = SPI(1, baudrate=40000000, polarity=0, phase=0)
  11. tft = TFT_GREEN(128, 160, spi, dc, cs, rst, rotate=0)
  12.  
  13. tft.initr(tft.BGR) # tft.initr(tft.RGB) #Если вместо синего цвета отображается красный, а вместо красного синий
  14.  
  15. # Отображаем картинку с именем plane.bmp начиная с координаты 0, 0
  16. # Измените название файла на свое, если у вас другая картинка
  17. tft.draw_bmp(0,0,'plane.bmp')

Дисплеи, которые могут быть в комплекте набора MAXI, отличаются не только количеством выводов, но и встроеными настройками, которые влияют на передачу цвета. Функция tft.initr инициализирует дисплей, подготавливает его к работе. В качестве параметра данная функция принимает настройку цвета — tft.BGR или tft.RGB. Если вместо красного цвета на дисплее отображается синий, а вместо синего- красный, то необходимо сменить настройку цвета на другую.