Lập trình nhận KeyBoard

10 749 2
Lập trình nhận KeyBoard

Đang tải... (xem toàn văn)

Thông tin tài liệu

Lập trình nhận KeyBoard

Lập trình nhận KeyboardTrương Xuân NamKhi các bạn viết một chươngtrình bằng Pascal trên DOS, nếu như chương trình của bạn yêu cầu phải có khảnăng?bắt? một lúc nhiều phím thì các bạn không thể dùng các hàm có sẵn nhưReadKey được mà các bạn sẽ phải viết một hàm có khả năng?bắt? nhiều phím mộtlúc. Lúc này có một phương án chấp nhận được là ta sẽ viết một lệnh thường trúcó chức năng đánh dấu xem phím nào đang được nhấn, chương trình chỉ việc kiểmtra xem phím đang được đánh dấu là phím nào là xong, đơn vị này tên là Keyboardvà có thể dịch trong các môi trường Turbo Pascal và Borland Pascal.Trong đơn vị chương trình nàycó lệnh InstallKeyboard dùng để cài lệnh thường trú chặn ngắt bàn phím lại vàđánh dấu mảng KeyPress. Còn lệnh UninstallKeyboard để gỡ lệnh thường trú chặnbàn phím ra. Để kiểm tra xem một phím có phải đang được nhấn hay không ta kiểmtra xem phần tử tương ứng của nó ở KeyPress có bằng True hay không, nếu bằngFalse tức là phím không được ấn. Các bạn có thể tham khảo cách sử dụng trongchương trình Test.Pas kèm theo, chương trình này kiểm tra trạng thái bốn phímUp, Down, Left, Right và đưa kết quả ra màn hình, chương trình chấm dứt khinhấn Esc. Tên các phím đã được định nghĩa sẵn trong unit Keyboard.Các bạn nên chú ý khi chặnngắt bàn phím các lệnh như ReadKey không thể thực thi, nếu sau khi chấm dứtchương trình không gỡ lệnh chặn ngắt bàn phím ra thì các chương trình khác cóthể không nhận được lệnh từ bàn phím.UNIT Keyboard;INTERFACEUSES Dos;CONSTInstall : Boolean =False;KeyA = $1E; (* Aa *)KeyB = $30; (* Bb *)KeyC = $2E; (* Cc *)KeyD = $20; (* Dd *)KeyE = $12; (* Ee *) KeyF = $21; (* Ff *)KeyG = $22; (* Gg *)KeyH = $23; (* Hh *)KeyI = $17; (* Ii *)KeyJ = $24; (* Jj *)KeyK = $25; (* Kk *)KeyL = $26; (* Ll *)KeyM = $32; (* Mm *)KeyN = $31; (* Nn *)KeyO = $18; (* Oo *)KeyP = $19; (* Pp *)KeyQ = $10; (* Qq *)KeyR = $13; (* Rr *)KeyS = $1F; (* Ss *)KeyT = $14; (* Tt *)KeyU = $16; (* Uu *)KeyV = $2F; (* Vv *)KeyW = $11; (* Ww *)KeyX = $2D; (* Xx *)KeyY = $15; (* Yy *)KeyZ = $2C; (* Zz *)Key1 = $02; (* 1! *)Key2 = $03; (* 2@ *) Key3 = $04; (* 3# *)Key4 = $05; (* 4$ *)Key5 = $06; (* 5% *)Key6 = $07; (* 6^ *)Key7 = $08; (* 7^ *)Key8 = $09; (* 8* *)Key9 = $0A; (* 9( *)Key0 = $0B; (* 0) *)KeyDash = $0C; (* -_*)KeyEqual = $0D; (* =+ *)KeyLBracket = $1A; (* [{ *)KeyRBracket = $1B; (* ]} *)KeySemicolon = $27; (* ;: *)KeyRQuote = $28; (* '' *)KeyLQuote = $29; (* `~ *)KeyPeriod = $33; (*.> *)KeyComma = $34; (* ,< *)KeySlash = $35; (* /? *)KeyBackSlash = $2B; (* | *)KeyF1 = $3B; (* F1 *)KeyF2 = $3C; (* F2 *)KeyF3 = $3D; (* F3 *)KeyF4 = $3E; (* F4 *) KeyF5 = $3F; (* F5 *)KeyF6 = $40; (* F6 *)KeyF7 = $41; (* F7 *)KeyF8 = $42; (* F8 *)KeyF9 = $43; (* F9 *)KeyF10 = $44; (* F10 *)KeyESC = $01; (* Esc *)KeyBackSpace = $0E; (* BS *)KeyTab = $0F; (* Tab *)KeyEnter = $1C; (* Enter *)KeyControl = $1D; (* Ctrl *)KeyLShift = $2A; (* Left Shift *)KeyRShift = $36; (* Right Shift *)KeyPrintScreen = $37; (*PrintScreen *)KeyAlt = $38; (* Alt *)KeySpace = $39; (* Space *)KeyCapsLock = $3A; (* CapLock *)KeyNumLock = $45; (* NumLock *)KeyScrollLock = $46; (*ScrollLock *)KeyHome = $47; (* Home *)KeyUp = $48; (* Up *)KeyPgUp = $49; (* PgUp *)KeyMinus = $4A; (* Minus *) KeyLeft = $4B; (* Left *)KeyCenter = $4C; (* Center *)KeyRight = $4D; (* Right *)KeyPlus = $4E; (* Plus *)KeyEnd = $4F; (* End *)KeyDown = $50; (* Down *)KeyPgDn = $51; (* PgDn *)KeyIns = $52; (* Insert *)KeyDel = $53; (* Delete *)VARKeyPress,Key : Array[0 127] of Boolean;OldInt9h : Procedure;PROCEDURE InstallKeyboard;PROCEDURE UnInstallKeyboard;IMPLEMENTATION{$F+}PROCEDURE NewInt9h; Assembler;AsmPush AXPush BXPush DSMov AX,Seg @DataMov DS,AX In AL,60hMov BX,AXAnd BX,07FhAnd AL,80hJz @PressMov Byte Ptr KeyPress[BX],FalseJmp @Done@Press:Mov Byte Ptr KeyPress[BX],True@Done:In AL,61hMov AH,ALOr AL,80hOut 61h,ALXChg AH,ALOut 61h,ALMov AL,20hOut 20h,ALPop DSPop BXPop AXIretEnd; {$F-}PROCEDURE InstallKeyboard;Var KeyCount : Byte;BeginIf Install then Exit;FillChar(KeyPress,SizeOf(KeyPress),False);GetIntVec(9,@OldInt9h);SetIntVec(9,@NewInt9h);Install:=True;End;PROCEDURE UnInstallKeyboard;BeginIf Install=False then Exit;SetIntVec(9,@OldInt9h);Mem[$40:$1C]:=Mem[$40:$1A];Install:=False;End;END.Test.PasUSES Crt,Keyboard;BEGINClrScr;InstallKeyboard; RepeatIf KeyPress[KeyUp] thenBeginGotoXY(1,1);Write('Key Up pressed ');EndElseBeginGotoXY(1,1);Write('Key Up released');End;If KeyPress[KeyDown] thenBeginGotoXY(1,2);Write('Key Down pressed ');EndElseBeginGotoXY(1,2);Write('Key Down released');End;If KeyPress[KeyLeft] thenBegin GotoXY(1,3);Write('Key Left pressed ');EndElseBeginGotoXY(1,3);Write('Key Left released');End;If KeyPress[KeyRight] thenBeginGotoXY(1,4);Write('Key Right pressed ');EndElseBeginGotoXY(1,4);Write('Key Right released');End;Until KeyPress[KeyEsc];UninstallKeyboard;END.Bạn nào có nhu cầu về các chương trình trên hãy liên hệ với tòa soạn. Trương Xuân Nam . Lập trình nhận KeyboardTrương Xuân NamKhi các bạn viết một chươngtrình bằng Pascal trên DOS, nếu như chương trình của bạn yêu cầu. đơn vị này tên là Keyboardvà có thể dịch trong các môi trường Turbo Pascal và Borland Pascal.Trong đơn vị chương trình nàycó lệnh InstallKeyboard dùng để

Ngày đăng: 10/09/2012, 15:27

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan