Клавиатурное управление ЭВМ
Клавиатура (KeyBoard) – периферийное устройство ЭВМ предназначенное для механического ввода информации в оперативную память.
Пульт клавиатуры содержит около ста кнопок (клавиш), которым принято присваивать названия совпадающие с соответствующими надписями.
Из прагматических соображений, кнопки пульта принято подразделять на классы: символьные (для ввода символов из таблиц ANSI), функциональные (F1, F2, .., для подачи специфических команд оригинальных ПП), управления (Home, End, Delete,..., для редактирования текстовой информации), регистровые (Ctrl, Alt, Shift,.., для перенастройки смыслового значения символьных клавиш пульта).
Основные приемы механического воздействия на клавиатуру.
1). Кратковременное (продолжительностью не более 0.1 секунды) нажатие (надавливание) на клавишу. Время задержки реакции может настраиваться как в сторону увеличения, так и уменьшения.
2). Удержание задавленной кнопки.
3). «Одновременное» нажатие нескольких, обычно, двух или трех кнопок. Термин «одновременное» - не совсем удачен, т.к. такое действие практически не реализуемо: какая-то клавиша нажимается на микросекунду раньше, а какая-то позже. Под одновременность следует понимать:
- либо надавливание и удержание клавиш в строгой последовательности, причем последняя из набираемых клавиш нажимается кратковременно,
- либо удержание в задавленном состоянии только первой клавиши, из некоего требуемого набора, с последующим кратковременным нажатием всех остальных клавиш.
Опр. Макрос – сложная (макро!) команда, образованная строгой последовательностью элементарных (базовых) команд.
Пример. Редакторская работа в среде turbo Pascal. Для копирования фрагментов (блоков) текста необходимо:
1. указать начало копируемого блока (макрос CTRL-K-B),
2. указать конец копируемого блока (макрос CTRL-K-K),
3. поместить копию блока в указанное место (макрос CTRL-K-С).
Для выполнения первого пункта следует:
- поместить курсор перед первым символом блока,
- нажать и удерживать клавишу CTRL,
- кратковременно нажать клавишу K,
- кратковременно нажать клавишу B,
- отпустить клавишу CTRL.
Рекомендуется: удерживаемую клавишу нажимать левой рукой, а остальные правой (левши поступают наоборот !).
Физические события создаваемые клавиатурой могут быть только двух типов:
- нажата кнопка с порядковым номером N,
- отпущена, ранее нажатая, кнопка с порядковым номером N.
Для размещения этой информации достаточно всего одного байта. Операционная система постоянно и независимо от выполняемых ею программ анализирует последовательность происходящих и происходивших ранее (специально запомненных) физических события клавиатуры и создает командные события клавиатуры.
Командное событие клавиатуры можно формализовать предложением: нажата и отпущена кнопка (или несколько кнопок – макрос) с числовым именем Name (кодом командного события или кодом сканирования).
Коды командных событий размещаются в специальном разделе оперативной памяти (в буфере команд клавиатуры) в строгой очередности их поступления. Если в выполняемой ЭВМ программе предусмотрено получение команд (информации) от пользователя через клавиатуру, то эти команды выбираются программой именно из указанного буфера. Если к моменту востребования программой команды (информации) буфер пуст, т.е. пользователь не нажимал никаких клавиш, то ЭВМ переходит в режим ожидания соответствующих действий пользователя.
Системные ограничения на допустимые воздействия пользователя на клавиатуру:
- одновременное нажатие четырех и более кнопок блокирует порождение физических событий клавиатуры,
- переполнение буфера командных событий (поступило более десяти невостребованных программой команд) также блокирует порождение физических событий клавиатуры и сопровождается предупредительным звуковым сигналом,
- постоянное удерживание в нажатом состоянии любой, кроме регистровых, клавиши вызывает автоматическую генерацию командных кодов соответствующих последовательному кратковременному нажатию этой клавиши с интервалом 0.1 секунды.
Поскольку клавиатура используется не только для управления собственно самой выполняемой программы, но и для управления другими ПП, в частности операционной системой, определенная часть генерируемых командных событий клавиатуры скрывается (не доступна) для программистов, которые используют только возможности языка высокого уровня. Например, в языке Pascal невозможно прочесть команды: «нажата левая (или правая) кнопка Ctrl», «одновременно нажаты обе клавиши Shift» и т.п.
Терминология: числовые коды команд управления, которые порождаются физическими событиями клавиатуры и доступны программисту, называются кодами сканирования клавиатуры.
Коды сканирования символьных кнопок клавиатуры совпадают с кодами соответствующих символов в таблицах ANSI, поэтому для их размещения в буфере отводится всего один байт.
Коды сканирования остальных команд, подаваемых с клавиатуры, размещаются в двух байтах буфера, причем в первом байте всегда содержится #0 (чистый ноль), а во втором отличное от #0 содержимое.
Вывод: возможности языка программирования Pascal, позволяют получить от клавиатуры не более 512 различных кодов сканирования.
Для сканирования команд, поступивших от клавиатуры, к стандартному языку Pascal следует подключить две специальные процедуры-функции: ReadKey и KeyPressed, которые размещаются в библиотечном модуле CRT.
Процедура-функция ReadKey:
- возвращает код очередного командного события клавиатуры в виде переменной литерного (char) типа,
- автоматически удаляет запись об этом событии из буфера,
- если буфер пуст, то выполнение программы приостанавливается, т.е. программа переходит в режим ожидания до момента получения любого клавиатурного сообщения.
Процедура-функция KeyPressed возвращает булевское значение:
- true, если в буфере командных событий клавиатуры есть записи, т.е. к моменту запроса от клавиатуры были получены какие-то сообщения,
- false, если буфер пуст.
Пример: программа, в бесконечном цикле, печатает на экране символьную переменную СС и после каждой печати проверяет факт поступления от клавиатуры каких-либо сообщений. Если сообщение от клавиатуры поступило, то анализируется его код:
- если пользователь нажал клавиши Enter (код клавиатурного сообщения #13) или Esc (код #27), то выполнение программы завершается,
- если нажата любая иная клавиша, то выполнение программы продолжится, но с этого момента будет печататься символ соответствующий коду полученного сообщения.
Program NN;
Uses CRT; {подключить к программе процедуры из библиотеки CRT !}
Var CC, K: char;
Begin
CC:=’X’; {внести в переменную СС символ (букву) X ! }
While TRUE do {организовать бесконечный цикл оператором While !}
begin
write(CC); {отпечатать на экране символ СС !}
if KeyPressed then {если пользователь нажал какие-то клавиши то ...! }
begin
K:=ReadKey; {занести в переменную К код поданной команды !}
if K=#0 then K:=ReadKey; {если команда двухбайтовая, то прочесть в
переменную К вторую половину кода команды!}
if (K=#13) or (K=#27) then exit; {если нажаты клавиши Enter или Esc
то завершить выполнение программы !}
CC:=K; {скопировать содержимое переменной К в переменную СС 1}
end;
end;
End.
Дата добавления: 2021-12-14; просмотров: 258;