Клавиатура

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

1) определять, была ли нажата хотя бы одна клавиша. Если клавиши — однополюсные однопозиционные переключатели, то это означает проверку на наличие хотя бы одного нуля на входах. Для этой проверки можно воспользоваться сравнением со словом, состоящим из одних единиц;

2) если одна из клавиш нажата, опрелелять, какая именно. Для реализации этой функции выполнить последовательность сдвигов такую, как на рис. 8.26;

3) выбрать действие, соответствующее нажатой клавише. Этот выбор зависит от назначения клавиатуры. С помощью клавиш могут определяться входные данные, режимы, операции управления, команды, масштабные множители и т. д. Один из методов выбора таков: использовать таблицу (называемую таблицей переходов), в которой содержатся адреса подпрограмм, выполняющих действия, соответствующие раличным клавишам. Адрес, выбираемый из таблицы, определяется положением клавиши. На рис. 8.27 приведена блок-схема метода таблицы переходов.

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

Указанная проблема решается с помощью кодирования. Для небольших клавиатур можно использовать кодирующие устройства ТТЛ. Для клавиатур большего объема обычно используют МОП-схемы, так как высокая скорость кодирования не требуется. МОП-кодеры имеют ПЗУ. Для обычных форматов (таких, как у телетайпа) выпускаются готовы^ кодеры,а для форматов пользователя нужна специальная маска или ППЗУ, т. е. МОП-кодеры не только реагируют на нажатие клавиши, но и кодируют сигнал от нее. Большинство из них управляют перекрытием (rollover) (разделяют одновременное нажатие клавиш и интерпретируют нажатия последовательно), демпфируют сигналы от клавиш,, осуществляют выбор режима (например: «верхний регистр» или «нижний регистр»), вырабатывают строб-сигнал, который может действовать как сигнал «данные готовы» и фиксировать данные в порте ввода.

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

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

Шаг 1. Определить, нажата ли хотя бы одна клавиша. Заземлить все линии столбцов, фиксируя в порте вывода нулевые значения разрядов. Если среди линий строк окажутся заземленные, то существует контакт между строками и столбцами, т. е. некоторые клавиши нажаты. Подавая сигналы с линий строк на входы схем И—НЕ, можно выработать строб-сигнал с высоким действующим значением.

Шаг 2. Определить, какая клавиша нажата.

Если программа обнаружила контакт, она может идентифицировать нажатую клавишу, заземляя столбцы по одному. Если нажатая клавиша не находится в данном столбце, то все входы с линий строк будут единичными. Если нажатая клавиша находится в данном столбце, то среди входов будет нуль в позиции, соответствующей нужной строке. В табл. 8.6 показаны сочетания состояний строк и столбцов, определяющие одну из клавиш, изображенных на рис. 8.28.

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

1) среднее число просмотров столбцов растет линейно с ростом числа столбцов;

2) поиск и проверка становятся длительными и громоздкими, если число строк или столбцов превышает длину слова ЦП;

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

Во многих простых устройствах (например, в карманных калькуляторах) производится постоянное сканирование клавиатуры в ожидании нажатия клавиши.

Существует и другая процедура, в которой используется устройство, подобное адаптеру интерфейса периферийных устройств (PIA), т. е. устройство, линии ввода-вывода которого можно программно настроить на ввод или вывод. В этом случае для определения нажатой клавиши необходимы следующие шаги: заземлить все столбцы и сохранить входы с линий строк; заземлить все строки и сохранить входы с линий столбцов. Сочетание данных, полученных от линий строк и столбцов, идентифицирует положение клавиши в соответствии с табл. 8.7. На рис. 8.30 приведена блок-схема этого метода. Нет необходимости в сканировании столбцов и в поиске строки, но зато, чтобы идентифицировать клавишу, ЦП должен просмотреть таблицу возможных входов.

Имеется еще ряд проблем, связанных с интерфейсом между клавиатурой и процессором. Программными или аппаратными средствами необходимо демпфировать сигналы от механических переключателей, обрабатывать одновременные нажатия клавиш. Процессор должен отличать ранее возникающий контакт от более позднего. Строб-сигнал может идентифицировать новые данные только тогда, когда строб будет сбрасываться при чтении данных процессором. Этот сброс выполняет-ся^ автоматически портом ввода-вывода 8212 и адаптером интерфейса периферийных устройств (PIA). Если строба вообще нет, то процессор может просто ожидать окончания контакта. Процедура сканирования клавиатуры совпадает с первым шагом блок-схемы на рис. 8.29, за исключением того, что условия перехода инвертируются. В этой ситуации пользователь должен делать паузу между нажатыми клавиш, так как в противном случае система не будет реагировать на его запросы.