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

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

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






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



Вычисление основной дактилоскопической формулы Вычислением основной дактоформулы обычно занимается следователь. Для этого все десять пальцев разбиваются на пять пар...

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

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

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

Тема 2: Анатомо-топографическое строение полостей зубов верхней и нижней челюстей. Полость зуба — это сложная система разветвлений, имеющая разнообразную конфигурацию...

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

Что происходит при встрече с близнецовым пламенем   Если встреча с родственной душой может произойти достаточно спокойно – то встреча с близнецовым пламенем всегда подобна вспышке...

Травматическая окклюзия и ее клинические признаки При пародонтите и парадонтозе резистентность тканей пародонта падает...

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

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

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