Kлaвиaтуpa и управление клавиатурой
Клавиатура содержит микропроцессор, который воспринимает каждое нажатие на клавишу и выдает скан-код в порт микросхемы интерфейса с периферией, расположенной на системной плате. Скан-код это однобайтное число, младшие 7 битов которого представляют идентификационный номер, присвоенный каждой клавише. На всех машинах, до АT, старший бит кода говорит о том, была ли клавиша нажата (бит = 1, код нажатия) или освобождена (бит = 0, код освобождения). Например, 7-битный скан-код клавиши B - 48, или 110000 в двоичной системе. Когда эта клавиша нажимается, то в порт А посылается код 10110000, а когда ее отпустили – код 00110000. Таким образом, каждое нажатие на клавишу дважды регистрируется в микросхеме 8255. И каждый раз микросхема 8255 выдает подтверждение микропроцессору клавиатуры. АT работает немного по-другому, посылая в обоих случаях один и тот же скан-код, но предваряя его кодом F0H, когда клавиша отпускается. Когда скан-код выдается в порт, то вызывается прерывание клавиатуры (INT 9). Процессор моментально прекращает свою работу и выполняет процедуру, анализирующую скан-код. Когда поступает код от клавиши сдвига или переключателя, то изменение статуса записывается в память. Во всех остальных случаях скан-код трансформируется в код символа, при условии, что он подается при нажатии клавиши (в противном случае, скан-код отбрасывается).
После этого введенный код помещается в буфер клавиатуры, который является областью памяти, способной запомнить до 15 вводимых символов, пока программа слишком занята, чтобы обработать их.
Имеется два типа кодов символов, коды АSСII и расширенные коды. Коды АSСII – это байтные числа, которые соответствуют расширенному набору кодов АSСII для IBM РС. Для IBM РС этот набор включает обычные символы пишущей машинки, а также ряд специальных букв и символов псевдографики. АSСII коды включают также 32 управляющих кода, которые обычно используются для передачи команд периферийным устройствам, а не выводятся как символы на экране; однако каждый из них имеет соответствующий символ, который может быть выведен на дисплей с использованием прямой адресации дисплейной памяти
Второй набор кодов, расширенные коды, присвоен клавишам или комбинациям клавиш, которые не имеют представляющего их символа ASCII, таким как функциональные клавиши или комбинации с клавишей Alt. Расширенные коды имеют длину 2 байта, причем первый байт всегда ASCII 0. Второй байт – номер расширенного кода. Например, код 0:30 представляет Alt-A. Начальный ноль позволяет программе определить - принадлежит ли данный код набору АSСII или расширенному набору.
Имеется несколько комбинаций клавиш, которые выполняют специальные функции и не генерируют скан-коды. Эти комбинации включают <Ctrl-Break>, <Ctrl-Alt-Del> и <РrtSс>. Эти исключения приводят к заранее предопределенным результатам. Все остальные нажатия клавиш должны интерпретироваться программой.
Сводная таблица скан-кодов
Каждая клавиша генерирует два типа скан-кодов, "код нажатия" – когда клавиша нажимается, и "код освобождения" - когда клавиша отпускается. Используется одна и та же цепочка битов для кодов нажатия и освобождения, но коды освобождения состоят из двух байтов, первый из которых всегда равен 0F0H. Прерывание клавиатуры отбрасывает этот код и он не связывается ни с каким кодом АSСII или расширенным кодом.
Клавиши пишущей машинки
Клавиша/Код нажатия | Клавиша/Код нажатия | Клавиша/Код нажатия |
"1" 2 | "T" 20 | "L" 38 |
"2" 3 | "Y" 21 | ";" 39 |
"3" 4 | "U" 22 | "'" 40 |
"4" 5 | "I" 23 | "`" 41 |
"5" 6 | "O" 24 | "\" 43 |
"6" 7 | "P" 25 | "Z" 44 |
"7" 8 | "[" 26 | "X" 45 |
"8" 9 | "]" 27 | "C" 46 |
"9" 10 | "A" 30 | "V" 47 |
"0" 11 | "S" 31 | "B" 48 |
"-" 12 | "D" 32 | "N" 49 |
"=" 13 | "F" 33 | "M" 50 |
"Q" 16 | "G" 34 | "," 51 |
"W" 17 | "H" 35 | "." 52 |
"E" 18 | "J" 36 | "/" 53 |
"R" 19 | "K" 37 | Пpoбeл 57 |
Управляющие клавиши
Esc - 1 | Ctrl – 29 | Alt - 56 |
BackSpace - 14 | left shift - 42 | CapsLock - 58 |
Tab - 15 | right shift - 42 | NumLock - 58 |
Enter - 28 | PrtSc – 55 | ScrollLock - 70 |
Функциональные клавиши
F1 - 59 | F5 - 63 | F9 - 67 |
F2 - 60 | F6 - 64 | F10 - 68 |
F3 - 61 | F7 - 65 | |
F4 - 62 | F8 - 66 |
Cвoднaя тaблицa кoдoв ASCII
Любой код АSCII от 1 до 255 может быть введен с клавиатуры, если держать нажатой клавишу Alt при наборе номера кода на дополнительной клавиатуре (с соответственно установленным режимом NumLock). Когда клавиша Alt затем освобождается, то код вводится.