Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МЫШЬ_1.doc
Скачиваний:
22
Добавлен:
24.08.2019
Размер:
501.76 Кб
Скачать

Задание 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, &reg, &reg);

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, &reg, &reg);

// Инициализируем мышь

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, &reg, &reg);

}

Задание 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, может возникнуть подозрение, что скорость и состав кадра (формата) у передатчика и приемника разные. Необходимо зафиксировать наличие неисправностей, если они есть.