Òåïåðü âñå âìåñòå: Äåìîíñòðàöèîííàÿ ïðîãðàììà ðàáîòû ñ êëàâèàòóðîé
Êàê òåïåðü íàñ÷åò òîãî, ÷òîáû ñîáðàòü âñå íàïèñàííîå ïðî êëàâèàòóðó â îäíó êó÷ó?  Ëèñòèíãå 3.7 ïðåäñòàâëåíà äåìîíñòðàöèîííàÿ ïðîãðàììà, êîòîðàÿ ñîñòîèò èç âûçîâîâ óæå íàïèñàííûõ â ýòîé ãëàâå ôóíêöèé. Îíà ïîêàçûâàåò ñêàí-êîäû íàæàòûõ êëàâèø è ñîñòîÿíèå êëàâèø Ctrl è Alt. Åñëè âû íàæìåòå Q, ïðîãðàììà çàâåðøèò ñâîþ ðàáîòó.
Ëèñòèíã 3.7. Äåìîíñòðàöèîííàÿ ïðîãðàììà ðàáîòû ñ êëàâèàòóðîé (KEY.C).
// ÂÊËÞ×ÀÅÌÛÅ ÔÀÉËÛ ///////////////////////////////////////
#include <dos.h>
#include <bios.h>
#include <stdio.h>
#include <math.h>
#include <conio.h>
#include <graph.h>
// ÎÏÐÅÄÅËÅÍÈß ///////////////////////////////////////////////
// áèòîâûå ìàñêè äëÿ óïðàâëÿþùèõ êëàâèø
#define SHIFT_R 0õ0001
#define SHIFT_L 0õ0002
#define CTRL 0õ0004
#define ALT 0õ0008
#define SCROLL_LOCK_ON 0õ0010
#define NUM_LOCK_ON 0õ0020
#define CAPS_LOCK_ON 0õ0040
#define INSERT_MODE 0õ0080
#define CTRL_L 0õ0100
#define ALT_L 0õ0200
#define CTRL_R 0õ0400
#define ALT_R 0õ0800
#define SCROLL_LOCK_DWN 0õ1000
#define NUM_LOCK_DWN 0õ2000
#define CAPS_LOCK_DWN 0õ4000
#define SYS_REQ_DWN 0õ8000
// Çíà÷åíèÿ ñêàí-êîäîâ. Âíèìàíèå: êàæäàÿ êëàâèøà ïðîäóöèðóåò òîëüêî
// îäèí ñêàí-êîä, ïîýòîìó îïðåäåëåíèÿ äàíû òîëüêî äëÿ ñèìâîëîâ
// íèæíåãî ðåãèñòðà. Íàïðèìåð, îäíà è òà æå êëàâèøà ñîîòâåòñòâóåò
// ñèìâîëó "1" (íèæíèé ðåãèñòð) è ñèìâîëó "!" (âåðõíèé ðåãèñòð).
// Îäíàêî ïîëüçîâàòüñÿ íàäî âñå ðàâíî îïðåäåëåíèåì SCAN_1
#define SCAN_ESC 1
#define SCAN_1 2
#define SCAN_2 3
#define SCAN_3 4
#define SCAN_4 5
#define SCAN_5 6
#define SCAN_6 7
#define SCAN_7 8
#define SCAN_8 9
#define SCAN_9 10
#define SCAN_0 11
#define SCAN_MINUS 12
#define SCAN_EQUALS 13
#define SCAN_BKSPàààààààà 14
#define SCAN_TABààààààààà 15
#define SCAN_Qààààààààààà 16
#define SCAN_Wààààààààààà 17
#define SCAN_Eààààààààààà 18
#define SCAN_Rààààààààààà 19
#define SCAN_Tààààààààààà 20
#define SCAN_Yàààààààà 21
#define SCAN_Uàààààààà 22
#define SCAN_Iàààààààà 23
#define SCAN_0àààààààà 24
#define SCAN_Pàààààààà 25
# define SCAN_LFT_BRACKET 26
#define SCAN_RGT_BRACKET 27
#define SCAN_ENTERàààà 28
#define SCAN_CTRLààààà 29
#define SCAN_Aàààààààà 30
#define SCAN_Sàààààààà 31
#define SCAN_Dàààààààà 32
#define SCAN_Fàààààààà 33
#define SCAN_Gàààààààà 34
#define SCAN_Hàààààààà 35
#define SCAN_Jàààààààà 36
#define SCAN_Kàààààààà 37
#defane SCAN_Làààààààà 38
#define SCAN_SEMIààààà 39
#define SCAN_APOSààààà 40
#define SCANJTILDEàààà 41
#define SCAN_LEFT_SHIFT 42
#define SCAN_BACK_SLASH 43
#define SCAN_Zàààààààà 44
#define SCAN_Xàààààààà 45
#define SCAN_Càààààààà 46
#define SCAN_Vàààààààà 47
#define SCAN_Bàààààààà 48
#define SCAN_Nàààààààà 49
#define SCAN_Màààààààà 50
#define SCAN_COMMAàààà 51
#define SCAN_PERIODààà 52
#define SCAN_FOWARD_SLASH 53
#define SCAN_RIGHT_SHIFT 54
#define SCAN_PRT_SCRNà 55
#define SCAN_ALTàààààà 56
#define SCAN_SPACEàààà 57
#define SCAN_CAPS_LOCK 58
#define SCAN_F1ààààààà 59
#define SCAN_F2ààààààà 60
#define SCAN_F3ààààààà 61
#define SCAN_F4ààààààà 62
#define SCAN_F5ààààààà 63
#define SCAN_F6ààààààà 64
#define SCAN_F7ààààààà 65
#define SCAN_F8ààààààà 66
#define SCAN_F9ààààààà 67
#define SCAN_F10àààààà 68
#define SCAN_Fllàààààà 133
#define SCAN_Fl2àààààà 134
#define SCAN_NUM_LOCKà 69
#define SCAN_SCROLL_LOCKà 70
#define SCAN_HOMEàààààààà 71
#define SCAN_UPàààààààààà 72
#define SCAN_PGUPàààààààà 73
#define SCAN_NUM_MINUSààà 74
#define SCAN_LEFTàààààààà 75
#define SCAN_CENTERàààààà 76
#define SCAN_RIGHTààààààà 77
#define SCAN_NUM_PLUSàààà 78
#define SCAN_ENDààààààààà 79
#define SCAN_DOWNàààààààà 80
#define SCAN_PGDWNààààààà 81
#define SCAN_INSààààààààà 82
#define SCAN_DELààààààààà 83
// LL=¦ãLL /////////////////////////////////////////////
unsigned char Get_Ascii_Key(void)
{
// +¸ûø ò ñº¯õ¨õ úûðòø𪺨v õ¸ª¹ ¸øüòþû, ¯ºýú¡ø òþ÷ò¨ð•ðõª õóþ
// ASCII-úþô. +¸ûø ¸øüòþûð ýõª, òþ÷ò¨ð•ðõª¸ 0.
if (_bios_keybrd(_KEYBRD_READY)) return(_bios_keybrd(_KEYBRD_READ)) ;
else return(0);
} // úþýõ¡ ¯ºýú¡øø
////////////////////////////////////////////////////////
unsigned int Get_Control_Keys(unsigned int mask)
(ààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààà
// ¯ºýú¡ø òþ÷ò¨ð•ðõª ¸þ¸ªþ ýøõ û¦ñþù ºÿ¨ðòû ¦•õù úûðòø°ø
return(mask & _bios_keybrd(_KEYBRD_SHIFTSTATUS));
}//úþýõ¡ ¯ºýú¡øø ////////////////////////////////////////////////////////
unsigned char Get_Scan_Code(void) (
// ¯ºýú¡ø òþ÷ò¨ð•ðõª ¸úðý-úþô ýðöðªþù úûðòø°ø // ø¸ÿþû¹÷ºõª¸ ò¸ª¨þõýývù ð¸¸õüñûõ¨
_asm{
mov ah,01hààà ;¯ºýú¡ø 01h - ÿ¨þòõ¨úð ýðöðªø úûðòø°ø
int 16hàààààà ;òv÷þò ÿ¨õ¨vòðýø
jz emptyààààà ;ýõª ¸øüòþûð - òv¿þôààààààààà
mov ah,00hààà ;¯ºýú¡ø 0 - ÿþûº¢õýøõ ¸úðý-úþôð
int 16hàààààà ;òv÷þò ÿ¨õ¨vòðýø
mov al,ahàààà ;ÿõ¨õüõ•ðõü ¨õ÷ºû¹ªðª ø÷ L= ò AL
xor ah,ahàààà ;þñýºû õü L=
jmp doneààààà ;¨õ÷ºû¹ªðª òþ÷ò¨ð•ðõª¸ ò L-
empty:
xor ax,axààà ;þñýºû õü AX
done:
} //úþýõ¡ ð¸¸õüñûõ¨ýþóþ ñûþúð
} // úþýõ¡ ¯ºýú¡øø
// +T=+T=L- ¦¦++¦L¦¦L ///////////////////////////////////////
void main(void)
{
unsigned char key;
int done=0;
unsigned int control;
_clearscreen(_GCLEARSCREEN);
while(!done)
{
_settextposition(2,0);
if ( (key = Get_Scan_Code()) ) printf("%c %dà ",key,key);
// ÿ¨þòõ¨úð ýð ýðöðªøõ Ctrl ø Alt
if (Get_Control_Keys(CTRL))
printf("\ncontrol key pressed");
if (Get_Cbntrol_Keys(ALT))
printf("\nalt key pressedààà ");
if (key==16) done=1); // 16 × ¤ªþ ¸úðý-úþô úûðòø°ø Q
}// úþýõ¡ ¡øúûð while
} // úþýõ¡ ¯ºýú¡øø main