====== Графический LCD ====== //Необходимые знания: [HW] [[et:hardware:homelab:lcd]], [LIB] [[et:software:homelab:library:module:lcd_graphic]], [LIB] [[et:software:homelab:library:delay]], \\ [PRT] [[et:examples:display:lcd_alphanumeric]]// ===== Теория ===== Графический LCD – это жидкокристаллический дисплей, с помощью которого помимо текста можно отображать и фигуры. Его строение похоже на буквенно-цифровой LCD и основное отличие состоит в том, что на графическом экране все пиксели распределены по всему экрану одной большой матрицей. Если имеется дело с монохромным графическим LCD экраном, тогда пиксель - это один маленький сегмент в форме квадрата. У цветных экранов один пиксель образуется из трех субпикселей, из которых каждый пропускает через цветовой фильтр красный, зеленый или синий свет. Так как субпикселя находятся рядом, то они кажутся одним пикселем. [{{ :examples:display:lcd_graphic:lcd_graphic_smiley.png?200|Graafilise Рисунок образованый из пикселей графического LCD}}] Монохромные графические дисплеи, обычно, с пассивной матрицей; большие цветные дисплеи, в том числе и дисплеи компьютера, с активной матрицей. Вся информация, касающаяся цвета фона и пикселей, у графических LCD схожа со свойствами буквенно-цифрового LCD и подобно буквенно-цифровым дисплеям у графических дисплеев так же имеется отдельный контроллер, который следит за приемом информации и возникновением сегментов электрического поля через сетевой интерфейс. Если буквенно-цифровому LCD дисплею хватает для отображения текста отправки индексов знаков, то графические дисплеи сами буквы не преобразовывают – все тексты и картинки пользователю приходится самому создавать по пикселям. ~~CL~~ ===== Практика ===== В комплекте Домашней Лаборатории имеется монохромный графический LCD дисплей размерами 84 x 48 пикселей. Это такой же дисплей, которой используется в мобильных телефонах Nokia 3310. У дисплея имеется контроллер Philipsi PCD8544, с помощью которого можно общаться через последовательный интерфейс похожий на SPI. Отдельно управляется ещё и подсветка модуля дисплея. Общение с дисплеем не такое уж сложное, но из-за большого количества функций здесь это не объясняется. В библиотеке Домашней Лаборатории имеются функции для его использования. Функции библиотеки графического LCD аналогичны буквенно-цифровому LCD. Для начала нужно сбросить дисплей функцией //lcd_gfx_init//. После запуска желательно дисплей, а правильнее будет сказать память контроллера, очистить функцией //lcd_gfx_clear//. В библиотеке вписана карта букв со всем латинским алфавитом, цифрами и знаками общего пользования. Высота буквы 7 и ширина 5 пикселей. Растояние между каждой буквой по горизонтали 6 и по вертикали 8 пикселей, т.е на дисплей вмещается 6 рядов и 14 столбов букв. Для отображения буквы или текста нужно заранее обозначить её местоположение функцией //lcd_gfx_goto_char_xy//. Для отображения буквы функцию //lcd_gfx_write_char// и для отображения текста - //lcd_gfx_write_string//. Далее приведен пример счетчика времени. Программа считает секунды (приблизительно), минуты и часы. Для перевода времени в текст используется функция //sprintf//. // // Пример использования графического LCD Домашней Лаборатории. // На LCD отображается время программы начиная с начала. // #include #include #include // // Основная программа // int main(void) { int seconds = 0; char text[16]; // Сброс LCD дисплея lcd_gfx_init(); // Очистка дисплея lcd_gfx_clear(); // Включение подсветки lcd_gfx_backlight(true); // Отображение названия программы lcd_gfx_goto_char_xy(1, 1); lcd_gfx_write_string("Счетчик времени"); // Бесконечный цикл while (true) { // Перевод секунд в форму времени // чч:мм:сс sprintf(text, "%02d:%02d:%02d", (seconds / 3600) % 24, (seconds / 60) % 60, seconds % 60); // Отображение текста времени lcd_gfx_goto_char_xy(3, 3); lcd_gfx_write_string(text); // Увеличение секунды на 1 seconds++; // Аппаратная задержка в 1000 миллисекунд hw_delay_ms(1000); } }