Ревич, Ю.В. Программирование микроконтроллеров AVR: от Arduino к ассемблеру
4 1 6 Часть 111. Практическое программирование микроконтроллеров АVR из этого файла тоже в большинстве случаев подходят - как мы говорили, чаще всего они все равно де-факто двухстрочные. Подробно используемые алгоритмы мы здесь разъяснять не станем (при желании читатель легко найдет информацию в многочисленных сетевых публикациях на эту тему или просто в описаниях дис плеев). Здесь мы только поясним применение некоторых процедур и опций, кото рые там доступны. В файле LCD1 602 . prg объявлен регистр rlб как привычный temp, и им можно пользо ваться под этим именем в основной программе (чтобы не вызывать излишних пре дупреждений, лучше его не именовать по второму разу). Кроме этого, для процедур задержки задействуются два регистра: rl 7 и rl B ( RazrO и Razrl ) . При этом они со храняются (кешируются) в стеке, потому их можно применять в основной про грамме без каких-то ограничений. Первым делом в программе необходимо с помощью команды . include "LCD1 602 . prg" подключить файл нашей «библиотеки». Подключается он в начале программы, по сле первой команды rjmp RESET или таблицы прерываний. Затем в секции RESET нужно, как обычно, установить указатель стека (и сделать другие необходимые в программе установки, если они требуются), после чего сразу вызвать процедуру инициализации командой rcall LCD_ini . В этой процедуре, кроме всего прочего, делаются установки нужных битов РСО . . РСЗ и РВl . . 2, так что специально их уста навливать не надо (остальные биты этих портов потом в программе можно исполь зовать по своему усмотрению). Процедура LCD_ini устанавливает курсор в начальную позицию первой (верхней) строки (строка О, позиция О) . Последовательный вывод символов будет каждый раз автоматически сдвигать курсор на одну позицию. Если вывод символов необходи мо начинать с определенного места, то нужно переустановить курсор командой set_cursor. Команда является макросом, потому оператор rcall не требуется, а оформлять параметры надо по правилам для макросов, по образцу set_cursor 1 , s (эта команда установит курсор в 5 -ю позицию нижней строки) . Первый параметр, означающий строку, может принимать значения о (верхняя строка) или 1 (нижняя), а второй параметр, означающий позицию: от о до максимальной длины строки ми нус 1 (для дисплеев с 1 6-ю позициями это будет 1 5) . Учтите, что выход за границы строк и позиций никак не проверяется, и попытка вывода, например, в строку 2 или позицию 1 6 (на дисплее 1 6х2) либо будет проигнорирована, либо превратит в хаос изображение на всем дисплее . · К основной процедуре для вывода символов надо обращаться по следующему об разцу: ldi temp, ' 2 ' ; вывод цифры 2 в текущую позицию курсора rcall LCD data Как мы уже говорили, напрямую можно указывать цифры, английские буквы и другие символы из левой половины таблицы знакогенератора, приведенной ранее (см. рис . 1 6 . 7 - такая таблица обязательно приводится в полном «даташите» на любой дисплей). Русские буквы выводятся по их кодам (адресам в таблице):
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==