====== Буквенно-цифровой LCD====== //Необходимые знания: [HW] [[et:hardware:homelab:lcd]], [LIB] [[et:software:homelab:library:module:lcd_alphanumeric]], [LIB] [[et:software:homelab:library:delay]], \\ [PRT] [[et:examples:timer:periodic_interrupt]]// ===== Теория ===== Буквенно-цифровой LCD это жидкокристаллический экран (на английском языке //liquid crystal display//), который предназначен для отображения букв и цифр. На английском языке он называется //alphanumeric// LCD. В простейших жидкокристаллических экранах используются жидкие кристаллы, установленные между просвечивающимися электродами, что меняет поляризацию света, проходящего через электрическое поле. Электроды покрыты так же поляризационными фильтрами, которые гарантируют, что только в одну сторону поляризированный свет может пройти через весь экран. Если жидкий кристалл меняет поляризацию под воздействием электрического поля, тогда свет не может пройти через экран или его часть (сегмент) и он выглядит темным. Основная характеризующая буквенно-цифрового LCD это расположение его сегментов. Экран разделен на множество индикаторов. У каждого индикатора имеется достаточно много сегментов для отображения букв и цифр или он образуется из матрицы, состоящей из маленьких сегментов (пикселей) квадратной формы. К примеру, 5×7 пиксельной матрицы достаточно для отображения всех цифр, латинского алфавита и умляутов. Обычно существует 1-4 ряда и 8-32 столбика индикаторов. У каждого индикатора есть маленький промежуток, точно также как и у букв в тексте. [{{ :examples:display:lcd_alphanumeric:lcd_alphanumeric_abc.png?200|Текст, составленный из пиксельной матрицы буквенно-цифрового LCD}}] Экран буквенно-цифрового LCD состоит помимо самого экрана еще из контроллера, который управляет сегментами экрана с помощью приказов, приходящих из сетевого интерфейса. В контроллере заранее запрограммирована карта букв, где у каждой буквы, цифры или знака свой порядковый номер или индекс. Отображение текста на экране происходит в основном при передаче индексов букв на LCD контроллер. В действительности, перед тем как что-либо будет отображаться, следует послать множество управляющих приказов LCD контроллеру. Перед использованием каждого конкретного LCD экрана следует ознакомиться с его спецификацией, так как LCD экраны очень разные и управление ими происходит по разному. Буквенно-цифровые LCD экраны обычно с пассивной матрицей, где обновление сегментов электрического поля происходит поочередно. Из этого следует, что экраны с пассивной матрицей медленнее и обладают худшей контрастностью, чем экраны с активной матрицей, где загрузкой каждого сегмента управляет отдельный транзистор. LCD экраны существуют как с зеркальной задней поверхностью, так и с задней подсветкой, иногда даже состоящей из нескольких цветов. Цветов сегментов у буквенно-цифровых LCD экранов в большинстве случаев один – как правило черный, но есть так же экраны с белыми и разноцветными надписями. ===== Практика ===== Дигитальный модуль Домашней Лаборатории соединяется с 2×16 знаковым буквенно-цифровом LCD WC1602A. Для управления экраном имеется 4-битная шина данных и 3 управляющих вывода, но его протокол общения слишком объемный, чтобы его здесь объяснять. Для упрощения использования экрана в библиотеке Домашней Лаборатории имеются соответствующие функции, исходный код которых находится на интернет-странице Домашней Лаборатории. Перед использованием экрана первым делом следует восстановить его исходные параметры. Для данной цели существует функция //lcd_alpha_init//, с помощью которой можно добавить на экран мигающий курсор. На экране, не зависимо от того видно это или нет, одна позиция курсора постоянно активна - туда вводится следующая буква. Следовательно, перед вводом текста, требуется навести курсор в нужное место. Для изменения местоположения курсора существует функция //lcd_alpha_goto_xy// и для отображения текста функция //lcd_alpha_write_string//. Все функции буквенно-цифрового LCD объяснены в данной библиотеке. Следующий программный код демонстрирует использование буквенно-цифрового LCD в качестве часов. Время начинается с „00:00:00“ и увеличивается, примерно, с каждой секундой. Так как счет времени происходит с помощью функции задержки, то это происходит не совсем точно. Неточность объясняет упражнение переодического прерывания. Программа считает секунды и переводит их с помощью вычисления в минуты и секунды. Для отображения текста часов используется стандартная функция на языке Си - //sprintf//. // // Пример использования буквенно-цифрового LCD Домашней Лаборатории. // На LCD отображается время начиная с начала программы. // #include #include #include // // Основная программа // int main(void) { int seconds = 0; char text[16]; // Настройка LCD экрана lcd_alpha_init(LCD_ALPHA_DISP_ON); // Очистка LCD экрана lcd_alpha_clear(); // Название программы lcd_alpha_write_string("Счетчик времени"); // Бесконечный цикл while (true) { // Перевод секунд в форму часов // чч:мм:сс sprintf(text, "%02d:%02d:%02d", (seconds / 3600) % 24, (seconds / 60) % 60, seconds % 60); // Отображение текста часов в началe второго ряда LCD lcd_alpha_goto_xy(0, 1); lcd_alpha_write_string(text); // Увеличение секунд на 1 seconds++; // Аппаратная пауза в 1000 миллисекунд hw_delay_ms(1000); } }