Описание лабораторной работы

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

Один вывод каждой клавиши соединяется с горизонтальной линией, второй вывод соединяется с вертикальной линией. Каждая горизонтальная линия одним концом соединяется с источником питания, а вторым подключается к порту ROW. Вертикальная линия подключается только с одной стороны к выходам порта COL.

 

Рисунок 9 – Матричная структура клавиатуры

 

Если все ключи разомкнуты, то потенциал на входах порта ROW остается высоким, т.е. соответствует логической единице. Однако если замкнуть один из ключей и на соответствующую вертикальную линию подать сигнал низкого уровня, то потенциал горизонтальной линии, с которой соединена эта клавиша, также станет низким. Иначе говоря, если записать в порт COL значение 1101, то это позволит сканировать состояние клавиш для «столбца» с нулем. Например, если при этом будет нажата клавиша K26, то на горизонтальной линии будет низкий потенциал и на 6-м входе (порт ROW) будет 0, т.е. ROW = 1101.

Для доступа к портам клавиатуры используется регистр KB микросхемы ПЛИС (адрес 080000h), состояние ячеек которого соответствует сигналам на выходах/входах портов COL и ROW. Таким образом, полный опрос матричной клавиатуры включает последовательное обнуление младших четырех битов регистра КВ с анализом на каждом шаге старших разрядов регистра.

При нажатии на клавишу напряжение не сразу устанавливается на низком уровне, а «скачет» в течение некоторого времени (1 – 10 мс), пока цепь надежно не замкнется - дребезг (рисунок 10). После того, как клавиша будет отпущена, напряжение также «скачет», пока не установится на уровне логической «1».

Рисунок 10 – Эпюра напряжений при дребезге вследствие

нажатия и отпускания клавиши клавиатуры

 

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

Нажатие клавиши вызывает прерывание работы процессора. Во время прерывания производится опрос регистра клавиатуры, и если нажата какая-либо клавиша, ее код заносится в буферный регистр. Чтение символа из него производится с помощью функции чтения ReadKeyBuffer(), которая в случае удачного завершения возвращает 1 и передает считанный из буфера байт, а в случае, если буфер пуст, возвращает 0.

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

Исходя из этого, все задержки в обработчике были реализованы не напрямую, а через счетчик прерываний. После фиксации нажатия клавиши устанавливается флаг нажатия KeyPress, и сканирование запрещается до тех пор, пока клавиша не будет отпущена. Теперь при каждом вызове обработчика увеличивается значение счетчика и проверяется его состояние. Если счетчик равен определенным значения, то выполняются связанные с ними действия (например: count = 1, прошло время достаточное для пропускания «дребезга»; count = 3, можно фиксировать отпускание клавиши; count = 3 + DelayBefore Repeat, пропущена задержка перед повтором символа).

Перед сканированием клавиатуры производится проверка на нажатие, что позволяет не тратить время на бесполезное сканирование, если ни одна клавиша не нажата. Если фиксируется нажатие производится сканирование клавиатуры, пока не будет идентифицирована нажатая клавиша. После этого устанавливается флаг, и работа обработчика завершается. Когда приходит следующее прерывание, то поскольку установлен флаг нажатия, клавиатура не сканируется, а сразу осуществляется переход к обработке нажатия на клавишу. Поскольку между текущим прерыванием и прерыванием, во время которого было зафиксировано нажатие клавиши, прошло некоторое время, то «дребезг» был пропущен. Теперь можно повторно проверить состояние клавиши, отмеченной переменными COL и ROW. Если клавиша еще нажата, то соответствующий символ попадает в буфер, в противном случае флаг нажатия клавиши KeyPress сбрасывается, обработка прерывания завершается и продолжается сканирование клавиатуры.

После записи кода клавиши в буфер осуществляется задержка, достаточная для отпускания клавиши, и еще раз опрашивается состояние клавиши. Если состояние клавиши изменилось, то фиксируется отпускание клавиши (флаг нажатия клавиши KeyPress сбрасывается) и продолжается сканирование клавиатуры. Иначе осуществляется задержка перед повтором символа, и если клавиша еще не отпущена, повторно заносится код символа. После этого через промежутки, определяемые скоростью повтора, код клавиши заносится в буфер до тех пор, пока не будет зафиксировано отпускание клавиши.

 

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

1. Перед выполнением работы необходимо подробно ознакомиться с материалами п.7.1, изучить структуру, функции и команды для работы с клавиатурой.

2. Подготовить стенд к работе, как описано в п.2.

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

4. Зайти в папку лабораторной работы №4 (Keyboard) и открыть файл Simple.с, нажав на клавишу F4 в FAR или вызвав его в текстовом редакторе при работе в Windows, и внести в программу подготовленные изменения.

5. Запустить файл (п.2) и убедиться, что символы, соответствующие клавишам клавиатуры правильно отражаются на экране монитора и загоревшиеся светодиоды соответствуют заданию.

 

 

ЛИТЕРАТУРА

 

1. Корнеев В.В., Киселев А.В. Современные микропроцессоры.-3-изд., перераб. и доп.- СПб.:БХВ-Петербург, 2003.- 448 с.

2. Микропроцессорные системы./ М.С. Куприянов, Р.И. Грушвицкий, О.Е. Мартынов и др. Под. ред Д.В.Пузанкова Учебное пособие для вузов. - СПб., Политехника, 2002.- 936 с.

3. Угрюмов Е.П. Цифровая схемотехника.: Учебное пособие для вузов:-2-е издание, переработанное и дополненное-СПб: БХВ - петербург, 2005. - 800с.

 

ПРИЛОЖЕНИЕ А

(справочное)








Дата добавления: 2018-11-25; просмотров: 297;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.008 сек.