Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Обслуживание матрицы ключей



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

1. Матрица и ее особенности

Рассмотрим простейшую матрицу 4х4.

Всего есть 16 ключей. При обычной линеечной организации пришлось бы использовать 16 битов, два порта. Соединив ключи в матрицу, получаем экономию в 2 раза. Если матрица будет большего размера, то и экономия будет больше. Помним, что при опросе ключа формируется нулевой сигнал, если один из контактов, один из выводов ключа подсоединен к земле. Отсбда следует, что мы можем подключать к земле один из столбцов, одну из линеек ключей.

Пусть нулевой сигнал есть на 7 выводе порта. На всех остальных будут 1. Пусть нажали кнопку 1,4. То есть, соединили в этом месте строчку и столбец. Программа прочитает на выводе 1, пассивный сигнал. То есть нажатие в неактивных столбцах не обнаруживается.

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

Заметим, при такой нумерации, что номера в разных столбцах отличаются, и отличие можно выразить формулой N=X+Y*X

Где Х это номер строки, где произошло нажатие. А Y это номер столбца, где обнаружили нажатие. А Xmax зависит от размера матрицы. То есть в нашем случае Xmax=4. Клавиши в разных столбцах различаются на 4.

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

2. Вычисление скан-кодов

Происходит по формуле.

Чтобы избежать операций умножения и заменить ее сдвигом, Xmax стараются взять равным степени двойки. Тогда умножение на 4 можно сделать при помощи двойного сдвига, умножение на 8 с помощью тройного сдвига.

mSkanKod=mX|(mY<<mXmax);

3. Сканирование матрицы

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

Как всегда работаем с инверсными значениями. Здесь надо учесть, что для нас Х это часть, относящаяся к строкам, то есть 4 младших бита, то есть при вводе х мы игнорируем, отбрасываем старшие биты. Для старших юитов, которые управляют столбцами, мы используем константную маску, где есть один 0 и остальные все единицы. 0 это активный выбранный столбец. То есть в начале маски нулевым будем 4 бит, а все остальные 1.

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

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





Дата публикования: 2015-01-23; Прочитано: 211 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.006 с)...