Принципы работы клавиатуры как физического устройства

Существуют два микроконтроллера, обеспечивающие процесс обработки клавиатурного ввода: один — на материнской плате ПК, второй — в самой клавиатуре. Микроконтроллер 8042 постоянно сканирует нажатия клавиш на клавиатуре — независимо от активности на центральном процессоре.

За каждой клавишей клавиатуры закреплен определенный номер, однозначно связанный с распайкой клавиатурной матрицы и не зависящий напрямую от обозначений, нанесенных на поверхность клавиш. Этот номер называется скан-кодом (название подчеркивает тот факт, что компьютер сканирует клавиатуру для поиска нажатой клавиши). Скан-код — это случайное значение, выбранное IBM еще тогда, когда она создавала первую клавиатуру для ПК. Скан-код не соответствует ASCII-коду клавиши, одной и той же клавише могут соответствовать несколько значений ASCII-кода.

На самом деле клавиатура генерирует два скан-кода для каждой клавиши — когда пользователь нажимает клавишу и когда отпускает. Наличие двух скан-кодов важно, так как некоторые клавиши имеют смысл только тогда, когда они нажаты (Shift, Control, Alt). На всех машинах старший бит кода говорит о том, была ли клавиша нажата (бит = 1, код нажатия) или освобождена (бит = 0, код освобождения). Например, 7-битный скан-код клавиши B - 48, или 110000 в двоичной системе. Когда эта клавиша нажимается, то в порт A посылается код 10110000, а когда ее отпустили - код 00110000. Поскольку такие коды для стандартных клавиатур восьмиразрядные, то возможное суммарное количество указанных кодов равняется 256. Коды отжатия отличаются от кодов нажатия прибавлением к ним десятичного значения 128. Таким образом, стандартные клавиатуры не могут содержать в себе более 128 клавиш. Клавиатура AT генерирует двухбайтный скан-код при отпускании клавиши, в котором первый байт – 0xF0, а второй совпадает со скан-кодом нажатия.

Если оператор нажмет на какую-либо клавишу, то соответствующая вертикальная и горизонтальная линии окажутся замкнутыми. Когда на этой вертикальной линии процессор установит значение логического 0, то уровень напряжения на горизонтальной линии также будет соответствовать логическому 0, тогда клавиатурный процессор фиксирует нажатие на клавишу. Он посылает в центральный компьютер запрос на прерывание и номер клавиши в матрице. Аналогичные действия выполняются и тогда, когда оператор отпускает нажатую ранее клавишу. Если нажать на клавишу и не отпускать ее, клавиатура перейдет в режим автоповтора. В этом режиме в центральный компьютер автоматически через некоторый период времени, называемый периодом автоповтора, посылается код нажатой клавиши.

Принцип действия клавиатуры

Cигнал при нажатии клавиши регистрируется контроллером клавиатуры (например, 8049) и передается в виде так называемого скэн-кода на микросхему (данная микросхема находится на материнской плате) выполняющую функцию порта клавиатуры и записывается в собственную память (аппаратный буфер) клавиатуры. Затем, инициализируется аппаратное прерывание, сигнализирующее о появлении очередного скан-кода. Получив прерывание, процессор откладывает текущую работу и по номеру прерывания обращается в специальную область оперативной памяти, в которой находится так называемый вектор прерываний. Вектор прерываний - это список адресных данных с фиксированной длиной записи. Каждая запись содержит адрес программы, которая должна обслуживать прерывание с номером, совпадающим с номером записи. Определив адрес начала программы, обрабатывающей возникшее прерывание, процессор переходит к исполнению процедуры, обработчика прерывания, в данном случае процедуре анализирующей скэн-код – специальная программа, входящей в состав ROМ BIOS ­ Клавиатурный драйвер.

Программа-обработчик прерывания направляет процессор к порту клавиатуры, где он находит скан-код, загружает его в свои регистры, потом под управлением обработчика определяет, какой код символа соответствует данному скан-коду. Клавиатурные драйверы преобразуют коды нажатий и отжатий в другие коды (так называемые коды ASCII или расширенные коды) - в коды таблицы символов или в служебные коды, затем, направлет их в буфер клавиатуры. Однако, при поступлении скэн-кода от клавиш А1t, Сtг1 или Shift, СарsLосk изменение статуса записывается в RAM. При этом Клавиатурный драйвер сначала определяет установку клавиш и переключателей, чтобы правильно получить вводимый код ("а” или "А”). После передачи кодов в буфер клавиатуры клавиатурный драйвер прекращает свою работу, известив об это процессор. Процессор прекращает обработку прерывания и возвращается к отложенной задачи. Введённый символ хранится в буфере клавиатуры до тех пор, пока его не заберёт оттуда та программа, для которой он и предназначался, например текстовый редактор.

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

Причем для таких кодов, как ASCII или Windows-1251 коды символов являются однобайтовыми, а коды многих служебных символов (например, для функциональных клавиш) - двухбайтовые. Коды из буфера клавиатуры уже воспринимаются другими модулями операционной системы и прикладными программами (блокнот и тп) и могут трактоваться ими по своему усмотрению в зависимости от целевого назначения этих модулей и программ.

Комбинации клавиш тоже отлавливаются и обрабатываются клавиатурным драйвером.

Контроллер на материнской плате может не только принимать, но и передавать данные, чтобы сообщить клавиатуре различные параметры, например, частоту повтора нажатой клавиши, для выполнения функций самоконтроля и проверки нажатых клавиш в процессе загрузки системы. Процесс самоконтроля отображается однократным миганием трех индикаторов LED клавиатуры во время выполнения программы POST. Таким образом, неисправность клавиатуры выявляется уже на стадии загрузки РС.

Скан-код — код, присвоенный каждой клавише, с помощью которого драйвер клавиатуры распознает, какая клавиша была нажата. При нажатии любой клавиши контроллер клавиатуры распознаёт клавишу и посылает её скан-код в порт 60h. При отпускании клавиши контроллер клавиатуры устаревшего формата IBM PC/XTпосылает в тот же порт скан-код, увеличенный на 80h, а более нового формата IBM PC/AT — два байта: F0h и скан-код (скан-коды клавиатуры AT также отличаются от XT). Некоторые клавиши генерируют не один, а несколько скан-кодов (так, правые Shift, Alt, Ctrl, обе Win, а также Menu, Insert, Delete, Page Up, Page Down, Home, End, стрелки и мультимедиа-клавиши генерируют два скан-кода, первый из которых — E0, клавиша PrintScreen генерирует 4 скан-кода, а клавиш Pause — целых 6 скан-кодов). Каждый байт, записанный в порт 60h, генерирует аппаратное прерывание int 09h.

Скан-коды жёстко привязаны к каждой клавише на аппаратном уровне и не зависят ни от состояния индикаторов CapsLock, ScrolLock, ни от состояния управляющих клавиш Shift, Alt, Ctrl.

ASCII( American Standard Code for Information Interchange) — американская стандартная кодировочная таблица для печатных символов и некоторых специальных кодов.

ASCII это код для представления символов в виде чисел, в котором каждому символу сопоставлено число от 0 до 127. В большинстве компьютеров код ASCII используется для представления текста, что позволяет передавать данные от одного компьютера на другой. Стандартный набор символов ASCII использует только 7 битов для каждого символа. Добавление 8-го разряда позволяет увеличить количество

1. кодов таблицы ASCII до 255. коды от 0 до 127 (символы управления внешними устройствами, арабские цифры, латинские буквы)

2. коды от 128 до 255. Эта таблица отличается для разного типа компьютеров, содержит символы национальных алфавитов, символы псевдографики, математические символы.

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

Расширенный код ASCII

Расширенный код ASCII включает в себя:

1. Символы управления. Каждый управляющий символ имеет условное обозначение, но в устройствах отображения не отображается, а вызывает лишь действие. Обозначается управляющий символ: # и код символа (например символ DEL удаляет символ, а сам на экране не отображается).

2. Символы арифметических операций, знаки препинания, цифры.

3. Буквы латинского алфавита (прописные, строчные)

4. Буквы псевдографики (символы, применяемые для построения простейших фигур)

5. Буквы национальных алфавитов.

6. Математические символы.

Наши рекомендации