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

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

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






Клавиатура организована в виде матрицы 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; просмотров: 355. Нарушение авторских прав; Мы поможем в написании вашей работы!



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

ТЕОРЕТИЧЕСКАЯ МЕХАНИКА Статика является частью теоретической механики, изучающей условия, при ко­торых тело находится под действием заданной системы сил...

Теория усилителей. Схема Основная масса современных аналоговых и аналого-цифровых электронных устройств выполняется на специализированных микросхемах...

Логические цифровые микросхемы Более сложные элементы цифровой схемотехники (триггеры, мультиплексоры, декодеры и т.д.) не имеют...

Объект, субъект, предмет, цели и задачи управления персоналом Социальная система организации делится на две основные подсистемы: управляющую и управляемую...

Законы Генри, Дальтона, Сеченова. Применение этих законов при лечении кессонной болезни, лечении в барокамере и исследовании электролитного состава крови Закон Генри: Количество газа, растворенного при данной температуре в определенном объеме жидкости, при равновесии прямо пропорциональны давлению газа...

Ганглиоблокаторы. Классификация. Механизм действия. Фармакодинамика. Применение.Побочные эфффекты Никотинчувствительные холинорецепторы (н-холинорецепторы) в основном локализованы на постсинаптических мембранах в синапсах скелетной мускулатуры...

Характерные черты немецкой классической философии 1. Особое понимание роли философии в истории человечества, в развитии мировой культуры. Классические немецкие философы полагали, что философия призвана быть критической совестью культуры, «душой» культуры. 2. Исследовались не только человеческая...

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

Кран машиниста усл. № 394 – назначение и устройство Кран машиниста условный номер 394 предназначен для управления тормозами поезда...

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