ВЗАИМОДЕЙСТВИЕ С КЛАВИАТУРОЙ И ЖК-ДИСПЛЕЕМ на МК AVR

March 11, 2011 by admin Комментировать »

Цель работы – изучение способов ввода;вывода информации по параллельному интерфейсу через порты микроконтроллера.

Типовым примером взаимодействия микроконтроллера с внешними устройствами по параллельному интерфейсу является обмен данными со стандартными устройствами ввода;вывода – матричной клавиатурой и дисплеем. Рассмотрим особенности работы этих устройств и программирование операций ввода;вывода.

Клавиатура. Клавиатура представляет собой кнопочный (клавишный) блок, в котором кнопки (клавиши) размещены в виде матрицы на пересечении горизонтальных и вертикальных линий связи (рис. 6.1).

Один ряд линий, например вертикальных, подключают к входному регистру, другой ряд (горизонтальных) – к выходному регистру. На входной регистр из контроллера подают код, содержащий О в одном разряде и единицы во всех остальных. При замыкании кнопки вертикального ряда, на котором присутствует сигнал О, этот сигнал поступит в горизонтальную линию и по ней на выходной регистр. Проверив состояние выходного регистра, контроллер может идентифицировать строку, а вместе со столбцом и номер замкнутой кнопки. С помощью последовательности сканирующих кодов вида 1110, 1101, 1011,0111 можно опросить состояние всех столбцов клавиатуры и установить номер замкнутой кнопки (клавиши). Используя его как индекс, можно выбрать из таблицы переходов начальный адрес процедуры, выполняемой при замыкании соответствующей кнопки.

Рис. 6.5. Схема соединения микроконтроллера с клавиатурой и ЖК-дисплеем

Программирование операций ввода;вывода представлено программой 6.1. После инициализации портов микроконтроллера, таймера и дисплея производится однократный вывод сообщения на верхнюю строку дисплея. Поскольку текст сообщения не изменяется при повторных запусках программы, он размещен в памяти программ. Символы кнопок отображаются на нижней строке дисплея. В этом случае по номеру замкнутой кнопки происходит обращение к таблице их символьных обозначений, откуда извлекается ASCII-код и пересылается в буфер дисплея. После заполнения строки дисплея весь экран очищается с помощью соответствующей команды, вывод на экран продолжается с начальной позиции.

Программа 6.1

f

;Программа 6.1 для демонстрации работы интерфейса ;с клавиатурой 4×4 и двухстрочным ЖК-дисплеем с встроенным ;контроллером HD4 4 7 80, передачей байтов команд и данных по ;8-разрядной шине через порт PC. Управляющие сигналы ;поступают на дисплей из МК по линиям РА5-РА7. Клавиатура ;подключена к порту PD: входы клавиатуры (вертикальные

;линии) соединены с выходами PD0-PD3, выходы клавиатуры ;(горизонтальные линии) – с входами PD4-PD7.

.include "8515def.inc" ;файл определений AT90S8515 .def temp=rl6   ;временная переменная

.def cols=rl8                ;номер сканируемого ряда

; клавиатуры

.def rots=r21                ;номер строки клавиатуры

.def кеу=г19                 ;номер кнопки

.def scancod=r20             ;сканирующий код

.def lcd=r22                 ;регистр LCD (ЖК-дисплея)

.def count_lcd=r23           ;счетчик выводимых символов

; на LCD

;Разряды порта РА для управления LCD

.equ rs=5 ; (RS=1) – данные, (RS=0) – команды

.equ rw=6 ;(RW=1) – чтение LCD, (RW=0) – запись в LCD

.equ e=7        ;строб сигналов на шине команды;данные

.org $000

rjmp init .org $007

rjmp scankeys          ;обработка клавиатуры

;Инициализация init:

Idi temp,low(RAMEND) ;инициализация out spl,temp      ; указателя стека

Idi temp,high(RAMEND) out sph,temp ;Инициализация портов ser temp

out DDRA,temp          ;порт PA на вывод

out DDRC,temp          ;порт PC на вывод

Idi temp,$0F           ;линии порта PD0-PD3 на вывод,

out DDRD,temp          ; PD4-PD7 на ввод

Idi temp,$F0 out PORTD,temp ;Инициализация таймера О Idi temp,$05

out TCCRO,temp         ;коэффициент деления 1024

Idi temp, (1«TOIEO)

out TIMSK, temp        ;разрешение прерываний от таймера

;Инициализация ЖК-дисплея rcall delay2ms

Idi led,$38               ;8-битовый режим вывода,

rcall Icdcom              ; 2 строки, шрифт 5×7

Idi led,$06

;Направление сдвига курсора вправо, без сдвига дисплея rcall Icdcom

Idi lcd,$OC               ;включить дисплей,

rcall Icdcom              ; погасить курсор

Idi led,$01

;Очистить дисплей и установить курсор в нулевую позицию rcall Icdcom rcall delay2ms ;Установка адреса буферной памяти для вывода верхней ;строки дисплея Idi led,$80 rcall Icdcom

Idi count_lcd,12          ;вывод на верхнюю строку дисплея

Idi zl,low(str_0*2) Idi zh,high(str_0*2) outO: 1pm adiw zl,l mov lcd,rO rcall Icddat dec count_lcd brne outO

;Установка адреса буферной памяти для вывода нижней строки ;дисплея

Idi lcd,$CO rcall Icdcom Idi count_lcd,17

sei                       ;разрешение прерываний

loop: rjmp loop

;Подпрограмма обработки клавиатуры scankeys: clr key clr scancod Idi cols,4 sec

scan: rol scancod ;формирование очередного скан-кода out PORTD,scancod ;вывод на клавиатуру clc

Idi rots,4

in temp,FIND           ;ввод состояния клавиатуры

mm:rol temp

brcc nn                ;проверка замыкания кнопки rjmp press ;переход при замыкании (С=0)

пп: inc key               ;увеличение номера кнопки

dec rots                  ;уменьшение номера строки

brne mm

dec cols                  ;уменьшение номера ряда

brne scan press: cpi key,16

breq fl                   ;выход при отсутствии замыканий

rcall lcd_str_l           ;вывод на дисплей

fl: reti

;Подпрограмма вывода значения клавиши на нижнюю строку

;дисплея

lcd_str_l:

dec count_lcd brne met

;При достижении конца строки обновить счетчик вывода на ;дисплей, очистить дисплей и установить курсор в нулевую ;позицию

Idi count_lcd,16 Idi led,$01 rcall Icdcom rcall delay2ms

;Установка адреса буферной памяти на начало нижней строки Idi led,$С0 rcall Icdcom

;Определение символа клавиши по ее номеру и вывод на ;дисплей

met: Idi zl,low(str_l*2) Idi zh,high(str_l*2) add zl,key brcc me2 inc zh me2: 1pm

mov lcd,rO rcall Icddat ret

;Подпрограмма вывода на дисплей байта команды Icdcom:

out PORTC,lcd             ;вывод команды

Idi temp,0x80             ;установка режима записи команд

out PORTA,temp

cbi PORTA,e               ;фронт 1;0 cipo6a

rcall delay40us

ret

;Подпрограмма вывода на дисплей байта данных Icddat:

out PORTC,lcd          ;вывод символа

Idi temp,OxAO          ;установка режима записи данных

out PORTA,temp

cbi PORTA,e            ;фронт 1;0 строба

rcall delay40us

ret

delay4 0us:      ;задержка 4 0 мкс при Fclk = 3,69 МГц

Idi rl8,48 dO:dec rl8 brne dO ret

delay2ms:        ;задержка 2 мс

Idi rl7,48 dl:rcall delay40us dec rl7 brne dl ret

; Текст сообщения для верхней строки дисплея

str_0: .db ‘К’,’Е’,’Y’,’Р’,’А’,’D’,’           ‘,’L’,’С’,’D’

; Обозначения клавиш, выводимые на нижнюю строку дисплея str_l: .db

Задание 1. Запустить программу AVR Studio 4. Подготовить программу 6.1 для компиляции. Получить файл с расширением .hex, выполнив команды Project; Build.

Запустить программу Proteus; ISIS для симуляции проекта с виртуальными устройствами, клавиатурой и дисплеем. Создать проект согласно схеме рис. 6.5. Выделив правой кнопкой мыши обозначение микроконтроллера, щелчком левой кнопки открыть окно настройки и указать путь к hex-файлу, полученному в AVR Studio 4. Запустить программу на выполнение. Нажимая кнопки виртуальной клавиатуры, убедиться в правильной работе программы обмена, наблюдая символы кнопок, выводимые на дисплей.

Задание 2. Изменить схему проекта, заменив клавиатуру 4×4 клавиатурой 6×4. Внести соответствующие изменения в программу. Проверить работу программы на модели с виртуальными устройствами.

Задание 3. Изменить программу, предусмотрев вывод символов на дисплей в направлении справа налево. Проверить работу программы.

Задание 4. Изменить программу, предусмотрев вывод команд и данных на дисплей по 4-разрядной шине данных. Проверить работу программы.

Задание 5. Подключить к разъемам STK500 схему дисплея и блок клавиатуры. Загрузить программу и проверить ее работу. (В комплекте STK500 эти устройства отсутствуют, поэтому задание можно выполнить при наличии соответствующих устройств клавиатуры и дисплея. – Прим. авт.)

Оставить комментарий

микросхемы мощности Устройство импульсов питания пример приемника провода витков генератора выходе напряжение напряжения нагрузки радоэлектроника работы сигнал сигнала сигналов управления сопротивление усилитель усилителя усиления устройства схема теория транзистора транзисторов частоты