![]() Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
![]() Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
![]() |
Листинг 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 // ФУНКЦИИ ///////////////////////////////////////////// unsigned char Get_Ascii_Key(void) { // Если в буфере клавиатуры есть символ, функция возвращает его // 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) ( // функция возвращает скан-код нажатой клавиши // используется встроенный ассемблер _asm{ mov ah,01h;функция 01h - проверка нажатия клавиши int 16h;вызов прерывания jz empty;нет символа - выход mov ah,00h;функция 0 - получение скан-кода int 16h;вызов прерывания mov al,ah;перемещаем результат из АН в AL xor ah,ah;обнуляем АН jmp done;результат возвращается в АХ empty: xor ax,ax;обнуляем AX done: } //конец ассемблерного блока } // конец функции // ОСНОВНАЯ ПРОГРАММА /////////////////////////////////////// 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 Мышь Изобретение мыши, безусловно, было событием в компьютерной истории. Появившись в результате исследований в центре Xerox PARK в Калифорнии, она завоевала сердца миллионов пользователей. Мышь позволила наглядно работать с экраном и легко общаться с интересующими объектами. Обычно мышь подсоединяется к последовательному порту компьютера или DIN коннектору на лаптопе. Существующая bus mice требует специальной платы, поэтому не получила широкого распространения (это понятно — мало кто хочет просто так вскрывать свой компьютер для установки одной платы). На сегодняшний день существуют как механические, так и оптические мыши. В обоих случаях перемещение мыши кодируется в последовательность импульсов, которая преобразуется в пакет, содержащий информацию о движении мыши и состоянии кнопок. Этот пакет посылается в серийный порт, к которому подсоединяется мышь, а затем интерпретируется программой. Вообще-то, написание драйвера мыши — не самое скучное занятие, но мы этого делать не будем. К счастью, Microsoft и другие фирмы написали кучу подобных драйверов. Поэтому мы не станем самостоятельно декодировать мышиные пакеты, а воспользуемся более удобным программным интерфейсом. Мы будем использовать только минимум функций для определения позиции мыши и статуса кнопок. В таблице 3.3 перечислены эти функции. Замечание Микки (mickey) — это самое маленькое расстояние, которое отслеживается мышью. Оно примерно равно 1/200 дюйма. Таблица 3.3. Функции драйвера мыши. Date: 2015-09-18; view: 453; Нарушение авторских прав |