Файл: Исследование видеосистемы (текстовый режим).docx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 23.11.2023

Просмотров: 107

Скачиваний: 9

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

МИНОБРНАУКИ РОССИИ

Санкт-Петербургский государственный

электротехнический университет

«ЛЭТИ» им. В.И. Ульянова (Ленина)

Кафедра вычислительной техники


отчет

по лабораторной работе №2

по дисциплине «Организация ЭВМ и систем»

Тема: Исследование видеосистемы (текстовый режим)



Студент гр. 9374




Коломийцев Н.А.

Преподаватель




Лебедев С.В.



Санкт-Петербург

2020

Цель работы

Изучение работы с видеосистемой в текстовом режиме, освоение приемов использования цветовой палитры: измене­ние цвета символов и фона на всем экране и в отдельном окне.

Формулировка задания

1. Написать программу, чтобы в окно с координатами (10, 12, 70, 23) с шагами Т (0,3 секунд) и S (1 строки) выводилась надпись при всех возможных комбинациях цвета фона и цвета символов. Для каждой комбинации цветов в окне должны выводиться номера или символьные обозначения цветов фона и символов.

Теоретическая информация

Интегральной характеристикой особенностей работы адаптера является совокупность поддерживаемых им режимов. Поведение адаптера в том или ином режиме является фактическим стандартом и полностью характеризует все особенности адаптера, доступные для программиста средства управления адаптером и т.п.

При всем многообразии режимов работы видеоадаптеров их можно объединить в две группы: текстовые и графические. Переключение из текстового режима в графический и наоборот означает полное изменение логики работы видеоадаптера с видеобуфером.

Если видеоадаптер включен в текстовый режим, он рассматривает экран как совокупность так называемых текселов. Каждому текселу в текстовом режиме соответствуют два байта памяти видеобуфера. Байт по четному адресу хранит ASCII-код символа, а следующий за ним байт по нечетному адресу кодирует особенности отображения символа на экране. Этот байт называется байтом атрибута.

Переключение адаптера в один из графических режимов полностью изменяет логику работы аппаратуры видеосистемы. При работе в графическом режиме появляется возможность управлять цветом любой телевизионной точки экрана или пиксела. Число строк пикселов и число пикселов в каждой строке зависит от режима работы видеоадаптера. Таким образом, экран в графическом режиме представляет собой матрицу пикселов.


Функции консольного ввода-вывода С++ помещены в файле , предназначены для облегчения работы по созданию простейшего оконного интерфейса.

Установку параметров активного текстового окна выполняет функция

window (int, int, int, int); Она описывает активное текстовое окно: первая пара аргументов задает соответственно номера столбца и строки левого верхнего угла, вторая пара - правого нижнего угла. Строки и столбцы нумеруются, начиная от 1.

Фрейм окна С++ имеет следующую структуру:

struct text_info

{unsigned char

winright, winbottom; /* столбец, строка правого нижнего угла */

attribute, normattr; /* атрибуты окна*/

currmode; /* текущий режим работы видеоадаптера */

screenheight; /* полная высота экрана */

screenwidth; /* полная ширина экрана */

сurх, сurу; }; /* строка, столбец текущей позиции курсора */

Информация об активном окне доступна при выполнении функции

gettextinfo (struct text_info *t); При вызове эта функция заполняет поля структурной переменной описанной по шаблону text_info, указатель t на которую она получает.

Функция clrscr() очищает все текстовое окно. Цвет "заливки" окна при очистке будет соответствовать значению, установленному символической переменной attribute в описании окна (структурная переменная по шаблону text_info). Функции управления цветом фона и символа описаны далее.

Функция cputs( char *str) выводит строку символов в текстовое окно, начиная с текущей позиции курсора. На начало выводимой ASCII-строки указывает указатель str. Является аналогом функции стандартной библиотеки puts (), но выполняет вывод в пределах заданного окна и при выводе не добавляет специальный символ '\n'. Реакция cputs() на специальный символ '\n' аналогична реакции cprintf(). Функция возвращает ASCII-код последнего выведенного на экран символа. В отличие от puts() в функции отсутствует возврат символа EOF. Другими словами, вывод происходит на экран в любом случае.

Функция textcolor(int newcolor) задает цвет символов, не затрагивая установленный цвет фона. Цвет может быть или числом, или формироваться из символических констант, значения которых определяет перечислимый тип COLORS.

Функция textbackground(int newcolor) задает цвет фона символов, не затрагивая установленный цвет символа. Цвет может быть или числом, или формироваться из символических констант, значения которых определяет перечислимый тип COLORS. Для цвета фона выбор ограничен значениями цветов 0-7. Если для цвета фона выбирается значение 8 - 15, то символы будут мерцать, так как бит мерцания установится в единицу, но цвет фона будет соответствовать значениям 0-7.
Результаты работы программы

После запуска программа создает окно необходимого размера и начинает цвет текста и цвет заднего фона. Также она выводит название цвета заднего фона и номер цвета текста (рисунок 1).


Рисунок 1 — Результат работы программы






















Блок-схема алгоритма




















Изм.

Лист


№ докум.

Подп.
Дата




Разраб.

Коломийцев Н.А.










Лит.

Лист

Листов

Пров.

Лебедев С.В.










у




1

1

Реценз.

Лебедев С.В.











Н. контр.

Лебедев С.В.







Утв.

Лебедев С.В.








Структурная схема аппаратных средств


Исходный код программы

#include

#include

#include

#include
void Color(int i){

switch (i)

{

case BLACK: cputs("BLACK");

break;

case BLUE: cputs("BLUE");

break;

case GREEN: cputs("GREEN");

break;

case CYAN: cputs("CYAN");

break;

case RED: cputs("RED");

break;

case MAGENTA: cputs("MAGENTA");

break;

case BROWN: cputs("BROWN");

break;

case LIGHTGRAY: cputs("LIGHTGRAY");

break;

case DARKGRAY: cputs("DARKGRAY");

break;

case LIGHTBLUE: cputs("LIGHTBLUE");

break;

case LIGHTGREEN: cputs("LIGHTGREEN");

break;

case LIGHTCYAN: cputs("LIGHTCYAN");

break;

case LIGHTRED: cputs("LIGHTRED");

break;

case LIGHTMAGENTA: cputs("LIGHTMAGENTA");

break;

case YELLOW: cputs("YELLOW");

break;

case WHITE: cputs("WHITE");

break;

default:

break;

}

}
void scroll()

{

for (int i=0; i<=1; i++)

insline();

}
int main()

{

textbackground(BLACK);

textcolor(WHITE);

clrscr();

window(10, 12, 70, 23);

gotoxy(1, 1);

for (int i = 0; i <= 7; i++)

{

textbackground(i);

for (int j = 0; j <= 15; j++)

{

textcolor(j);

cputs(" back:");

Color(i);

cputs(" text:");

Color(j);

cputs("\n\r");

delay(300);

scroll();

}

}

getche();

return 0;

}