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 затем освобождается, то код вводится.



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