Показаны различия между двумя версиями страницы.
| Следующая версия | Предыдущая версия | ||
| products:laboratory_iot:exp49 [2020/06/01 17:41] – создано labuser29 | products:laboratory_iot:exp49 [2024/12/13 13:34] (текущий) – labuser30 | ||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| ===== Эксперимент 49. Графический интерфейс секундомера ===== | ===== Эксперимент 49. Графический интерфейс секундомера ===== | ||
| + | |||
| + | Попробуем создать первое полезное устройство с использованием TFT дисплея. Пусть это будет простой секундомер. На дисплее будут отображаться часы, минуты и секунды, | ||
| + | |||
| + | Картинка с изображением секундомера | ||
| + | <WRAP center round download 60%> | ||
| + | {{ : | ||
| + | </ | ||
| + | Ее нужно загрузить во внутреннюю память микроконтроллера | ||
| + | |||
| + | ==== Схема эксперимента ==== | ||
| + | |||
| + | {{ : | ||
| + | // | ||
| + | |||
| + | {{ : | ||
| + | // | ||
| + | ==== Программный код эксперимента ==== | ||
| + | |||
| + | <file python Exp49.py[enable_line_numbers=" | ||
| + | from machine import Pin, SPI | ||
| + | from tft import TFT_GREEN | ||
| + | import font | ||
| + | import time | ||
| + | _init() | ||
| + | machine.freq(160000000) | ||
| + | |||
| + | |||
| + | dc = Pin(4, Pin.OUT) | ||
| + | cs = Pin(2, Pin.OUT) | ||
| + | rst = Pin(5, Pin.OUT) | ||
| + | |||
| + | spi = SPI(1, baudrate=40000000, | ||
| + | tft = TFT_GREEN(128, | ||
| + | |||
| + | tft.initr(tft.BGR) # tft.initr(tft.RGB) #Если вместо синего цвета отображается красный, | ||
| + | tft.clear(tft.rgbcolor(255, | ||
| + | tft.draw_bmp(0, | ||
| + | |||
| + | fontcolor = tft.rgbcolor(39, | ||
| + | |||
| + | tft.text(5, 125, ' | ||
| + | tft.text(41, | ||
| + | tft.text(55, | ||
| + | tft.text(90, | ||
| + | tft.text(98, | ||
| + | </ | ||
| + | |||
| + | Этот код выводит интерфейс секундомера. | ||
| + | |||
| + | Этой строкой мы переключаем частоту микроконтроллера на максимальные для него | ||
| + | <code python[enable_line_numbers=" | ||
| + | machine.freq(160000000) | ||
| + | </ | ||
| + | |||
| + | Настройка выводов микроконтроллера, | ||
| + | <code python[enable_line_numbers=" | ||
| + | dc = Pin(4, Pin.OUT) | ||
| + | cs = Pin(2, Pin.OUT) | ||
| + | rst = Pin(5, Pin.OUT) | ||
| + | </ | ||
| + | |||
| + | Настраиваем аппаратный контроллер шины SPI и создаем объект дисплея | ||
| + | <code python[enable_line_numbers=" | ||
| + | spi = SPI(1, baudrate=40000000, | ||
| + | tft = TFT_GREEN(128, | ||
| + | </ | ||
| + | |||
| + | Инициализируем дисплей, | ||
| + | <code python[enable_line_numbers=" | ||
| + | tft.initr(tft.BGR) # tft.initr(tft.RGB) #Если вместо синего цвета отображается красный, | ||
| + | tft.clear(tft.rgbcolor(255, | ||
| + | tft.draw_bmp(0, | ||
| + | </ | ||
| + | |||
| + | Объявляем переменную с цветом шрифта | ||
| + | <code python[enable_line_numbers=" | ||
| + | fontcolor = tft.rgbcolor(39, | ||
| + | </ | ||
| + | |||
| + | Отображаем часы шрифтом 3 с началом в координате 5, 125 | ||
| + | <code python[enable_line_numbers=" | ||
| + | tft.text(5, 125, ' | ||
| + | </ | ||
| + | |||
| + | Отображаем двоеточие — разделитель | ||
| + | <code python[enable_line_numbers=" | ||
| + | tft.text(41, | ||
| + | </ | ||
| + | |||
| + | Подобным образом отображаем остальные данные: | ||
| + | <code python[enable_line_numbers=" | ||
| + | tft.text(55, | ||
| + | tft.text(90, | ||
| + | tft.text(98, | ||
| + | </ | ||
| + | |||
| + | Координаты для вывода данных подбирались экспериментально, | ||
| + | Мы намерено разбили данные на части: часы, минуты, | ||
| + | |||
| + | Мы получили интерфейс нашего устройства — секундомера. В следующем эксперименте займемся реализацией логики его работы. | ||