- •Лабораторная работа Изучение принципа работы и принципов связи с пэвм манипулятора "мышка"
- •1. Краткие сведения из истории изобретения
- •2. Механическая и оптическая мыши
- •Модели компьютерных мышей и их характеристики
- •Драйверы мыши
- •Функции прерывания 33h
- •Использование прерываний мыши в Паскале
- •Очистка мыши от пыли и грязи. Устранение элементарных неисправностей
- •Практическая работа
- •Задание 1
- •Задание
- •Задание 3
- •Задание 4
- •Задание 5
- •Задание 6
- •Задание 7
- •Задание 8 обнаружение наличия реакции "мышки" на движения
- •Задание 3
- •Задание 4 инициализация комуникационного порта
- •Задание 5
Задание
Исполнить программу, которая инициализирует мышь, делает видимым курсор мыши и "прячет" курсор после нажатия на любую клавишу:
#include <stdio.h>
#include <conio.h>
#include "sysp.h"
void main() {
int botm;
// Инициализируем мышь, определяем количество клавиш
if(!ms_init(&botm)) {
printf("\nМышь не установлена");
exit(-1);
}
printf("\nУстановлена мышь: ");
switch (botm) {
case 2:
printf("двухклавишная"); break;
case 3:
printf("трехклавишная, системы Mouse Systems");
break;
case 0:
default:
printf("неизвестной системы"); break;
}
// Включаем курсор и ожидаем нажатия на клавишу
printf("\n\nКурсор мыши включен, "
"для выключения нажмите любую клавишу");
ms_on();
getch();
// Выключаем курсор
ms_off();
printf("\nКурсор выключен, "
"для завершения нажмите любую клавишу");
getch();
Задание 3
Исполнить программу, которая запрашивает номер видеорежима, устанавливает его и динамически отображает координаты курсора и состояние клавиш мыши. После завершения работы программа восстанавливает первоначальный видеорежим:
#include <dos.h>
#include <stdio.h>
#include <conio.h>
#include "sysp.h"
union REGS reg;
void main() {
int botm, i;
MOUSE_STATE state;
unsigned old_videomode, new_videomode;
char buf[20], *bufptr;
// Определяем текущий видеорежим
reg.x.ax = 0x0f00;
int86(0x10, ®, ®);
old_videomode = reg.h.al;
// Устанавливаем новый видеорежим:
// Устанавливаем максимально допустимую длину строки
buf[0] = 10;
printf("\nВведите десятичный номер видеорежима: ");
bufptr = cgets(buf);
// Преобразуем введенное число к формату int
new_videomode = atoi(bufptr);
reg.h.ah = 0;
reg.h.al = new_videomode;
int86(0x10, ®, ®);
// Инициализируем мышь, определяем количество клавиш
if(!ms_init(&botm)) {
printf("\nМышь не установлена");
exit(-1);
}
printf("\nУстановлена мышь: ");
switch (botm) {
case 2:
printf("двухклавишная"); break;
case 3:
printf("трехклавишная, системы Mouse Systems");
break;
case 0:
default:
printf("неизвестной системы"); break;
}
printf("\n\nСостояние мыши:\n\n");
// Включаем курсор
ms_on();
while(!kbhit()) {
ms_query(&state);
printf("%2d x:%5d y:%5d",
state.bottoms,
state.x,
state.y);
for(i=0;i<18;i++) printf("\b");
}
getch();
ms_off();
reg.h.ah = 0;
reg.h.al = old_videomode;
int86(0x10, ®, ®);
}
Замечание: использование функции 03h - не самый лучший способ работы с мышью. Программа должна постоянно следить за координатами курсора или за состоянием клавиш. Это может привести к непроизводительным затратам процессорного времени на опрос состояния.