Клавиатура PC представляет собой унифицированное устройство со стандартным разъемом и последовательным интерфейсом связи с системной платой. В качестве датчиков нажатия клавиш применяют механические контакты, кнопки на основе токопроводящей резины, емкостные датчики и датчике на эффекте Холла. Независимо от типов применяемых датчиков нажатие клавиш, все они объединяются в матрицу. Клавиатура содержит внутренний контроллер осуществляющий сканирование матрицы клавиш, управление индикаторами, внутреннюю диагностику и связь с системной платой последовательным интерфейсом по линиям KB-Data и KB-Clock.
Существует 3 основных типа клавиатур: Клавиатура XT; Клавиатура AT; Расширенная клавиатура.
При нажатии клавиши клавиатура передает идентифицирующий ее скан-код – номер, идентифицирующий ее расположение на клавиатуре.. При удержании клавиши в нажатом положении через некоторое время начинается автоповтор передачи скан-кода нажатия этой клавиши. При отпускании клавиши клавиатура XT передает ее скан-код, увеличенный на 80h, а клавиатура AT передает 2 байта: в первом содержится пре фикс F0, во втором – скан-код.. Прием байта от клавиатуры вызывает аппаратное прерывание IRQ1 (вектор 9h).
Задание параметров автоповтора, выбор таблиц скан-кодов, управление светодиодными индикаторами, а также управление режимом сканирования матрицы клавиш и запуск диагностического теста осуществляется командами, посылаемыми центральным процессором в порт 60h. Перед посылкой команды необходимо убедится в готовности контроллера к их приему – бит 1 порта 64h должен иметь нулевое значение.
Клавиатура имеет поддержку со стороны BIOS: коды, принятые от клавиатуры, по аппаратному прерыванию IRQ1 (вектор 9h) обрабатываются, и результат для дальнейшей обработки может быть извлечен значительно позже. BIOS INT 9h обрабатывает прерывания, вызванные приходом кодов нажатия и отпускания клавиш, анализируя принятый скан-код с учетом состояния флагов и комбинаций клавиш альтерации Shift, Ctrl, Alt, CapsLock, NumLock. Результат обработки (ASCII-символ и скан-код) помещаются в буфер клавиатуры, расположенный в ОЗУ. В случае переполнения буфера очередное слово не записывается и подается звуковой сигнал.
Кроме обычного способа, любой символ можно ввести в буфер с помощью Alt-набора. Для этого его код в десятичной системе набирается на цифровой клавиатуре при нажатой клавише Alt, результат заносится в буфер но отпускании Alt. При таком способе в буфер будет занесен нулевой скан код, что отличает Alt-набор от обычного.
Используемые ячейки BIOS DATA AREA: 0:0417, 0:0418 – флаги клавиатуры; 0:0419 – аккумулятор кода Alt-набора; 0:041A – 2-байтный указатель головы буфера; 0:041С – 2-байтный указатель хвоста буфера;
0:041Е –область кольцевого буфера (16 слов);
Программно-вызываемое прерывание BIOS 16 h представляет интерфейс прикладного уровня для клавиатуры. Его основное назначение – извлечение слов из клавиатурного буфера. Функция задается в регистре AH при вызове: 00h – чтение и выборка слова из буфера; 01h – проверка готовности, чтение без выборки; 02h – чтение состояния флагов; 03h – установка задержки и скорости автоповтора; 05h – запись слова в буфер.
Младший байт считанного слова содержит ASCII-символ, старший – скан-код.