Сканирлаш коди, бегили тугмачалар, бошкарув тугмачалари, кенгайтирилган код, ReadKey, KeyPressed, суриш тугмачалари,
Стандарт клавиатураларда уч типдаги тугмачалар мавжуд:
белгили (харфлар, сонлар);
бошкарув (функционал тугмачалар, курсорни суриш, кушиш, йукотиш ва бокалар);
суриш Ctrl, Alt, NumLock, CapsLock ва бошкалар.
Бирор -бир тугмача босилганда клавиатура микропроцессори шахсий компьютерлар стандартига мос кодни танлайди ва бу код Turbo Pascal системасида сканерлаш кодига айлантирилади. Сканерлаш кодини анализ килиш мумкин ва у клавиатурани бошкариш алгоритмининг асоси хисобланади.
Белгили тугмачалар босилганда биттагина кийматни кайтаради ва бу киймат оддий код деб айтилади.
Бошкариш клаишалари босилганда иккита кийматни кайтаради , улардан биринчиси 0 (мана шу бокариш клавишвсининг хусусиятига киради), икинчиси эса- тугмача босилгандаги катталик. Махсус тугмачаларнинг кайтариш кодларини кенгайтирилган деб кабул килинади. Клавиатурани бошкариш CRT модулининг махсус ReadKey ва KeyPressed функциялари ёрдамида бажарилади..
ReadKey функцияси белгиларни клавиатурадан укиб, Char типидаги кийматларни кайтаради.
KeyPressed. функцияси бирон тугмача босилганда True ни, акс холда False ни кайтаради.
Белгили ва бошкариш клавишларини сканерлаш кодларини куйидаги мисолда куриб чикамиз.
PROGRAM DemoScanCode;
USES Crt;
CONST
Null = #0;
Esc = #27;
F1 = #59;
F10 = #68;
InsKey = #82;
VAR
ExtendKey: boolean;
Ch: char;
FUNCTION GetKey: char;
{ функция клавиш босилишини кутиб туради }
VAR
Ch: char;
BEGIN
ExtendKey:= False;
Ch:= ReadKey;
IF Ch = Null THEN BEGIN
ExtendKey:= True;
Ch:= ReadKey
END;
GetKey:= Ch
END; { GetKey }
BEGIN { DemoScanCode }
ClrScr;
REPEAT
Ch := GetKey;
IF NOT ExtendKey THEN
Writeln('Кодли белги тугмачаси босилган ', byte(Ch))
ELSE
CASE Ch OF
F1..F10 : Writeln(' Функционал клавиш босилган');
InsKey : Writeln(' босилган')
ELSE Writeln('Кенгайтирилган код #00+', byte(Ch));
END; { case }
UNTIL (Ch <> Esc);
END. { DemoScanCode }
Энди силжиш тугмачасини кандай ишлашини куриб чикамиз. Мисол тарикасида ЦИФ (NumLock) клавишини куриб чикамиз.
Агар байтларни 0 дан 7 гача битлар йигиндиси деб каралса, NumLock га $0000:$0417 абсалют адресли байтнинг 5- бити тугри келади. NumLock клавишининг ишлаш дастури куйидагича:
PROGRAM DemoNumLock;
USES Crt;
CONST
Esc = #27;
VAR
Ch : char;
ShiftByte: byte absolute $0000:$0417;
BEGIN
REPEAT
IF KeyPressed THEN
Ch:= ReadKey;
IF ShiftByte AND $20 <> 0 THEN
Write(' NumLock тугмачаси босилган');
UNTIL Ch <> Esc;
END. { DemoNumLock }
Do'stlaringiz bilan baham: |