Автор работы: Пользователь скрыл имя, 26 Января 2012 в 22:53, лабораторная работа
Цель работы: изучить работу клавиатуры, с помощью программы определить ckan-коды для тех или иных клавиш.
Лабораторная
работа №1
Тема: Изучение работы с клавиатурой
Цель работы: изучить работу клавиатуры, с помощью программы определить ckan-коды для тех или иных клавиш.
1.1 Устройство клавиатуры
Рисунок 1.1 – Устройство клавиатуры
1 - клавиша
2 – резиновый буфер
3 - изолятор
4 - мембраны
5 - контакты
1.2 Принцип работы
При нажатии на клавишу (комбинацию клавиш), микросхема, встроенная в клавиатуру выдает ckan-код. Сkan-код поступает в микросхему выполняющую функцию порта клавиатуры (Порты – специально аппаратные логические устройства отвечающие за связь процессора с другими устройствами). Порт клавиатуры выдает процессору прерывание с фиксированным номером 09h. Получив прерывание процессор откладывает текущую работу. По номеру прерывания обращается в специальную область оперативной памяти, где находится вектор прерывания. Вектор прерывания – список адресных данных с фиксированной длиной записи (адрес программы по которой будет обслуживаться программа). Определив адрес начала прерывания, программный процессор переходит к началу ее выполнения. Простейшая программа обработки клавиатуры зашита в ПЗУ, но программисты могут поставить свою программу. Программа обработчик прерывания направляет процессор к порту клавиатуры, где он находит ckan-код, загружает в свои регистры, под управлением обработчика определяет какой код, символа, соответствует данному ckan-коду. Обработчик прерывания отправляет полученный код символа в небольшую область памяти – буфер клавиатуры, прекращает работу, известив об этом процессор. Процессор прекращает обработку прерываний возвращается к отложенной задаче. Введенный символ хранится в буфере клавиатуры до тех пор пока его не заберет та программа, для которой он предназначался. Если символ поступает в буфер чаще чем забирается, оттуда извещается эффект переполнения буфера.
1.3 Определение ckan-кода на Pascal
Program 1;
Uses crt;
Var s:char;
BEGIN
clrscr;
While True do
begin
write('Нажатая клавиша ');
S := readkey;
If s <> #0 then
begin {Osnovnoi nabor}
case s of
#8: writeln ('BackSpace');
#9: writeln ('Tab');
#13: writeln ('Enter');
#27: writeln ('Escape')
else
writeln (' Вы ввели символ ',s,'с кодом',Ord(s));
end;
if s = #27 then Exit
end
else
begin {Rashirenniy nabor}
s:=readkey;
writeln (' Вы нажали кнопку с кодом' ,Ord(s));
end;
end;
END.
1.4 Протокол работы
Рисунок 1.2 – Протокол работы