Студопедия — Описание лабораторной работы
Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

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






Клавиатура организована в виде матрицы 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 сбрасывается) и продолжается сканирование клавиатуры. Иначе осуществляется задержка перед повтором символа, и если клавиша еще не отпущена, повторно заносится код символа. После этого через промежутки, определяемые скоростью повтора, код клавиши заносится в буфер до тех пор, пока не будет зафиксировано отпускание клавиши.

 







Дата добавления: 2015-08-12; просмотров: 345. Нарушение авторских прав; Мы поможем в написании вашей работы!



Расчетные и графические задания Равновесный объем - это объем, определяемый равенством спроса и предложения...

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

Обзор компонентов Multisim Компоненты – это основа любой схемы, это все элементы, из которых она состоит. Multisim оперирует с двумя категориями...

Композиция из абстрактных геометрических фигур Данная композиция состоит из линий, штриховки, абстрактных геометрических форм...

ЛЕКАРСТВЕННЫЕ ФОРМЫ ДЛЯ ИНЪЕКЦИЙ К лекарственным формам для инъекций относятся водные, спиртовые и масляные растворы, суспензии, эмульсии, ново­галеновые препараты, жидкие органопрепараты и жидкие экс­тракты, а также порошки и таблетки для имплантации...

Тема 5. Организационная структура управления гостиницей 1. Виды организационно – управленческих структур. 2. Организационно – управленческая структура современного ТГК...

Методы прогнозирования национальной экономики, их особенности, классификация В настоящее время по оценке специалистов насчитывается свыше 150 различных методов прогнозирования, но на практике, в качестве основных используется около 20 методов...

ОПРЕДЕЛЕНИЕ ЦЕНТРА ТЯЖЕСТИ ПЛОСКОЙ ФИГУРЫ Сила, с которой тело притягивается к Земле, называется силой тяжести...

СПИД: морально-этические проблемы Среди тысяч заболеваний совершенно особое, даже исключительное, место занимает ВИЧ-инфекция...

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

Studopedia.info - Студопедия - 2014-2024 год . (0.01 сек.) русская версия | украинская версия