Принцип действия клавиатуры

5.4.2. Принцип действия клавиатуры

 

После рассмотрения кодирования символов в ПЭВМ и клавиатур становится очевидным следующее:

1) каждому расширенному коду ASCII не может быть поставлена в соответствие определенная клавиша на клавиатуре, так как количество клавиш намного меньше;

2) не каждая комбинация клавиш может быть представлена в расширенном коде ASCII в связи с тем, что этих комбинаций может быть достаточно много (существенно больше 256).

Более того, многим одиночным клавишам, не входящим в группу клавиш пишущей машинки, в большинстве случаев не ставится в соответствие какой-либо расширенный код ASCII. Тем не менее эти клавиши и комбинации клавиш полезно задействовать в создаваемых программных продуктах, чтобы облегчить работу пользователя за клавиатурой путем уменьшения объема вводимой информации. Ведь различным комбинациям клавиш можно поставить в соответствие множество различных вариантов действий DOS, программы и ПЭВМ.

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

Вначале остановимся на клавиатуре ПЭВМ IBM PC XT, а затем разберем особенности функционирования клавиатур компьютера IBM PC AT.

Каждой клавише на клавиатуре XT соответствует семиразрядный код сканирования, или опроса клавиши (scan-код). Перечень этих кодов приведен в табл. 5.10. Буква М в ней предваряет наименования клавиш на малой цифровой клавиатуре, если это не следует из контекста. Под­черкнем, что приведенные коды не совпадают с ASCII-кодами.

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

Таблица 5.10

Коды сканирования клавиш клавиатуры IBM PC XT

 

Клавиша

Код сканирования

Клавиша

Код сканирования

16 -й

10 - й

16 -й

10 - й

Esc

1 !

2

3 #

4 S

5 %

6 ^

7 &

8 *

9  (

0  )

- _

= +

BS

Tab

Q

W

E

R

T

Y

U

I

O

P

[ {

] }

Enter

Ctrl

A

S

D

F

G

H

J

K

L

; ;

‘ “

` ~

Shift (левая)

01

02

03

04

05

06

07

08

09

0A

0B

0C

0D

0E

0F

10

11

12

13

14

15

16

17

18

19

1A

1B

1C

1D

1E

1F

20

21

22

23

24

25

26

27

28

29

2A

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

\  |

Z

X

C

V

B

N

M

, <

. >

/ ?

Shift (правая)

* PrtSc

 Alt

Space

Caps Lock

F1

F2

F3

F4

F5

F6

F7

F8

F9

F10

Num Lock

Scroll Lock

Home 7

         8

PgUp  9

(M)-

       4

(M)5

       6

(M)+

End     1

         2

PgDn  3

Ins      0

Del     .                

2B

2C

2D

2E

2F

30

31

32

33

34

35

36

37

38

39

3A

3B

3C

3D

3E

3F

40

41

42

43

44

45

46

47

48

49

4A

4B

4C

4D

4E

4F

50

51

52

53

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

 

(т.е. он больше кода сканирования на 128, или 80Н). Если клавиша остается нажатой дольше, чем 0,5 с, то автоматически начинают генерироваться ее коды нажатия с частотой 10 раз в секунду, что имитирует серию быстрых нажатий на эту клавишу. Такой принцип очень удобен при необходимости многократного ввода одного и того же символа. Автоматическая регенерация кода нажатия прекращается при отпускании клавиши или нажатии другой клавиши. Поэтому в случае, когда клавиша «залипла», для устранения нежелательных последствий этого достаточно нажать любую другую клавишу. Код нажатия/отпускания выдается в порт 60Н.

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

Драйвер клавиатуры различает следующие типы клавиш:

1) клавиши-переключатели;

2) кодовые клавиши.

Клавиши-переключатели служат для изменения состояния клавиатуры (переключения реги­стров). На каждом регистре нажатие кодовых клавиш интерпретируется по-разному. К клави­шам-переключателям (на клавиатуре IBM PC XT) относятся клавиши Ins, Caps Lock, Num Lock, Scroll Lock, Alt, Ctrl, левая и правая клавиши Shift, а также комбинация клавиш Ctrl-Num Lock. Для хранения статуса (состояния) клавиш-переключателей в области данных BIOS, находящейся в ОЗУ, зарезервировано два байта.

Если драйвер клавиатуры получил код нажатия (отпускания) клавиш-переключателя, то соответствующий бит статуса устанавливается в единицу (нуль). В результате появляется воз­можность распознать одновременное нажатие клавиш-переключателя и какой-либо другой кла­виши. Дополнительно к этому за каждой логически фиксирующейся клавишей-переключателем (Ins, Caps Lock и Num Lock) закреплен еще один бит в статусе, содержимое которого определяет состояние соответствующего режима (вставки, ввода прописных букв и фиксации цифр). При включении режима указанный бит устанавливается драйвером клавиатуры в единицу, а при выключении — сбрасывается.

Нажатие комбинации клавиш Ctrl-Num Lock обрабатывается несколько иначе, однако конечный результат будет совпадать с описанным в предыдущем абзаце.

Кодовые клавиши (к которым относятся все остальные клавиши) служат для непосредственного ввода символов в ПЭВМ, т.е. при нажатии любой из них в ОЗУ компьютера передается соответствующий ей код, который может использоваться выполняемыми программами.

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

Бели была нажата клавиша на клавиатуре пишущей машинки и клавиатура находится только на нижнем или верхнем регистре, а также если была нажата клавиша на малой цифровой клавиатуре (только в режиме фиксации цифр), то первым (младшим) байтом двухбайтового кода символа будет расширенный код ASCII соответствующего символа, а вторым (старшим) — код сканирования соответствующей клавиши. Код сканирования не является принципиально необ­ходимым, однако он все же фиксируется для того, чтобы в программе можно было определить, какая же все-таки из одноименных клавиш нажата (например, клавиша + на малой цифровой клавиатуре или на клавиатуре пишущей машинки).

Допустим, что клавиатура находится на нижнем регистре и нажата клавиша А. При этом драйвер клавиатуры считывает код нажатия 1ЕН (так как код сканирования клавиши А равен 1ЕН), а выдает двухбайтовый код 1Е61Н (в связи с тем, что расширенный код ASCII буквы «а» равен 61Н).

Нажатие некоторых служебных клавиш, не являющихся переключателями, также приводит к формированию двухбайтового кода описанной структуры. Это клавиши Esc, BS, Tab и Enter. Они определяют расширенные коды ASCII 27, 8, 9 и 13 соответственно. Символы с этими кодами являются управляющими в ASCII и обозначаются соответственно ESC, BS, НТ (TAB) и CR (см. табл. 5.2).

В противном случае, т.е. когда нажатой клавише или комбинации клавиш не соответствует никакой расширенный код ASCII (с учетом состояния клавиатуры — регистра), будет сформирован двухбайтовый код, называемый расширенным кодом клавиши. Расширенный код клавиши в первом (младшем) байте содержит нулевой код (ASCII-код символа NUL), а во втором (стар­шем) — двоичное число, однозначно определяющее нажатую клавишу (или комбинацию клавиш). Последнее число часто совпадает с кодом сканирования клавиши. К клавишам, после обработки нажатий которых выдается расширенный код клавиши, относятся функциональные клавиши, клавиши малой цифровой клавиатуры в режиме управления курсором, а также комбинации различных клавиш с Alt, Shift и Ctrl (однако многие комбинации с Ctrl используются для ввода управляющих символов кода ASCII, а с Shift — символов пишущей машинки на верхнем регистре). Кодировка клавиш и их комбинаций в расширенных кодах клавиш сведена в табл. 5.11, где представлены только вторые байты кодов.

Отметим следующее:

— клавиша-переключатель Scroll Lock драйвером клавиатуры пока не используется. Чтобы применить ее для ввода новых расширенных кодов клавиш, необходимо заменить обработчик прерывания 09Н или программно анализировать соответствующий бит байтов статуса и осуще­ствлять дополнительное перекодирование;

— клавиша Del не соответствует управляющему символу DEL из ASCII;

— клавиша Ins на самом деле выполняет роль не только клавиши-переключателя, но и роль кодовой клавиши (при обработке ее нажатия драйвер выдает расширенный код клавиши);

— расширенные коды клавиш жестко привязаны к конкретным клавишам, а не к их обоз­начениям;

— комбинации Alt-цифра и Alt--обозначают клавиши на основной (но не на малой) клавиатуре;

— состояние логически фиксирующих клавиш Caps Lock, Num Lock и Scroll Lock на генерацию расширенных кодов клавиш не влияет,

— состояние логически фиксирующей клавиши Num Lock влияет только на интерпретацию нажатий одиночных клавиш на малой цифровой клавиатуре (генерируются либо расширенные коды ASCII, либо расширенные коды клавиш).

Например, двухбайтовый код 1Е00Н представляет комбинацию клавиш Alt-A (1ЕН — код сканирования клавиши А).

Наличие нулевого кода в младшем байте двухбайтового кода символа позволяет программным способом отличать расширенный код ASCII от расширенного кода клавиши.

Считывание драйвером клавиатуры кода отпускания кодовой клавиши ни к каким действиям не приводит.

Двухуровневая кодировка символов при вводе с клавиатуры (в кодах сканирования и двух­байтовых кодах) обеспечивает возможность перепрограммирования клавиш.

Таблица  5.11

Расширенные  коды клавиш  клавиатуры IBM PC XT

 

Клавиши

Код

Клавиши

Код

16-й

16-А

16-й

18-й

Fl

F2

F3

F4

F5

F6

F7

F8

Г9

F10

ЗВ

3C

3D

ЗЕ

3F

40

41

42

43

44

59

60

61

62

63

64

65

66

67

68

Alt-A

Alt-B

Ait-C

Ait-D

Alt-E

Alt-F

Alt-G

Alt-H

AIt-I

Alt-J

Alt K

Alt-L

Ait-M

Ait-N

Alt-0

Alt-P

Alt-Q

Alt-R

Alt-S

Ait-T

Alt-U

Alt-U

Alt-U

Alt-X

Alt-Y

Ait-Z

1E

30

2E

20

1Z

21

22

23

17

24

25

26

32

31

18

19

10

13

1F

14

16

2F

11

2D

15

2C

30

48

46

32

18

33

34

35

23

36

37

38

50

49

24

25

16

19

31

20

22

47

17

45

21

44

Shift-Fl

Shift-F2

Shift-F3

Shift-F4

Shift-F5

Shift-F6

SMft-F7

Shift-F8

Shift-F9

Shift-F16

54

55

56

57

58

59

5D

84

85

86

87

88

89

98

91

92

93

Ctrl-Fl

Ctrl-F2

Ctrl-F3

Ctrl-F4

Ctrl-F5

 

Ctrl-F6

Ctrl-F7

Ctrl-F8

Ctrl-ГЭ

Ctrl-F16

5F

68

61

62

63

64

65

66

67

94

95

%

97

98

99

108

101

102

103

Alt-0

Alt-1

Alt-2

Alt-3

Alt-4

Alt-5

Alt-6

Alt-7

Alt-8

Alt-9

Alt--

Alt-=

81

78

79

7A

7B

7C

7D

7E

7F

80

82

83

129

120

121

122

123

124

125

126

127

128

130

131

Alt-Fl

Alt-F2

Alt-F3

Alt-F4

Alt-F5

Alt-F6

Alt-F7

 

Alt-F8

Alt-FS

Alt-FlO

68

69

6D

6F

70

71

104

105

106

107

108

109

110

111

112

113

Ctrl-G

Shift-Tab

Ins

Del

Ctrl-PrtSc

03

0F

52

53

72

3

15

82

83

114

End

Hone

PgDn

PgUp

50

4D

4E

4F

47

51

49

80

75

77

72

79

71

81

73

Ctrl-←

Ctrl-→

Ctrl-End

Ctrl-Home

Ctrl-PgDn

Ctrl-PgUp

73

74

75

77

76

84

115

116

117

119

118

132

 

Сформированный двухбайтовый код символа помещается драйвером клавиатуры в буфер клавиатуры, расположенный в области данных BIOS в ОЗУ. На этом обработка нажатия клавиши завершается, и МП продолжает выполнять отложенную работу. Буфер рассчитан на хранение 15 двухбайтовых кодов клавиш и логически организован в виде циклического списка-очереди. Двухбайтовый код только что нажатой клавиши (комбинации клавиш) размещается в конце списка, если он не пуст. Асинхронно по запросу из программы на ввод символа (конечно, по прерыванию) осуществляется выдача из буфера первого двухбайтового кода списка с одновре­менным удалением этого кода из буфера. Если на момент запроса буфер пуст, то программа переходит в состояние ожидания реального ввода символа с клавиатуры. Наличие буфера и описанная техника организации ввода позволяют нажимать клавиши на клавиатуре с упреждением (заранее), что несколько ускоряет работу на ПЭВМ. В случае, когда буфер в результате этого оказывается заполненным, нажатие следующей клавиши сопровождается звуковым сигналом, а двухбайтовый код отвергается (его просто некуда помещать).

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

DOS содержит и высокоуровневые средства для считывания из буфера целой строки. Но все они обращаются к обработчику прерывания 16Н.

Любая функция DOS, осуществляющая ввод (а реально — считывание из буфера) одного символа, возвращает либо расширенный код ASCII, либо нулевой код. В последнем случае необходимо повторить программный запрос для выдачи другого (старшего) байта расширенного кода клавиши. Программисты на языке Ассемблера могут в первом случае получить и код сканирования клавиши.

Языки программирования для ПЭВМ зачастую также располагают аналогичными низкоуров­невыми средствами.

Заметим, что один лишь ввод каких-либо (управляющих) символов еще не обеспечивает автоматического выполнения ПЭВМ определенных действий. Последние нужно программировать, либо они уже запрограммированы в DOS или другой выполняемой в данный момент программе. Исключение составляют следующие специальные комбинации клавиш, при нажатии которых никакой код в буфер клавиатуры не записывается, но выполняются предопределенные действия после их распознавания обработчиком прерывания 09Н:

Ctrl-Alt-Del     рестарт ОС;

Ctrl-Break        — принудительное завершение выполнения программы;

Ctrl-Num Lock — приостановка выполнения программы до нажатия какой-либо клавиши на клавиатуре, за исключением клавиши Num Lock;

Shift-PrtSc        — печать экрана.

Все эти функции реализуются путем выдачи драйвером клавиатуры соответствующих преры­ваний.

Коды нажатия и отпускания клавиш на 84-клавишной клавиатуре ПЭВМ IBM PC AT совпадают, но последние предваряются однобайтовым кодом FOH.

В остальном принципы работы 84-клавишной клавиатуры и ввода символов аналогичны описанным выше. Единственное отличие связано с наличием клавиши Sys Req, код сканирования которой равен 84 (54Н). Клавиша Sys Req уникальна по своей функции. При Обнаружении ее нажатия или отпускания драйвер клавиатуры генерирует прерывание 15Н, обработчику которого через регистр АХ МП передается информация о том, что прерывание инициировано от клавиши Sys Req, а также о том, нажата эта клавиша или отпущена. Обработчик прерывания 15Н пока не выполняет никаких действий, а просто осуществляет возврат. Клавишу Sys Req можно задействовать в программе, подменив вектор прерывания 15Н. Нажатие или отпускание этой клавиши не приводит к записи какого-либо кода в буфер клавиатуры.

101 -клавишная клавиатура обладает большей гибкостью, допуская, в частности, программи­рование интервала времени, в течение которого необходимо удерживать клавишу до начала периодической регенерации ее кода нажатия, а также частоты регенерации. Принципы работы этой клавиатуры существенно отличаются от рассмотренных. Так, 101-клавишная клавиатура имеет три различных варианта соответствия кодов сканирования клавишам. Требуемый вариант выбирается путем выдачи соответствующей информации в порт 64Н. Если вариант явно не задавался, то действует вариант с номером 2. Этот вариант сильно отличается от кодов скани­рования 84-клавишной клавиатуры. Но аппаратные средства клавиатуры транслируют коды сканирования в такие, которые совместимы с кодами сканирования 84-клавишной клавиатуры, прежде чем они становятся доступными выполняемым программам.

Благодаря этому все коды сканирования 84-клавишной клавиатуры совпадают с кодами сканирования соответствующих клавиш 101-клавишной клавиатуры. Дополнительные коды ска­нирования для новых клавиш приведены в табл. 5.12. Отметим, что 101-клавишная клавиатура генерирует не только коды сканирования одиночных клавиш, но и некоторых комбинаций клавиш, а также не только одиночные коды, но и их последовательности. Подчеркнем, что все указанные в таблице клавиши при наличии альтернативы уникальны именно для этой клавиатуры. Например, Ins означает не клавишу на малой цифровой клавиатуре, а дополнительную клавишу вне малой цифровой клавиатуры (см. рис. 5.11). Единственное расхождение по кодам сканирования между 84- и 101-клавишными клавиатурами состоит в интерпретации клавиши PrtSc. Оно связано с тем, что на рассматриваемой клавиатуре эта клавиша не предназначена для ввода символа *, а совмещена с клавишей Sys Req. Код сканирования клавиши * на малой цифровой клавиатуре 101-клавишной клавиатуры совпадает с кодом сканирования клавиши PrtSc на 84-клавишной клавиатуре. Если у Вас 101-клавишная клавиатура, то для печати содержимого экрана достаточно нажать единственную клавишу PrtSc. В тех случаях, когда дополнительная клавиша на 101-кла­вишной клавиатуре имеет то же наименование, что и заимствованная из 84-клавишной клавиатуры, второй байт кода сканирования совпадает со старым кодом.

В байтах статуса клавиатуры отведено дополнительно по одному биту для левых клавиш Ctrl и Alt, а уже задействованные биты взводятся как при нажатии левых, так и при нажатии правых клавиш Ctrl и Alt. Таким образом, например, если бит для Ctrl установлен в единицу, а бит для левой Ctrl сброшен, то, значит, нажата правая Ctrl. Такой, на первый взгляд странный, подход тем не менее позволяет обеспечить совместимость с 84-клавишной клавиатурой и распознать.

Таблица 5.12

Дополнительные коды сканирования клавиш 101-клавиатуры IBM PC AT

 

 

Клавиши

Код сканирования

 

 

16-й

10-й

F11

57

 

 

 

87

 

F12

58

 

 

 

88

 

Alt (правая)

Е0

38

 

 

224

56

Ctrl (правая)

Е0

1D

 

 

224

29

PrtSc

Е0

Ев

37

224

42 224 55

Shift-PrtSc (Sys Req)

Е0

37

 

 

224

55

Ctrl-FrtSc (Sys Req)

Е0

37

 

 

224

55

Alt-PrtSc

54

 

 

 

84

 

Pause

Е1

1D

45

E1 9D С5

225

29 69 225 157 197

Ctrl-Pause (Break)

Е0

46

Ев

С6

224

76 224 198

Ins

Е0

52

 

 

224

82

Shift-Ins

Е0

АА

Ев

52

224

176 224 82

Del

Е0

53

 

 

224

83

Shift-Del

Е0

АА

Ев

53

224

176 224 83

Е0

 

 

224

75

Shift-←

Е0

АА

Ев

224

176 224 75

Номе

Е0

47

 

 

224

71

Shift-Номе

Е0

АА

Ев

47

224

176 224 71

End

Е0

4F

 

 

224

79

Shift-End

Е0

АА

Ев

4F

224

176 224 79

Е0

48

 

 

224

72

Shift-↑

Е0

АА

Ев

48

224

176 224 72

Е0

 

 

224

86

Shift-↓

Е0

АА

Ев

56

224

176 224 86

PgUp

Е0

49

 

 

224

73

Shift-PgUp

Е0

АА

Ев

49

224

176 224 73

PgDn

Е0

51

 

 

224

81

Shift-PgDn

Е0

АА

Ев

51

224

176 224 81

Е0

4D

 

 

224

77

Shift-→

Е0

АА

Ев

4D

224

176 224 77

(H)Enter

Е0

 

 

224

28

(M)/

Е0

35

 

 

224

53

Shift-(M)/

Е0

АА

Ев

35

224

176 224 53

 

нажатие левой (правой) клавиши Ctrl (Alt). Еще один бит в статусе зарезервирован для клавиши Sys Req, вследствие чего она может использоваться в качестве переключателя, но такая возмож­ность стандартно не реализована. Дополнительно к комбинации клавиш Ctrl-Num Lock соответ­ствующий бит статуса переключает и клавиша Pause, в связи с чем она действует так же, вызывая паузу в обработке.

Драйвер 101-клавишной клавиатуры обеспечивает выдачу дополнительных расширенных кодов клавиш, вторые байты которых сведены в табл. 5.13. Отметим, что дополнения связаны не только с наличием новых клавиш, но и с задействованием других комбинаций уже имеющихся клавиш. Как и раньше, для устранения неоднозначности клавиши малой цифровой клавиатуры помечены буквой М в скобках. Но здесь явно выделены все такие клавиши, так как они на клавиатуре продублированы. Если признак (М) не указан, то клавиша находится вне малой цифровой клавиатуры. Как и в случае кодов сканирования, от этого зависит значение расширенного кода клавиши..

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

Обобщим все рассмотренные в данном пункте сведения, необходимые пользователю при работе на клавиатуре, а также программисту, не интересующемуся вводом символов из порта, в табл. 5.14. Такая необходимость вызвана тем, что эта информация была разрозненной, а просто запомнить ее невозможно. В таблице имеются и дополнительные сведения, касающиеся комби­наций с клавишей Ctrl, обеспечивающих ввод управляющих символов ASCII.

Табл. 5.14 позволяет определить, какой код вводится при нажатии клавиши или допустимой комбинации клавиш на клавиатуре. Возможно и диаметрально противоположное ее использование: определение того, как ввести требуемый код. Коды комбинаций клавиш делятся на две группы:

расширенные коды ASCII, которые представлены их обозначениями;

расширенные коды клавиш, которые обозначены через n;m, где n -первый, а m — второй байт в десятичной системе счисления.

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

Таблица применима к любой из рассмотренных клавиатур. Пометка (—) указывает на то, что данная запись (клавиша или код) соответствует только 83- и/или 84-клавишным клавиатурам;

Таблица 5.12

Дополнительные коды сканирования клавиш  101-клавиатуры 1ВМ РС АТ

 

Клавиши

Код

Клавиши

Код

16-й

10-й

16-й

10-й

F11

F12

85

86

133

134

Alt-↑

Alt-↓

Alt-←

Alt-→

98

A0

9B

9D

152

160

155

157

Shift-F11

Shift-F12

87

88

135

136

Ctrl-F11

Ctrl-F12

89

8A

137

138

Alt-Del

Alt-End

Alt-Home

Alt-Ins

Alt-PgUp

Alt-PgDn

A3

9F

97

A2

99

A1

163

159

151

162

153

161

Alt-F11

Alt-F12

8B

8C

139

140

Alt-[

Alt-]

Alt-;

Alt-¸

Alt-´

Alt-\

Alt-,

Alt-.

Alt-/

1A

1B

27

28

29

2B

33

34

35

26

27

39

40

41

43

51

52

53

Alt-(M)∕

Alt-(M)*

Alt-(M)-

Alt-(M)+

Alt-(M)Enter

A4

37

4A

4E

A6

164

55

74

78

166

Alt-BS

Alt-Enter

Alt-Esc

Alt-Tab

Ctrl-Tab

0E

1C

01

A5

94

14

28

1

165

148

Ctrl-(M)∕

Ctrl-(M)*

Ctrl-(M)-

Ctrl-(M)+

Ctrl-(M)↑

Ctrl-(M)5

Ctrl-(M)↓

Ctrl-(M)Ins

Ctrl-(M)Del

95

96

8E

90

8D

8F

91

92

93

149

150

142

144

141

143

145

146

147

 

пометка же ( + ) выделяет записи, относящиеся только к 101-клавишной клавиатуре. Записи, ничем не помеченные, относятся к любой клавиатуре.

В первом столбце перечислены клавиши всех клавиатур. Содержимое таблицы соответствует выключенным режимам Caps Lock и Num Lock. Это ни в коей мере не ограничивает ее значимость, так как фиксация данных клавиш имитируется удержанием клавиши Shift в нажатом состоянии (имеются в виду только буквенные клавиши и клавиши малой цифровой клавиатуры; интерпретация нажатия других клавиш от состояния режимов Caps Lock и Num Lock не зависит). Второй столбец таблицы определяет коды клавиш на основном регистре, т.е. коды одиночных клавиш. Остальные столбцы задают коды комбинаций клавиш с Shift, Ctrl и Alt.

На некоторых клавиатурах имеется клавиша Null, обеспечивающая ввод расширенного кода клавиши 0;3.

В зависимости от производимого эффекта при нажатии клавиши и их комбинации можно подразделить на следующие группы:

1) клавиши и их комбинации, обеспечивающие ввод символов расширенного кода ASCII;

2) клавиши и их комбинации, при нажатии которых вводятся расширенные коды клавиш;

3) специальные комбинации клавиш, при нажатии которых ПЭВМ выполняет предопреде­ленные действия;

4) клавиши-переключатели, нажатие которых не приводит к вводу какого-либо кода, но обеспечивает изменение статуса клавиатуры;

5) комбинации клавиш, не приводящие к какому-либо эффекту;

6) комбинации клавиш, сводимые к другим комбинациям на основании приоритетов клавиш-переключателей.

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

Детальный анализ табл. 5.14 показывает следующее:

1) с клавиатуры можно ввести практически все символы ASCII (но не расширенного), за исключением символа NUL, что достигается путем нажатия одиночной клавиши или комбинации клавиши Ctrl с одной из кодовых клавиш;

2) имеется 5 символов ASCII, которые можно ввести двумя способами:

BS — нажатием клавиши BS или комбинации Ctrl-H;

НТ (TAB) — нажатием клавиши Tab или комбинации Ctrl-I;

CR — нажатием клавиши Enter или комбинации Ctrl-M;

ESC — нажатием клавиши Esc или комбинации Ctrl- {;

LF — нажатием комбинаций Ctrl-Enter или Ctrl-J.

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

1) использовать в программе специальное представление этого символа последовательностью других символов;

2) использовать для ввода NUL какую-нибудь комбинацию клавиш, генерирующую расширен­ный код клавиши, или множество таких комбинаций.

В последнем случае программа должна после считывания первого (нулевого) байта расши­ренного кода клавиши (т.е. символа NUL) дополнительно ввести второй байт и проанализировать его. По результатам анализа можно отбросить второй байт, и тогда останется код символа NUL. Обычно для этого используется комбинация Ctrl-@.

Оба эти способа имеют следующие недостатки: исключается возможность использования зарезервированных для представления символа NUL символов (комбинаций клавиш) по своему прямому назначению; необходимо осуществлять определенный анализ в программе.

Представлять же символ NUL в программе в качестве константы, как правило, труда не составляет.

Смысл использования клавиши Ctrl для ввода управляющих символов ASCII, а также техника ввода символов, образующих расширение ASCII, будут описаны в следующем пункте.

Таблица 5.14

Коды клавиш

 

Клавиши

Основной регистр

Shift-

Ctrl-

Alt-

Пишущей машинки:

1 !

2 @

3 #

4 $

5 %

6 ^

7 &

8 *

9 (

0 )

- _

= +

Q

W

E

R

T

Y

U

I

O

P

[ {

] }

A

S

D

F

G

H

J

K

L

;  :

 

`  ~

\  ¦

             Z

X

C

V

B

N

M

,  <

.  >

  ?

Space

 

 

1

2

3

4

5

6

7

8

9

0

-

=

q

w

e

r

t

y

u

i

o

p

[

]

a

s

d

f

g

h

j

k

l

;

`

\

z

x

c

v

b

n

m

,

.

/

SP

 

 

!

@

#

$

%

^

&

*

(

)

-

+

Q

W

E

R

T

Y

U

I

O

P

{

}

A

S

D

F

G

H

J

K

L

:

~

¦

Z

X

C

V

B

N

M

< 

> 

?

SP

 

 

н_д

    0:3

н_д

н_д

н_д

   RS

н_д

н_д

н_д

н_д

   US

н_д

      DC1

      ETB

        EMQ

       DC2

       DC4

     EM

        NAK

HT (TAB)

   SI

       DLE

      ESC

     GS

        SOH

       DC3

       EOT

       ACK

      BEL

    BS

    LF

     VT

     FF

н_д

н_д

н_д

   FS

       SUB

        CAN

       ETX

       SYN

       STX

    S0

     CR

н_д

н_д

н_д

SP

 

 

0;120

0;121

0;122

0;123

0;124

0;125

0;126

0;127

0;128

0;129

0;130

0;131

0;16

0;17

0;18

0;19

0;20

0;21

0;22

0;23

0;24

0;25

(+)0;26

(+)0;27

0;30

0;31

0;32

0;33

0;34

0;35

0;36

0;37

0;38

(+)0;39

(+)0;40

(+)0;41

(+)0;43

0;44

0;45

0;46

0;47

0;48

0;49

0;50

(+)0;51

(+)0;52

(+)0;53

SP

Служебные:

Esc

BS

Tab

Enter

Ctrl

Shift

(-)*  PrtSc

(+)PrtSc

 

 

Alt

Caps Lock

Num Lock

Scroll Lock

(+)Pause

 

 

ESC

BS

HT  (TAB)

CR

н_д

н_д

(-)*

(+)спец

 

 

н_д

н_д

н_д

н_д

(+)спец

 

ESC

BS

0;15

CR

н_д

н_д

спец

спец

(как без

Shift)

н_д

н_д

н_д

н_д

(+)спец

(как без

Shift)

 

ESC

DEL

(+)0;148

LF

н_д

н_д

0;144

0;144

 

 

н_д

н_д

спец

(-)спец

(+)спец

 

(+)0;1

(+)0;14

(+)0;165

(+)0;28

н_д

н_д

н_д

н_д

 

 

н_д

н_д

н_д

н_д

(+)спец

(как без

Alt)

Функциональные:

F1

F2

F3

F4

F5

F6

F7

F8

F9

F10

(+)F11

(+)F12

 

0;59

0;60

0;61

0;62

0;63

0;64

0;65

0:66

0;67

0;68

(+)0;133

(+)0;134

 

0;84

0;85

0;86

0;87

0;88

0;89

0;90

0;91

0;92

0;93

(+)0;135

(+)0;136

 

0;94

0;95

0;96

0;97

0;98

0;99

0;100

0;101

0;102

0;103

(+)0;137

(+)0;138

 

0;104

0;105

0;106

0;107

0;108

0;109

0;110

0;111

0;112

0;113

(+)0;139

(+)0;140

Малой цифровой

клавиатуры:

Home  7

     8

PgUp  9

-

   4

5

   6

+

End   1

   2

PgDn  3

Ins  0

Del    .

Sys Req

(+)*

(+)/

(+)Enter

 

 

0;71

0;72

0;73

-

0;75

н_д

0;77

+

0;79

0;80

0;81

0;82

0;83

н_д

(+)*

(+)/

(+)CR

 

 

7

8

9

-

4

5

6

+

1

2

3

0

.

н_д

(+)*

(+)/

(+)CR

 

 

     0;119

(+)0;141

     0;132

(+)0;142

     0;115

(+)0;143

     0;116

(+)0;144

     0;117

(+)0;145

     0;118

(+)0;146

(+)0;147

н_д

(+)0;150

(+)0;149

(+)LF

 

 

н_д

н_д

н_д

(+)0;74

н_д

н_д

н_д

(+)0;78

н_д

н_д

н_д

н_д

спец

н_д

(+)0;55

(+)0;164

(+)0;28

Управления курсором:

(+)Ins

(+)Del

(+)Home

(+)End

(+)PgUp

(+)PgDn

(+)↑

(+)←

(+)→

(+)↓

 

(+)0;82

(+)0;83

(+)0;71

(+)0;79

(+)0;73

(+)0;81

(+)0;72

(+)0;75

(+)0;77

(+)0;80

 

(+)0;82

(+)0;83

(+)0;71

(+)0;79

(+)0;73

(+)0;81

(+)0;72

(+)0;75

(+)0;77

(+)0;80

 

(+)0;146

(+)0;147

(+)0;119

(+)0;117

(+)0;132

(+)0;118

(+)0;141

(+)0;115

(+)0;116

(+)0;145

 

(+)0;162

(+)0;163

(+)0;151

(+)0;159

(+)0;153

(+)0;161

(+)0;152

(+)0;155

(+)0;157

(+)0;160