Tải bản đầy đủ (.doc) (10 trang)

Lập trình nhận KeyBoard

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (74.64 KB, 10 trang )

Lập trình nhận Keyboard
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 *)
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 *)
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

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×