1. Trang chủ
  2. » Công Nghệ Thông Tin

Lập trình nhận KeyBoard

10 750 2
Tài liệu đã được kiểm tra trùng lặp

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Lập trình nhận keyboard
Tác giả Trương Xuân Nam
Trường học University of Information Technology
Chuyên ngành Computer Science
Thể loại bài báo
Năm xuất bản 2023
Thành phố Hồ Chí Minh
Định dạng
Số trang 10
Dung lượng 45 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Lập trình nhận KeyBoard

Trang 1

Trương Xuân Nam

Khi 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;

INTERFACE

USES Dos;

CONST

Install : Boolean =False;

KeyA = $1E; (* Aa *)

KeyB = $30; (* Bb *)

KeyC = $2E; (* Cc *)

KeyD = $20; (* Dd *)

KeyE = $12; (* Ee *)

Trang 2

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@ *)

Trang 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 *)

Trang 4

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 *)

Trang 5

KeyCenter = $4C; (* Center *)

KeyRight = $4D; (* Right *)

KeyPlus = $4E; (* Plus *)

KeyEnd = $4F; (* End *)

KeyDown = $50; (* Down *)

KeyPgDn = $51; (* PgDn *)

KeyIns = $52; (* Insert *)

KeyDel = $53; (* Delete *)

VAR

KeyPress,Key : Array[0 127] of Boolean; OldInt9h : Procedure;

PROCEDURE InstallKeyboard;

PROCEDURE UnInstallKeyboard; IMPLEMENTATION

{$F+}

PROCEDURE NewInt9h; Assembler; Asm

Push AX

Push BX

Push DS

Mov AX,Seg @Data

Mov DS,AX

Trang 6

In AL,60h

Mov BX,AX

And BX,07Fh

And AL,80h

Jz @Press

Mov Byte Ptr KeyPress[BX],False Jmp @Done

@Press:

Mov Byte Ptr KeyPress[BX],True

@Done:

In AL,61h

Mov AH,AL

Or AL,80h

Out 61h,AL

XChg AH,AL

Out 61h,AL

Mov AL,20h

Out 20h,AL

Pop DS

Pop BX

Pop AX

Iret

End;

Trang 7

PROCEDURE InstallKeyboard;

Var KeyCount : Byte;

Begin

If Install then Exit;

FillChar(KeyPress,SizeOf(KeyPress),False); GetIntVec(9,@OldInt9h);

SetIntVec(9,@NewInt9h);

Install:=True;

End;

PROCEDURE UnInstallKeyboard;

Begin

If Install=False then Exit;

SetIntVec(9,@OldInt9h);

Mem[$40:$1C]:=Mem[$40:$1A];

Install:=False;

End;

END

Test.Pas

USES Crt,Keyboard;

BEGIN

ClrScr;

InstallKeyboard;

Trang 8

If KeyPress[KeyUp] then Begin

GotoXY(1,1);

Write('Key Up pressed '); End

Else

Begin

GotoXY(1,1);

Write('Key Up released'); End;

If KeyPress[KeyDown] then Begin

GotoXY(1,2);

Write('Key Down pressed '); End

Else

Begin

GotoXY(1,2);

Write('Key Down released'); End;

If KeyPress[KeyLeft] then Begin

Trang 9

Write('Key Left pressed ');

End

Else

Begin

GotoXY(1,3);

Write('Key Left released');

End;

If KeyPress[KeyRight] then

Begin

GotoXY(1,4);

Write('Key Right pressed ');

End

Else

Begin

GotoXY(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

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

TỪ KHÓA LIÊN QUAN

w