Матричная некодирующая клавиатура

Ознакомление с функциональными возможностями и структурой отладочного стенда EV8031/AVR. Изучение принципиальной схемы матричной некодирующей клавиатуры компьютеров и мобильных телефонов. Алгоритм опроса состояния клавиш и обработка кодов нажатий.

Рубрика Программирование, компьютеры и кибернетика
Вид лабораторная работа
Язык русский
Дата добавления 22.12.2019
Размер файла 1,1 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://allbest.ru

Лабораторная работа

Матричная некодирующая клавиатура

Введение

Цель работы: Ознакомиться с функциональными возможностями и внутренней структурой отладочного стенда EV8031/AVR.

Изучить внутреннюю организацию матричной некодирующей клавиатуры, научиться формировать коды нажатых клавиш и выполнять соответствующую обработку нажатий.

Краткие теоретические сведения

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

Различают два типа клавиатур: кодирующие и некодирующие. В клавиатурах первого типа при нажатии на клавишу схема контроллера клавиатуры формирует код, соответствующий этой клавише. К данному типу принадлежат компьютерные клавиатуры, в частности IBM PC AT. В цифровых устройствах наиболее часто используют простые и дешевые некодирующие клавиатуры, которые обычно представляют собой сканируемую матрицу кнопок.

Рассмотрим организацию матричной клавиатуры размерностью 5х3. Горизонтальные линии Х0 ... Х4 (ряды или строки) являются выходными, а вертикальные У0 ... У2 (колонки) являются входными (смотри рисунок 1).

В неактивном состоянии на выходах Х0 ... Х4 присутствует уровень логической единицы, а входы У0 ... У2 обычно подключены через резисторы к питанию. Для этой цели, как правило, используются встроенные резисторы, которые имеют некоторые порты микроконтроллеров.

При сканировании на горизонтальных линиях матрицы формируется сигнал «бегущего» нуля. Для каждой фазы «бегущего» нуля происходит считывание У0 ... У2. При замыкании какой-либо из клавиш матрицы на соответствующем выходе устанавливается нулевое значение. По результатам анализа кодов Х0 ... Х4 и У0 ... У2 происходит формирование кода нажатой клавиши.

Рисунок 1 - Структура матричной клавиатуры

В учебно-отладочном стенде EV8031/AVR матричная клавиатура реализована в виде 12 тактовых кнопок, сгруппированных в 3 столбца по 4 строки. Управление матричной клавиатурой осуществляется по линиям A0 ... A2 и KL0 ... KL3. Линии А0, А1, А2 - выводы столбцов 1, 2 и 3 соответственно (при счёте слева направо). Для того чтобы сформировать сигнал «бегущего» нуля для этих столбцов, необходимо по очереди обращаться для чтения к системному контроллеру учебно-отладочного стенда (т.е., к внешней памяти) по адресу 0x9006, 0x9005 и 0x9003 соответственно. Истинность данного утверждения проиллюстрирована ниже, на рисунке 2. клавиатура компьютер код матричный

Поскольку столбцов матричной клавиатуры 3, то последние 3 бита каждого из адресов внешней памяти отвечают за состояние линий A2, A1 и A0, причём, большему номеру линии соответствует бит с большим номером. Именно поэтому адреса сформированы так, чтобы они содержали 0 только в одном из разрядов, т.е.: 0x6 = 0b0110, 0x5 = 0b0101, 0x3 = 0b0011. Таким образом, чтение содержимого внешней памяти по любому из указанных адресов позволяет получить байт данных, младшая тетрада которого содержит информацию о нажатии клавиш (состояние линий KL3 ... KL0). Если некоторый бит в указанной тетраде равен 0, то это означает, что соответствующая клавиша нажата.

Рисунок 2 - Функциональная схема сопряжения матричной клавиатуры с микроконтроллером

Ниже, на рисунке 3 изображена схема электрическая принципиальная матричной клавиатуры.

Рисунок 3 - Схема электрическая принципиальная матричной клавиатуры, реализованной в учебно-отладочном стенде EV8031/AVR

Из анализа этой схемы видно, что нажатие клавиши SW3 в случае, если сигнал «бегущего» нуля сейчас установился на линии A0, приведёт к появлению нуля на выводе KL0, поскольку после нажатия указанной клавиши ток от источника питания (на рисунке 3 обозначен как VCC) начнёт протекать через токоограничительный резистор R7 (номиналом 56 КОм), клавишу SW3 (сопротивление которой можно считать близким к 0 Ом), а также полупроводниковый диод VD3.

Напряжение на открытом VD3 будет мало, поэтому на линии KL0 появится логический 0.

Таким образом, напряжение на линии KL0 всегда будет равно логическому нулю, если нажата любая из клавиш SW3, SW4, SW5.

Следовательно, для точного определения кода нажатой клавиши необходимо знать как состояние выводов KL0 ... KL3 (младшей тетрады считанного байта), так и состояние линий A2 ... A0 (на которые мы подаём «бегущий» ноль).

Учитывая всё вышесказанное, можно сформировать следующий алгоритм опроса состояния клавиш для матричной клавиатуры:

1. Сформировать и подать сигнал «бегущий» ноль на одну из линий A2 ... A0 путём обращения к контроллеру внешней памяти для чтения по одному из указанных адресов;

2. Выполнить анализ состояния младшей тетрады из байта, образовавшегося в результате чтения, на предмет наличия в ней нулевых битов (состояние линий KL3 ... KL0);

3. Определить порядковый номер нулевого бита, если такой есть;

4. По результатам анализа выполнить необходимое действие.

5. Вернуться к шагу 1.

Следует обратить отдельное внимание на некоторые особенности работы с матричной клавиатурой.

Формирование сигнала «бегущий» ноль должно осуществляться таким образом, чтобы он последовательно устанавливался для каждого из столбцов. При этом порядок перебора столбцов не имеет значения.

С точки зрения физиологических особенностей человека, невозможно выполнить нажатие одной и той же клавиши больше, чем 3-5 раз за секунду.

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

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

С учётом того, что проверку состояния клавиатуры следует выполнять 3-5 раз в секунду, при этом клавиатура содержит 3 столбца, то столбцы следует “сканировать” с частотой 9 ... 15 Гц.

Учитывая тот факт, что в учебно-отладочном стенде синхронизация работы микроконтроллера осуществляется кварцевым резонатором с рабочей частотой 7,3728 МГц, то необходимо вводить принудительную задержку в цикл обмена данными между микроконтроллером и микросхемой внешней памяти (или ПЛИС).

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

Этот факт значительно увеличивает вероятность получения недостоверной информации о состоянии выводов KL3 ... KL0 клавиатуры.

Введение принудительной задержки в цикл обмена микроконтроллера с внешней памятью осуществляется путём установки в “1” бита 6 (SRW10) регистра MCUCR и бита 1 (SRW11) регистра EMCUCR.

Данные действия необходимо выполнять на этапе инициализации микроконтроллера (в самом начале программы).

Учитывая тот факт, что клавиши на матричной клавиатуре учебно-отладочного стенда не имеют каких-либо алфавитно-цифровых обозначений, что является крайне необходимым, условно присвоим им соответствующие номера.

Результат процедуры присвоения представлен на рисунке 4. Для упрощения дальнейшей работы, всегда будем использовать приведённое распределение при работе с матричной клавиатурой.

Рисунок 4 - Условное соответствие позиции клавиши на матричной клавиатуре её порядковому номеру

Порядок выполниения работы

1. Запустить IDE AVR Studio 4.

2. Создать новый проект в IDE AVR Studio 4.

3. В появившемся окне написать программу на языке С или ассемблер с учётом варианта задания, который указан в таблице 1.

Таблица 1 - Варианты заданий

Описание задания

2

По каждому нажатию клавиши, отображать соответствующий ей номер в первой (верхней) строке жидкокристаллического индикатора. Номер любой клавиши должен занимать не более одного знакоместа индикатора.

4. Произвести компиляцию проекта.

5. При наличие сообщений об ошибках или предупреждениях вернуться к предыдущему пункту и внести необходимые исправления. В случае некорректной работы программы выполнить её отладку средствами меню Debug.

6. Проверить подключение USB-кабеля программатора к одноимённому разъёму системного блока.

7. Загрузить исполняемый файл проекта в микроконтроллер.

8. Визуально оценить правильность работы жидкокристаллического индикатора.

Результат выполнения работы

Текст программы на языке С, разработанной согласно варианта задания №2

#define F_CPU 7372800L//задаем частоту кварца (7,3728 МГц)

#include <avr/io.h>

#include <avr/iom8515.h>

#include <util/delay.h>

#define keyboard_col1_scan 0x9006//адрес регистра сканирования состояния первого столбца матричной клавиатуры

#define keyboard_col2_scan 0x9005//адрес регистра сканирования состояния второго столбца матричной клавиатуры

#define keyboard_col3_scan 0x9003//адрес регистра сканирования состояния третьего столбца матричной клавиатуры

//задаём константу - адрес регистра команд в ЖКИ

#define lcd_comm 0x8004

//задаём константу - адрес регистра данных в ЖКИ

#define lcd_data 0x8005

int main(void) {

//начальная инициализация контроллера

MCUCR= 1<<SRE | 1<<SRW10;//разрешаем работу с внешней памятью (обращение к системному контроллеру стенда)

EMCUCR= 1<<SRW11;//попутно вводим принудительные задержки в цикл обмена

ACSR= 1<<ACD;//отключение питания аналогового компаратора

volatile unsigned char temp;//переменная для хранения состояния строк клавиатуры

volatile unsigned char *c;

c= (unsigned char*) lcd_comm;

//устанавливаем указатель на адрес регистра данных ЖКИ

volatile unsigned char *d;

d= (unsigned char*) lcd_data;

/**

volatile unsigned char *control;//объявляем вспомогательный указатель control и устанавливаем его

control= (unsigned char*) stat_7seg_control;//на адрес регистра, отвечающего за включение/отключение знакомест индикатора

**/

volatile unsigned char *control;//объявляем вспомогательный указатель control и устанавливаем его

//начальная инициализация ЖКИ

*c= 0x38;//Function Set

_delay_ms(10);//вызываем задержку на 10 мс

*c= 0x0E;//Display On/Off Control

_delay_ms(10);//вызываем задержку на 10 мс

*c= 0x01;//Display clear

_delay_ms(10);//вызываем задержку на 10 мс

*c= 0x06;//Entry Mode Set

_delay_ms(10);//вызываем задержку на 10 мс

while(1) { //цикл сканирования клавиатуры

//устанавливаем указатель control на адрес регистра сканирования состояния столбцов клавиатуры

//выбран первый столбец клавиатуры, т.к. нулевой разряд = 0

control= (unsigned char*) keyboard_col1_scan;

temp= *control;//выдаем сигнал выбора на первый столбец и сразу же читаем состояние строк

temp= *control;//выдаем сигнал выбора на первый столбец и сразу же читаем состояние строк

temp= *control;//выдаем сигнал выбора на первый столбец и сразу же читаем состояние строк

temp= *control;//выдаем сигнал выбора на первый столбец и сразу же читаем состояние строк

if((temp & 0x01)== 0x00) {//если нажата кнопка в первой строке первого столбца (т.е. кнопка "1")

temp= 0x31;

*d= temp; //выводим код клавиши

_delay_ms(200);//вызываем задержку на 200 мс

} else if((temp & 0x02)== 0x00) {//если нажата кнопка во второй строке первого столбца (т.е. кнопка "4")

temp= 0x34;

*d= temp; //выводим код клавиши

_delay_ms(200);//вызываем задержку на 200 мс

} else if((temp & 0x04)== 0x00) {//если нажата кнопка в третьей строке первого столбца (т.е. кнопка "7")

temp= 0x37;

*d= temp; //выводим код клавиши

_delay_ms(200);//вызываем задержку на 200 мс

} else if((temp & 0x08)== 0x00) {//если нажата кнопка в четвёртой строке первого столбца (т.е. кнопка "<-*")

temp= 0x2A;

*d= temp; //выводим код клавиши

_delay_ms(200);//вызываем задержку на 200 мс

}

//устанавливаем указатель control на адрес регистра сканирования столбцов клавиатуры

//выбран второй столбец клавиатуры, т.к. первый разряд = 0

control= (unsigned char*) keyboard_col2_scan;

temp= *control;//выдаем сигнал выбора на второй столбец и сразу же читаем состояние строк

temp= *control;//выдаем сигнал выбора на второй столбец и сразу же читаем состояние строк

temp= *control;//выдаем сигнал выбора на второй столбец и сразу же читаем состояние строк

temp= *control;//выдаем сигнал выбора на второй столбец и сразу же читаем состояние строк

if((temp & 0x01)== 0x00) {//если нажата кнопка в первой строке второго столбца (т.е. кнопка "2")

temp= 0x32;

*d= temp; //выводим код клавиши

_delay_ms(200);//вызываем задержку на 200 мс

} else if((temp & 0x02)== 0x00) {//если нажата кнопка во второй строке второго столбца (т.е. кнопка "5")

temp= 0x35;

*d= temp; //выводим код клавиши

_delay_ms(200);//вызываем задержку на 200 мс

} else if((temp & 0x04)== 0x00) {//если нажата кнопка в третьей строке второго столбца (т.е. кнопка "8")

temp= 0x38;

*d= temp; //выводим код клавиши

_delay_ms(200);//вызываем задержку на 200 мс

} else if((temp & 0x08)== 0x00) {//если нажата кнопка в четвёртой строке второго столбца (т.е. кнопка "0")

temp= 0x30;

*d= temp; //выводим код клавиши

_delay_ms(200);//вызываем задержку на 200 мс

}

//устанавливаем указатель control на адрес регистра сканирования столбцов клавиатуры

//выбран третий столбец клавиатуры, т.к. второй разряд = 0

control= (unsigned char*) keyboard_col3_scan;

temp= *control;//выдаем сигнал выбора на третий столбец и сразу же читаем состояние строк

temp= *control;//выдаем сигнал выбора на третий столбец и сразу же читаем состояние строк

temp= *control;//выдаем сигнал выбора на третий столбец и сразу же читаем состояние строк

temp= *control;//выдаем сигнал выбора на третий столбец и сразу же читаем состояние строк

if((temp & 0x01)== 0x00) {//если нажата кнопка в первой строке третьего столбца (т.е. кнопка "3")

temp= 0x33;

*d= temp; //выводим код клавиши

_delay_ms(200);//вызываем задержку на 200 мс

} else if((temp & 0x02)== 0x00) {//если нажата кнопка во второй строке третьего столбца (т.е. кнопка "6")

temp= 0x36;

*d= temp; //выводим код клавиши

_delay_ms(200);//вызываем задержку на 200 мс

} else if((temp & 0x04)== 0x00) {//если нажата кнопка в третьей строке третьего столбца (т.е. кнопка "9")

temp= 0x39;

*d= temp; //выводим код клавиши

_delay_ms(200);//вызываем задержку на 200 мс

} else if((temp & 0x08)== 0x00) {//если нажата кнопка в четвёртой строке третьего столбца (т.е. кнопка "#>")

temp= 0x23;

*d= temp; //выводим код клавиши

_delay_ms(200);//вызываем задержку на 200 мс

}

}

while(1){//бесконечный цикл

*c=0x18;//Display Shift

_delay_ms(2000);//вызываем задержку на 2 секунды

}

return 0;

}

Особенности функционирования IDE AVR Studio 4

AVR Studio -- интегрированная среда разработки (IDE) для разработки AVR-приложений от компании Atmel. AVR Studio содержит компилятор C/C++ и симулятор, позволяющий отследить выполнение программы. Текущая версия поддерживает все выпускаемые на сегодняшний день контроллеры AVR и средства разработки. AVR Studio содержит в себе менеджер проектов, редактор исходного кода, инструменты виртуальной симуляции и внутрисхемной отладки, позволяет писать программы на ассемблере или на C/C++.

Выводы

В ходе данной лабораторной работы были рассмотрены функциональные возможности и внутренняя структура отладочного стенда EV8031/AVR. Была изучена внутренняя организация матричной некодирующей клавиатуры, были изучены принципы формирования кодов нажатых клавиш и выполнения соответствующей обработки нажатий.

Размещено на Allbest.ru


Подобные документы

  • Расположение клавиш на клавиатуре. "Горячие клавиши" общего назначения. Использование цифровой клавиатуры для быстрого ввода чисел. Организация клавиш набора, функциональных, перемещения и управления. Характеристика основных символов клавиатуры.

    презентация [670,4 K], добавлен 10.08.2015

  • Изучение характеристик и режимов работы ВТА 2000-30. Составление блок-схемы алгоритма программы. Рассмотрение особенностей интерфейса вычислительных систем. Описание кодов символьных и функциональных клавиш, полученных при выполнении практической работы.

    отчет по практике [26,6 K], добавлен 04.04.2015

  • Разработка и практическая апробация действия драйвер-фильтра клавиатуры для операционной системы Windows, переопределяющего значение любых клавиш и отключающего клавиши клавиатуры. Составление программы для установки и управления данным драйвером.

    курсовая работа [226,8 K], добавлен 18.06.2009

  • Ввод в компьютер информации от пользователя. Набор на клавиатуре. Структура и принцип действия клавиатуры. Алфавитно-цифровые, стандартные управляющие и функциональные клавиши. Малая цифровая клавиатура, управление курсором, световые индикаторы функций.

    презентация [1,1 M], добавлен 23.02.2015

  • Клавиатура как современный основной элемент компьютера, ее назначение. Функции некоторых клавиш в большинстве программ. Шрифты в контексте ввода текста с клавиатуры и отображения символов. Основные виды, параметры клавиатур и принцип их действия.

    реферат [101,8 K], добавлен 20.02.2009

  • Изобретение в конце XIX века телепечатной машины. Первые компьютерные клавиатуры. Краткая характеристика видов компьютерных клавиатур по расположению клавиш и их функциональности. Сенсорная клавиатура нового поколения, функциональные возможности.

    презентация [443,8 K], добавлен 19.10.2016

  • Назначение и история разработки клавиатуры, ее технические характеристики и классификация. Особенности расположения клавиш, их группировка и сочетание. Основные режимы работы изучаемого периферического устройства, порядок его настройки и подключения.

    курсовая работа [1,9 M], добавлен 22.05.2013

  • Циклические коды как подкласс (подмножество) линейных кодов, пошаговый алгоритм и варианты их кодирования и декодирования. Методика построения интерфейса отладочного модуля. Элементарный план и элементы отладки декодирующего модуля циклических кодов.

    лабораторная работа [133,8 K], добавлен 06.07.2009

  • Описание функционирования магазина мобильных телефонов. Особенности создания базы данных учета товарооборота магазина мобильных телефонов в СУБД Microsoft Access. Концептуальное проектирование системы, инфологическое моделирование предметной области.

    курсовая работа [9,5 M], добавлен 11.08.2012

  • Изучение схемы рабочего процесса ОАО МСК "Страж". Практическая разработка автоматизации услуг по выплате компенсаций клиентам. Ознакомление с интерфейсом, требованиями к системе, функциональными возможностями и руководством к использованию программы.

    курсовая работа [2,7 M], добавлен 05.02.2010

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.