Вы знаете, чем ребенок отличается от нас, взрослых? Конечно же, размерами. Это верно, но это не все. В отличие от нас, маленькому человечку все любопытно. Ему все интересно. Вопросы о том, что это такое, откуда оно взялось и как оно работает, сыплются из него, как из рога изобилия. Давайте и мы ненадолго вернемся в детство и станем любопытными, чтобы поближе познакомиться с клавиатурой.
Устройств ввода информации в компьютер существует большое количество. Среди этого многообразия устройств пальма первенства принадлежит клавиатуре. Несмотря на свой солидный возраст, она в ближайшие годы не собирается на заслуженный отдых.
Да и о каком отдыхе может идти речь. В настоящее время реальных конкурентов у клавиатуры нет. Набирать тексты с помощью мышки можно пожелать только врагу. Системы оптического распознавания текстов далеки от идеала. Программы, преобразующие речь в текст, требуют для своей работы солидной техники и пока не настолько удобны, как может показаться. Об этом можно сказать не мало, но это - тема для отдельного разговора.
Вернемся к клавиатуре. Клавиатура не просто 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.
![Версия для печати Версия для печати](https://www.kv.by/sites/all/modules/print/icons/print_icon.png)
Горячие темы