- •Лабораторная работа Изучение принципа работы и принципов связи с пэвм манипулятора "мышка"
- •1. Краткие сведения из истории изобретения
- •2. Механическая и оптическая мыши
- •Модели компьютерных мышей и их характеристики
- •Драйверы мыши
- •Функции прерывания 33h
- •Использование прерываний мыши в Паскале
- •Очистка мыши от пыли и грязи. Устранение элементарных неисправностей
- •Практическая работа
- •Задание 1
- •Задание
- •Задание 3
- •Задание 4
- •Задание 5
- •Задание 6
- •Задание 7
- •Задание 8 обнаружение наличия реакции "мышки" на движения
- •Задание 3
- •Задание 4 инициализация комуникационного порта
- •Задание 5
Задание 6
Исполнить программу, которая ограничивает диапазон перемещений курсора мыши по экрану:
#include <stdio.h>
#include <conio.h>
#include "sysp.h"
void main() {
int botm;
// Инициализируем мышь
if(!ms_init(&botm)) {
printf("\nМышь не установлена");
exit(-1);
}
// Включаем курсор и ожидаем нажатия на клавишу
printf("\n\nКурсор мыши включен, для выключения"
" нажмите любую клавишу");
ms_on();
// Задаем границы, в которых должен перемещаться курсор
ms_rangx(20, 100);
ms_rangy(50, 100);
getch();
// Выключаем курсор
ms_off();
}
Задание 7
Исполнить программу, изменяющую форму курсора в графическом режиме:
#include <dos.h>
#include <stdio.h>
#include <conio.h>
#include "sysp.h"
union REGS reg;
char form[64] = {
// Массив маски по "И"
255,255, 255,255, 255,255, 255,255, 255,255,
255,255, 255,255, 255,255,
255,255, 255,255, 255,255, 255,255, 255,255,
255,255, 255,255, 255,255,
// Массив маски по "Исключающее ИЛИ"
127,254, 127,254, 127,254, 127,254, 127,254,
127,254, 127,254, 0,0,
0,0, 127,254, 127,254, 127,254, 127,254, 127,254,
127,254, 127,254,
};
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);
}
// Задаем новую форму для курсора мыши
ms_gform(0,0, &form[0]);
// Включаем курсор
ms_on();
getch();
ms_off();
reg.h.ah = 0;
reg.h.al = old_videomode;
int86(0x10, ®, ®);
}
Задание 8 обнаружение наличия реакции "мышки" на движения
Наличие реакции манипулятора на движения можно обнаружить с помощью программы, в которой периодически проводится чтение данных из РЕГИСТРА ДАННЫХ комуникационного порта (например, COM1 имеет базовый адрес 3F8H, а COM2 - 2F8H) и вывод чисел на экран.
Написать программу проверяющую наличие реакции мышки на движения.
Результаты следует вывести на экран.
Задание 3
ЧТЕНИЕ ДАННЫХ, ПОСЫЛАЕМЫМИ МАНИПУЛЯТОРОМ, С УСЛОВИЕМ ГОТОВНОСТИ ПРИЕМНИКА КОМУНИКАЦИОННОГО ПОРТА
Готовность байта данных в приемнике можно определить по содержанию РЕГИСТРА СОСТОЯНИЯ ЛИНИИ (3FDh) коммуникационного порта. Назначение отдельных битов байта состояния линии дано в таблице 2.
№ бита |
Назначение |
0 |
"1" - готовность данных в приемнике. После чтения байта из регистра данных приемника бит получит значение "0" |
1 |
"1" - переполнение. Предыдущий байт потерян. |
2 |
"1" - ошибка паритета. Он получит значение "0" после чтения байта состояния линии |
3 |
"1" - ошибка кадра. Нечеткий стоп - бит, нарушение синхронизации |
4 |
"1" - получен длинный ряд единиц. Это означает, что абонент посылает запрос конца передачи |
5 |
"1" - регистр передатчика свободный, можно посылать в регистр данные для передачи |
6 |
"1" - передатчик не занят передачей |
7 |
"0"- всегда, если контроллер комуникационного порта связан с ЭВМ |
Анализ готовности данных приемника - это анализ наличия значения "1" в бите с номером 0 байта состояния линии.
Написать программу, которая в цикле выполняет следующие операции:
НАЧАТЬ бесконечный ЦИКЛ,
чтение байта состояния линии из порта с адресом 3FD,
анализ нулевого бита прочитанного байта и ВЫХОД из цикла при наличии "1" ,
чтение данных из РЕГИСТРА ДАННЫХ коммуникационного порта (COM1 имеет базовый адрес 3F8H, а COM2 - 2F8H) и вывод чисел на экран.
При выполнении программа должна находится в состоянии ожидания готовности до начала перемещения мыши. Признаком завершения работы программы является знак "Оk".
Определить количество чисел, которое посылает "мышка" в каждом сообщении и зарегистрируйте состав сообщений при нажатии и отпускании клавиши 1 (расположена слева). Если в составе сообщений не 5, а 6 или больше чисел и числа превышают 80h, может возникнуть подозрение, что скорость и состав кадра (формата) у передатчика и приемника разные. Необходимо зафиксировать наличие неисправностей, если они есть.