О внучке печатной машинки

Вы знаете, чем ребенок отличается от нас, взрослых? Конечно же, размерами. Это верно, но это не все. В отличие от нас, маленькому человечку все любопытно. Ему все интересно. Вопросы о том, что это такое, откуда оно взялось и как оно работает, сыплются из него, как из рога изобилия. Давайте и мы ненадолго вернемся в детство и станем любопытными, чтобы поближе познакомиться с клавиатурой.

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

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

Вернемся к клавиатуре. Клавиатура не просто keyboard - доска с кнопками, на которые можно нажимать, а сложное электронное изделие стоимостью от $12. Она представляет собой отдельный компьютер, работой которого управляет специальный микропроцессор. Он отслеживает нажатие и отпускание клавиш на клавиатуре и информирует об этих действиях BIOS, базовую систему ввода/вывода.

Микропроцессор обладает определенным интеллектом. Благодаря ему микропроцессор самостоятельно контролирует правильность своей работы, различает нажатые клавиши, а также может сохранить до 20 нажатий клавиш в случае, если центральный процессор в этот момент занят чем-нибудь более важным.

Создатели этого электронного чуда позаботились о геймерах. При нажатии на клавишу более чем на 0.5 секунды, микропроцессор посылает сигнал об этом примерно 10 раз в секунду. Согласитесь, что это удобнее, чем нажимать на клавишу со скоростью 10 раз в секунду.

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

Чтобы отличать байты кода один от другого, каждому из них было присвоено личное имя. Младший байт назвали основным, а старший - дополнительным.

Клавиши на клавиатуре можно классифицировать на три группы. Первую группу составляют простые клавиши. К этой группе относятся алфавитно-цифровые клавиши, а также клавиши BackSpace, ENTER и ESC. Во вторую группу входят специальные клавиши. Это функциональные клавиши (F1-F12), клавиши управления курсором (со стрелками), клавиши Home, End, Ins, Del, а также комбинации клавиш Ctrl или Alt + некоторые простые клавиши.

И, наконец, третью группу составляют клавиши, при самостоятельном нажатии на которые не формируется код. Это клавиши Ctrl, Alt, Shift, Num Lock и Caps Lock. Код для этих клавиш может быть сформирован, если их нажать в комбинации с какой-нибудь другой клавишей. Это может быть специальная комбинация. Например, известная всем комбинация из трех пальцев, Ctrl+Alt+Del, позволяет вывести компьютер из летаргического сна. А комбинация Ctrl+Break выполняет эти же действия в отношении программы.

Подпрограмма обработки прерывания заносит двухбайтовый код в буфер клавиатуры только если была нажата клавиша, относящаяся к первой или второй группе. При нажатии специальной комбинации клавиш, например, Ctrl+Alt+Del, двухбайтовый код не формируется.

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

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

Список скан-кодов клавиатуры можно найти в документации и Help-е языков программирования. Для тех, кто лишен документации или сэкономил место на диске за счет Help-а, можно порекомендовать книгу [1]. В конце концов, не составляет труда написать маленькую программку из трех строк, которая будет считывать скан-код нажатой клавиши из буфера клавиатуры и выводить его на экран.

В любом современном языке программирования все необходимое для этого есть. Например, чтобы прочитать содержимое буфера клавиатуры, достаточно воспользоваться функцией Inkey$ языка Basic, подпрограммой ReadKey языка Pascal или функцией GetChar языка C.

А что нам дает знание скан-кода нажатой клавиши? Зачем он нам нужен, и нужен ли он вообще? Ответ может быть только положительный. Зная скан-код, вы можете заставить программу выполнять необходимые действия при нажатии определенных клавиш. Самый яркий тому пример - вывод на экран справки при нажатии клавиши F1.

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

Сергей ОСОКО

1. Библиотека информационной технологии: Вып.2./ Под ред. Громова Г.Р. - М.: ИнфоАрт, 1991.

Версия для печатиВерсия для печати

Номер: 

33 за 1997 год

Рубрика: 

Азбука программирования
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!