Хартов В.Я. Микроконтроллеры AVR. Практикум для начинающих (2007) (1264222), страница 32
Текст из файла (страница 32)
40 мкс Система команд контроллера Н044780 приведена в табл. 6.1, для выполнения каждой нз команд требуется определенное время, указанное в таблице. В связи с этим при программировании обмена с дисплеем необходимо после вывода каждой команды предусмотреть задержку в ожидании завершения заданной операции. 196 б.
Организация ввода!вывода данных по параллельному интерфейсу Окончание табл, б.! Примечание. 1 — ь — команды, записываемые при значениях сигналов Кь = = К/Чу= О; 9 — чтение при КЗ= О, КМ'=1; 1Π— записьданныхпри КБ =1, К/%=0 в буфер данных РРКАМ или в память знакогенератора СОКАМ; 11 — чтение данных при Кь = К!% = ! из памяти РРКАМ или СОКАМ. Символьные данные для отображения на дисплее поступают в коде А8С11 в буфер контроллера дисплея, объем которого составляет 80 байтов.
В зависимости от режима отображения !одно- Окно дисплея строчный или двухстрочный) данные для вывода на экран представляют один 80-байтовый массив или два массива по 40 байтов каждый. При двухстрочном выводе начальный адрес верхней строки (строка О) составляет $00, рнс. 6.4. Схема отображения для нижней 1строка 1) — $40. Косимвольной информации на тичество позиций в строке дис даухстрочном дисплее плея зависит от его типа. В моде- ли ЕМ0161. длина строки составляет 16 позиций.
Из этого следует, что длина буферного массива превышает число позиций дисплея. Поэтому для отображения всех элементов массива данных окно дисплея перемешается вдоль массива (рис. 6.4). Все элементы, попадающие в окно, отображаются на экране дисплея, остальные остаются вне зоны видимости. Курсор отоб- б. !. Взаимодействие с клавиатурой и ЖК-дисплеем 197 ражается на экране, если предварительно была введена команда отображать его и он находится в зоне видимости. В программе после передачи каждого символа данных необходимо предусмотреть временную задержку 40 мкс.
Процедуру инициализации дисплея и вывода сообщения из программной памяти микроконтроллера можно представить в виде последовательности действий. При начальной инициализации: 1) установка 8-битового режима вывода в две строки шрифтом 5х 7, задержка; 2) задание направления сдвига курсора вправо без сдвига дисплея, задержка; 3) включение дисплея, гашение курсора, задержка; 4) очистка дисплея и установка курсора в нулевую позицию, задержка; 5) задержка 2 мс. При выводе сообщения: 6) установка адреса буферной памяти для вывода верхней строки дисплся, задержка; 7) считывание байта сообщения из памяти и передача в дисплей, задержка, 8) повторение п.
7 для вывода всех символов сообщения в верхнюю строку; 9) установка адреса буферной памяти для вывода нижней строки дисплея, задержка; 10) вывод символа на дисплей при замыкании кнопки, задержка; 11) повторение п.10 до заполнения строки дисплея; 12) очистка дисплея и установка курсора в нулевую позицию, 13) задержка 2 мс и продолжение вывода. Програчлгирование интерфейсов.
Программирование обмена с клавиатурой и ЖК-дисплеем рассмотрим на примере проекта, в котором предусмотрен ввод с клавиатуры простого калькулятора размером 4х 4, подключенного к микроконтроллеру АТ908515, и вывод на ЖК-дисплей 1.М0161. постоянного информационного сообщения в начале работы и затем вывод кнопочных символов клавиатуры (цифр 0 — 9 и символов операций +, —, х, !).
Для соединения с внешними устройствами используем порты микроконтроллера (Р13 — для клавиатуры, РС вЂ” для передачи команд и данных на ЖК-дисплей, РА — для передачи управляющих сигналов на дисплей). Схема проекта изображена на рис. 6.5. ЕМО!61. с(ег госз=г21 х)еГ Кеу=г19 х)еГ всапсох(=г20 х(еб 1сб=г22 х)еб соцпс 1сб=г2З .огд БООО гфпр ьп1Г .огд 8007 г)пр всап)хеув ;обработка клавиатуры порт РА на вывод порт РС на вывод линии порта РРО-РРЗ на вывод РР4-РР7 на ввоД Программа 6.1 198 6, Организация ввода/вывода данных по параллельному интерфейсу Рис. 6.5. Схема соединения микроконтроллера с клавиатурой и ЖК-дисплеем Программирование операций ввода/вывода представлено программой 6.1.
После инициализации портов микроконтроллера, таймера и дисплея производится однократный вывод сообщения на верхнюю строку дисплея. Поскольку текст сообщения не изменяется при повторных запусках программы, он размещен в памяти программ. Символы кнопок отображаются на нижней строке дисплея. В этом случае по номеру замкнутой кнопки происходит обращение к таблице их символьных обозначений, откуда извлекается ЛВС11-код и пересылается в буфер дисплея. После заполнения строки дисплея весь экран Очищается с помощью соответствующей команды, вывод на экран продолжается с начальной позиции. ;Программа 8.1 для демонстрации работы интерфейса ;с клавиатурой 4х4 и двухстрочным ЖК-дисплеем с встроенным ;контроллером НР44780, передачей байтов команд и данных по ;8-разрядной шине через порт РС.
Управляющие сигналы ;поступают на дисплей из МК по линиям РА5-РА7. Клавиатура ,"подключена к порту РР: входы клавиатуры (вертикальные 6.1. Взаимодействие с клавиатурой и ЖК-дисплеем 199 ;линии] соединены с выходами РРО-РРЗ, выходы клавиатуры ;(горизонтальные линии) — с входами РР4-РР7. ***к********************* ******* ** ;файл определений АТ9088515 ;временная переменная ;номер сканируемого ряда клавиатуры ;номер строки клавиатуры ;номер кнопки сканирующий код грегистр ЬСР (ЖК-дисплея) ;счетчик выводимых символов на ЬСР ;Разряды порта РА для управления ЬСР . ецц ге=5 ; (КБ=1) — данные, (КБ=О) — команды .ейц гн=б ;(КХ=1) — чтение 1СР, (КХ=О) — запись в ЬСР .ечц е=7 ;строб сигналов на шине команды/данные ;Инициализация хп18: 1дь Гепр,1он(КАМЕМР) ;инициализация оцс ар1/Гепр указателя стека 1х)1 Гепр,)х19)х(КАМЕНР) оцг ар)х,гепр ;Инициализация портов вег Гепр оьв РРРА,Гепр оцс РОКС,Гепр 1х(1 Гепр,БОГ оцс РРКР,Гепр 14(1 Гепр,БРО оцГ РОКТР,Гепр ;Инициализация таймера 0 1х(1 Сепр,805 оцх ТССКО,Гепр ;коэффициент деления 1024 161 Гепр,(1«Т01ЕО) оцс Т1МБК, Гепр ;разрешение прерываний от таймера ;Инициализация ЖК-дисплея гса11 х(е1ау2па 200 б, Организация ввода)вывода данных по параллельному интерфейсу разрешение прерываний ;Подпрограмма обработки клавиатуры ясапкеуя: с1г хеу с1г ясапсос( 1с)1 со1я,4 яес ясап: го1 ясапсос( оцо РОНТП,ясапсос( с1с 1б1 гася,4 гп Гепр,Р1ИО пп: го1 Гепр Ьгсс пп ;формирование очередного скан-кода ;вывод на клавиатуру ;ввод состояния клавиатуры ;проверка замыкания кнопки 1оф 1сс(,838 ;8-битовый режим вывода, гса11 1сбсоп 2 строки, шрифт 5х7 1бф 1са,$06 ;Направление сдвига курсора вправо, без сдвига дисплея гса11 1сбсоп 1с(1 1сб/ 80С ;включить дисплей, гса11 1сосоп погасить курсор 1бг 1со,$01 ;Очистить дисплей и установить курсор в нулевую позицию гса11 1сбсоп гса11 бе1ау2пя ;Установка адреса буферной памяти для вывода верхней ;строки дисплея 1бф 1сб,$80 гса11 1сбсоп 1бф соцпГ 1сб,12 ;вывод на верхнюю строку дисплея 1бх г1,1он(яьг 0*2) 1б1 гЬ,ЬТоЬ(яьг 0*2) оцГО: 1рп аб1н г1,1 пот 1сб, гО гса11 1сооас бес соцпс 1сб Ьгпе оцГО ;Установка адреса буферной памяти для вывода нижней строки ,"дисплея 1бх 1сс(,8СО гса11 1сбсоп 1а1 соцпГ 1сб,17 яеф 1оор: г)пр 1оор б.1.
Взаимодействие с клавиатурой и ЖК-дисплеем 201 гфпр ргеяв пп: ьпс Кеу бес гояя Ьгпе пп с(ес со1я Ьгпе ясап ргеяя: ср1 хеу,16 Ьгец 81 гса11 1сс) ягг 1 Г1: геоф ;переход при замыкании (С=О) ;увеличение номера кнопки ;уменьшение номера строки ;уменьшение номера ряда ;выкод при отсутствии замыканий ;вывод на дисплей ;Подпрограмма вывода 1сбсоп: оцГ РОРТС,1со 1с(1 Гепр,Ох80 оцс РОНТА,Сепр сЬг РОНТА,е гса11 бе1ау40ця на дисплей байта команды ;вывод команды ;установка режима записи команд ;фронт 1/О стюоба ;Подпрограмма вывода значения клавиши на нижнюю строкУ ;дисплея 1сб яог 1: бес соцпГ 1сс) Ьгпе пес ;При достижении конца строки обновить счетчик вывода на ;дисплей, очистить дисплей и установить курсор в нулевую гпозицию 1б1 соцпГ 1сб,16 1с)1 1сс( $01 гса11 1сбсоп гса11 бе1ау2пя ;Установка адреса буферной памяти на начало нижней строки 1с(1 1сс(,8СО гса11 1сбсоп ;Определение символа клавиши по ее номеру и вывод на ;дисплей пеГ: 1бх г1,1он(ясг 1*2) 1дф гЬ,ЬТОЬ(ятг 1*2) асЫ г1,)сеу Ьгсс пе2 ьпс гЬ пе2: 1рп пот 1сс(,гО гса11 1сбс(аг гег 202 б.
Организация ввода/вывода данных по параллельному интерфейсу гег ;Подпрограмма вывода на дисплей байта данных 1оббагс оос РОРТС,1сб 1бь Сешр,ОхЛО спг РОПТЬ, Гвшр сЬ1 РОВТА, е гса11 бе1ау40пз гег ;вывод символа ;установка режима записи данных ;фронт 1/О отроба бе1ау40пз: 1б1 г18,48 бО: бес г18 Ьгпв бО гег бе1ау2шз: ;задержка 2 мс 1бь г17, 48 61: гоа11 бв1ау40пз бес г17 Ьгпе 61 гег задержка 40 мкс при Рс1К = 3,69 НГц Текст сообщения для верхней строки дисплея Обозначения клавиш, выводимые на нижнюю строку дисплея звг 1: .бЬ /','х ,'- Задание Е Запустить программу АУК Зшс)10 4. Подготовить программу б.1 для компиляции.
Получить файл с расширением .)зех, выполнив команды Рго/ес// Ви/Ы. Запустить программу Рготепз/ 151З для симуляции проекта с виртуальными устройствами, клавиатурой и дисплеем. Создать проект согласно схеме рис. б.5. Выделив правой кнопкой мыши обозначение микроконтроллера, щелчком левой кнопки открьпь окно настройки н указать путь к )зех-файлу, полученному в АУК ЗШ010 4.
Запустить программу на выполнение. Нажимая кнопки виртуальной клавиатуры, убедиться в правильной работе программы обмена, наблюдая символы кнопок, выводимые на дисплей. Задание 2. Изменить схему проекта, заменив клавиатуру 4х 4 клавиатурой бх4. Внести соответствующие изменения в программу. Проверить работу программы на модели с виртуальными устройствами. б.2. Организация асинхронного параллельного обмена,. 205 Задание 3. Изменить программу, предусмотрев вывод символов на дисплей в направлении справа налево. Проверить работу программы. Задание 4. Изменить программу, предусмотрев вывод команд и данных на дисплей по 4-разрядной шине данных.
Проверить работу программы. Задание 5. Подключить к разъемам ЗТК500 схему дисплея и блок клавиатуры. Загрузить программу и проверить ее работу. (В комплекте ЗТК500 эти устройства отсутствуют, поэтому задание можно выполнить при наличии соответствующих устройств клавиатуры и дисплея. — Прим. авт.) 6.2. ОРГАНИЗАЦИЯ АСИНХРОННОГО ПАРАЛЛЕЛЬНОГО ОБМЕНА ДАННЫМИ С КВИТИРОВАНИЕМ Цель работы — изучение режимов ввода/вывода информации через порты микроконтроллера и организация асинхронного параллельного обмена данными с квитированием. Асинхронный обмен между микроконтроллером и ВУ можно осуществить различными способами, Способ с опросом состояния внешнего устройства. При этом способе микроконтроллер считывает из контроллера адресованного ВУ слово состояния (5%) ВУ. Если бит готовности в слове состояния указывает на готовность ВУ к обмену данными, микроконтроллер запускает эту операцию (чтение при вводе или запись при выводе).