Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика 1 курс / метод указания / Программирование в интегрированной среде Turbo Pascal. Учебное пособие.doc
Скачиваний:
115
Добавлен:
08.06.2015
Размер:
1.51 Mб
Скачать

Скан-коды клавиатуры

Клавиша

Скан-код в 16-й СС

Клавиша

Скан-код в 16-й СС

Клавиша

Скан-код в 16-ой СС

Клавиша

Скан-код в 16-й СС

Esc

01

U

16

| \

2B

F6

40

! 1

02

I

17

Z

2C

F7

41

@ 2

03

O

18

X

2D

F8

42

# 3

04

P

19

C

2E

F9

43

$ 4

05

{ [

1A

V

2F

F10

44

% 5

06

} ]

1B

B

30

NumLock

45

^ 6

07

Enter

1C

N

31

F11

D9

& 7

08

Ctrl

1D

M

32

F12

DA

* 8

09

A

1E

< ,

33

Home

47

( 9

0A

S

1F

> .

34

48

) 0

0B

D

20

? /

35

PageUp

49

_ -

0C

F

21

правый Shift

36

серый -

4A

+ =

0D

G

22

PrintScreen

37

4B

BackSpace

0E

H

23

Alt

38

5

4C

Tab

0F

J

24

Пробел

39

4D

Q

10

K

25

CapsLock

3A

серый +

4E

W

11

L

26

F1

3B

End

4F

E

12

: ;

27

F2

3C

50

R

13

" '

28

F3

3D

PageDown

51

T

14

~ `

29

F4

3E

Insert

52

Y

15

левый Shift

2A

F5

3F

Delete

53

В расширенных кодах первый байт (служебный байт) всегда равен нулю, а второй байт (информационный байт) представляет собой скан-код (табл. 12.3).

Таблица 12.3

Информационные байты расширенных кодов клавиатуры

Клавиша, комбинация клавиш

Код

Клавиша, комбинация клавиш

Код

Клавиша, комбинация клавиш

Код

Клавиша, комбинация клавиш

Код

Alt + Q

10

F1

3B

Shift + F7

5A

Ctrl + →

74

Alt + W

11

F2

3C

Shift + F8

5B

Ctrl + End

75

Alt + E

12

F3

3D

Shift + F9

5C

Ctrl + PageUp

76

Alt + R

13

F4

3E

Shift + F10

5D

Ctrl + Home

77

Alt + T

14

F5

3F

Ctrl + F1

5E

Alt + 1

78

Alt + Y

15

F6

40

Ctrl + F2

5F

Alt + 2

79

Alt + U

16

F7

41

Ctrl + F3

60

Alt + 3

7A

Alt + I

17

F8

42

Ctrl + F4

61

Alt + 4

7B

Alt + O

18

F9

43

Ctrl + F5

62

Alt + 5

7C

Alt + P

19

F10

44

Ctrl + F6

63

Alt + 6

7D

Alt + A

1E

Home

47

Ctrl + F7

64

Alt + 7

7E

Alt + S

1F

48

Ctrl + F8

65

Alt + 8

7F

Alt + D

20

PageUp

49

Ctrl + F9

66

Alt + 9

80

Alt + F

21

4A

Ctrl + F10

67

Alt + 0

81

Alt + G

22

4D

Alt + F1

68

Alt + -

82

Alt + H

23

End

4F

Alt + F2

69

Alt + =

83

Alt + J

24

50

Alt + F3

6A

Ctrl + PageDown

84

Alt + K

25

PageDown

51

Alt + F4

6B

F11

85

Alt + L

26

Insert

52

Alt + F5

6C

F12

86

Alt + Z

2C

Delete

53

Alt + F6

6D

Shift + F11

87

Alt + X

2D

Shift + F1

54

Alt + F7

6E

Shift + F12

88

Alt + C

2E

Shift + F2

55

Alt + F8

6F

Ctrl + F11

89

Alt + V

2F

Shift + F3

56

Alt + F9

70

Ctrl + F12

8A

Alt + B

30

Shift + F4

57

Alt + F10

71

Alt + F11

8B

Alt + N

31

Shift + F5

58

Ctrl + PrtScr

72

Alt + F12

8C

Alt + M

32

Shift + F6

59

Ctrl + ←

73

Для опроса содержимого буфера в модуле CRTприменяются функцииKeyPressed иReadKey. Первая функция имеет описание следующего вида:

Function KeyPressed : Boolean;

Она возвращает True, если в буфере содержится хотя бы один символ, иFalse, если буфер пуст.

Наиболее часто функция KeyPressedиспользуется в циклах ожидания нажатия на любую клавишу, в частности в виде конструкций:

а) Repeat until KeyPressed;

б) While not Keypressed do;

В обоих случаях процессор зацикливается, выполняя пустой оператор до нажатия любой клавиши. Если буфер содержит хотя бы один код (была нажата клавиша, т.е. KeyPressed = True), то цикл завершается и управление передается следующему за ним оператору.

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

Function ReadKey : char;

Эта функция извлекает код символа из буфера и возвращает его в программу без эхо-повтора символа на экран. Буфер организован в виде очереди по принципу "первым пришел - первым ушел" и рассчитан на хранение до 15 кодов.

Если буфер пуст, то функция ReadKeyприостанавливает выполнение программы до нажатия на любую клавишу кромеShift,Ctrl,Alt,CapsLock,NumLock,ScrollLock, т.е. позволяет отслеживать нажатие более широкого множества клавиш по сравнению сRead/ReadLn.

Применение ReadKeyпозволяет очистить буфер и в результате цикл ожидания нажатия клавиши становится надежным. Например, предыдущий цикл ожидания нажатия на любую клавишу при использованииReadKeyможно записать в следующем виде:

Var ch : char;

Begin . . . . . . . . . . . .

while KeyPressed do ch := ReadKey; {очистка буфера}

repeat until KeyPressed; {ожидание нажатия}

. . . . . . . . . . . .

End.

Каждое обращение к функции ReadKeyизвлекает один содержащийся там код. Если в двухбайтовом коде главный байт совпадает сASCII,ReadKeyвозвращает в программу только этот код, а скан-код отбрасывает. Если главный байт равен нулю, то после его считывания необходимо еще раз обратиться кReadKeyдля считывания вспомогательного байта расширенного кода. Например:

while KeyPresseddoch:=ReadKey; {очистка буфера}

ch:=ReadKey; {ожидание ввода и считывание

кода при нажатии клавиши}

ifch=# 0then begin ch:=ReadKey; {прием расширенного

кода}

. . . . . . . . . . . .

end;

Далее chанализируется обычно с помощью условного оператораifили оператораcase of.

Соседние файлы в папке метод указания