- •Оглавление
- •Комбинированный урок №16
- •Обеспечение интерфейса с командами операционной системы
- •Типы прерываний и их обслуживание
- •Организация работы с каталогами и файлами
- •Установка даты и времени
- •Управление вычислительным процессом с помощью вызова внешних программ
- •Организация работы в текстовом режиме Установка текстового режима
- •Организация окон и вывод на экран
- •Управление клавиатурой и звуком
- •Форматы меню. Алгоритм построения вертикального меню
- •Контрольные вопросы
Управление клавиатурой и звуком
Клавиатура компьютера состоит из клавиш алфавитно-цифровых, функциональных и специальных. При нажатии клавиши или комбинации клавиш генерируется их код. Коды алфавитно-цифровых клавиш и ряда специальных клавиш обычно состоят из одного байта, а функциональных клавиш, их комбинаций с клавишами Ctrl, Shift, Alt, а также алфавитно-цифровые клавиши в комбинации с клавишей Alt – из двух байт. Код из двух байт называют расширенным, первый символ в нем нуль (#0), а второй ASCII-код.
Некоторые коды клавиш или коды комбинаций клавиш представлены в таблице 2.
Таблица 2.
Код клавиши или комбинации клавиш |
Клавиши |
Код клавиши или комбинации клавиш |
Клавиши |
#0#119 |
Ctrl+Home |
#0#71 |
Home |
#0#133 |
F11 |
#0#134 |
F12 |
#0#80 |
↓ |
#0#59 |
F1 |
#0#72 |
↑ |
#0#68 |
F10 |
#0#75 |
← |
#27 |
Esc |
#0#77 |
→ |
#13 |
Enter |
#0#83 |
Del |
#0#82 |
Insert |
При нажатии большинства клавиш их коды размещаются в буфере клавиатуры, содержание буфера может быть проанализировано. Для управления клавиатурой в модуле CRT представлены функции KeyPressed и ReadKey.
Функция KeyPressed:boolean; - принимает значение True (истина), если на клавиатуре была нажата какая-нибудь клавиша, в противном случае - False (ложь). Коды клавиш клавиатуры при этом сохраняются в ее специальном буфере и могут использоваться для анализа и обработки.
Функция ReadKey:Char; - читает код клавиши (один байт) из буфера клавиатуры. Этот код на экран компьютера не выводится. Если перед этой функцией выполнялась функция KeyPressed, и она приняла значение True (истина), то код клавиши читается сразу. В противном случае функция ReadKey ожидает нажатия клавиши. Для расширенных кодов клавиш данную функцию требуется выполнять дважды.
Для проверки нажатия клавиши в период выполнения цикла часто применяется функция KeyPressed в сочетании с оператором цикла с последующим условием Repeat …until.
Пример 4.
Repeat
…
until Keypressed;
Для работы со звуком в модуле CRT используются две процедуры Sound и NoSound.
Процедура Sound(Sig:word); - обеспечивает доступ к встроенному динамику компьютера и генерирует звуковой сигнал определенного частотного тона в герцах.
Таблица 3. Значения частот музыкальных звуков
Первая октава |
Вторая октава |
||||||||||||
До |
Ре |
Ми |
Фа |
Соль |
Ля |
Си |
До |
Ре |
Ми |
Фа |
Соль |
Ля |
Си |
523 |
587 |
659 |
698 |
783 |
880 |
998 |
1046 |
1175 |
1319 |
1397 |
1568 |
1760 |
1976 |
Большая октава |
Малая октава |
||||||||||||
До |
Ре |
Ми |
Фа |
Соль |
Ля |
Си |
До |
Ре |
Ми |
Фа |
Соль |
Ля |
Си |
130 |
147 |
165 |
175 |
196 |
220 |
246 |
262 |
294 |
330 |
349 |
392 |
440 |
494 |
Для завершения выдачи динамиком звукового сигнала используется процедура NoSound.
При работе со звуком часто используется процедура задержки выполнения программы на определенное число миллисекунд Delay(Msek:word);.
Пример 5. Сгенерируем последовательность звуков, представляющих гамму.
Uses CRT;
Const GAMMA : array[1..8] of integer=(262,294,330,349,392,440,494,524);
Var j:byte;
BEGIN{Проигрываем гамму}
j:=1;
Repeat
Sound(GAMMA[j]); {запускаем звук}
Delay(400); {задержка}
Nosound; {выключаем звук}
if j=8 then begin j:=1; delay(1000); end;
Inc(j)
Until KeyPressed {завершаем цикл при нажатии клавиши }
END.