Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

2392_Смирнова_ЛР2_ЭВМ

.docx
Скачиваний:
0
Добавлен:
05.12.2024
Размер:
206.38 Кб
Скачать

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

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

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

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

Кафедра ВТ

отчет

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

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

Тема: ИССЛЕДОВАНИЕ ВИДЕОСИСТЕМЫ (ТЕКСТОВЫЙ РЕЖИМ)

Студент гр. 2392

Смирнова М. В.

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

Ельчанинов М. Н.

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

2023

Цель работы.

Изучение основ работы с видеосистемой ПЭВМ в текстовом режиме с использованием языка программирования C++ и среды разработки Turbo C++.

Задание на лабораторную работу.

1. Изменить программу, полученную на предыдущей работе таким образом, чтобы в окно с координатами (20,5,60,15) с шагами 0.5 (секунд) и 3 (строк) выводилась надпись при всех возможных комбинациях цвета фона и цвета символов. Для каждой комбинации цветов в окне должны выводиться номера или символьные обозначения цветов фона и символов

2. Организовать в окне вывод разноцветных сообщений со скроллингом окна.

Краткие сведения о видеосистемах ПЭВМ, текстовом режиме их работы и функциях обслуживания текстового режима.

Видеосистема ПЭВМ состоит из следующих основных компонентов:

  • Видеоконтроллер - это микросхема, которая управляет передачей данных из видеопамяти на монитор. Видеоконтроллер генерирует сигналы синхронизации, цветности и яркости, а также определяет режим работы видеосистемы (текстовый или графический).

  • Видеопамять - это область памяти, в которой хранятся данные, отображаемые на экране. В текстовом режиме каждый символ занимает два байта: один байт для кода символа, а другой байт для атрибутов (цвета фона и текста, мерцания и т.д.).

  • Монитор - это устройство вывода информации, которое преобразует электрические сигналы, поступающие от видеоконтроллера, в изображение на экране. Монитор может быть электронно-лучевой трубкой (ЭЛТ) или жидкокристаллическим дисплеем (ЖКД).

Текстовый режим работы видеосистемы характеризуется следующими параметрами:

  • Разрешение – это количество символов, которые могут быть отображены на экране. Обычно разрешение равно 80x25, то есть 80 столбцов и 25 строк.

  • Частота обновления - это количество раз, которое изображение на экране обновляется в секунду. Частота обновления влияет на качество изображения и усталость глаз. Обычно частота обновления равна 60 Гц или выше.

  • Цветность - это количество цветов, которые могут быть использованы для отображения символов и фона. В текстовом режиме доступно 16 цветов, каждый из которых имеет свой номер и символьное обозначение.

Для работы с видеосистемой ПЭВМ в текстовом режиме существует ряд функций, которые можно вызывать из программы на C++. Некоторые из этих функций являются стандартными и входят в заголовочный файл stdio.h, например printf, scanf, getchar, putchar и т.д. Однако, для более гибкого управления видеосистемой необходимо использовать специальные функции, которые являются частью Turbo C++. Например, функции clrscr, gotoxy, textattr, scroll, cprintf и т.д. Эти функции позволяют очищать экран, перемещать курсор, задавать цвет текста и фона, прокручивать окно и выводить символы на экран. Описание и примеры использования этих функций можно найти в справочнике по Turbo C++.

Алгоритмы и тексты отлаженных программ

Ниже приведены алгоритмы и тексты отлаженных программ, выполненных в рамках лабораторной работы. Программы написаны на языке программирования C++ и скомпилированы в среде разработки Turbo C++ 3.1.

Программа начинается с подключения нескольких заголовочных файлов, которые содержат определения функций и структур данных. Затем определяется объединение supertype, содержащее два поля: unsigned long long и double.

Функция main запрашивает у пользователя ввод числа, очищает экран и устанавливает окно вывода. Затем она в цикле от 0 до 126 меняет цвет текста, выводит двоичное представление введенного числа, затем производит прокрутку экрана и задержку. После цикла выводится сообщение "The end of the program" и программа завершается.

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

Весь алгоритм прокомментирован в тексте программы.

Текст программы

#include "conio.h" //подключение заголовочного файла conio.h, который содержит функции для работы с консолью.

#include "iostream.h" //подключение заголовочного файла iostream.h, который содержит определения стандартных потоков ввода-вывода.

#include "stdio.h" // подключение заголовочного файла stdio.h, который содержит определения стандартных функций ввода-вывода.

#include "stdlib.h" // подключение заголовочного файла stdlib.h, который содержит определения стандартных функций общего назначения.

#include "dos.h" // подключение заголовочного файла dos.h, который содержит определения функций для работы с операционной системой.

#include "graphics.h" // подключение заголовочного файла graphics.h, который содержит определения функций для работы с графикой.

#include "time.h" //подключение заголовочного файла time.h, который содержит определения функций для работы со временем.

//объявление объединения supertype, которое содержит два поля: unsigned long long llong и double dub.

union supertype

{

unsigned long long llong;

double dub;

};

// определение функции print, которая выводит двоичное представление вещественного числа input.

void print(double input) {

double dataDouble;

dataDouble = input;

if (dataDouble >= 0) cprintf("0");

else { dataDouble = -dataDouble; cprintf("1"); }

int step;

for (step = 0; dataDouble > 2; step++)

{

dataDouble = dataDouble / 2;

}

step = step + 1023;

char stepp[10];

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

{

if (step % 2 == 1) stepp[10 - i] = '1';

else stepp[10 - i] = '0';

step = step / 2;

}

for (int c = 0; c < 11; c++) {

cprintf("%c", stepp[c]);

}

if (dataDouble < 1) cprintf("0");

else { dataDouble--; cprintf("1"); }

for (int z = 0; z < 51; z++)

{

dataDouble *= 2;

if (dataDouble < 1) cprintf("0");

else { dataDouble--; cprintf("1"); }

}

cprintf("\n\r");

}

//определение функции scroll, которая отвечает за прокрутку экрана.

void scroll(int direction, int lines, char l_row, char l_col, char r_row, char r_col, char attr)

{

union REGS r;

if (direction)

{

r.h.al = lines;

r.h.ah = direction;

}

else

{

r.h.al = lines;

r.h.ah = 6;

}

r.h.ch = l_row;

r.h.cl = l_col;

r.h.dh = r_row;

r.h.dl = r_col;

r.h.bh = attr;

int86(0x10, &r, &r);

}

// определение функции GetPrintColor, которая получает цвет текста.

void GetPrintColor(unsigned char colors)

{

unsigned char bg = colors >> 4;

unsigned char text = colors & 15;

switch (bg)

{

case 0:

cprintf("0 ");

break;

case 1:

cprintf("1 ");

break;

case 2:

cprintf("2 ");

break;

case 3:

cprintf("3 ");

break;

case 4:

cprintf("4 ");

break;

case 5:

cprintf("5 ");

break;

case 6:

cprintf("6 ");

break;

case 7:

cprintf("7 ");

break;

case 8:

cprintf("8 ");

break;

case 9:

cprintf("9 ");

break;

case 10:

cprintf("10 ");

break;

case 11:

cprintf("11 ");

break;

case 12:

cprintf("12 ");

break;

case 13:

cprintf("13 ");

break;

case 14:

cprintf("14 ");

break;

case 15:

cprintf("15 ");

break;

}

switch (text)

{

case 0:

cprintf("0 ");

break;

case 1:

cprintf("1 ");

break;

case 2:

cprintf("2 ");

break;

case 3:

cprintf("3 ");

break;

case 4:

cprintf("4 ");

break;

case 5:

cprintf("5 ");

break;

case 6:

cprintf("6 ");

break;

case 7:

cprintf("7 ");

break;

case 8:

cprintf("8 ");

break;

case 9:

cprintf("9 ");

break;

case 10:

cprintf("10 ");

break;

case 11:

cprintf("11 ");

break;

case 12:

cprintf("12 ");

break;

case 13:

cprintf("13 ");

break;

case 14:

cprintf("14 ");

break;

case 15:

cprintf("15 ");

break;

}

}

int main()

{

textbackground(5); // установка цвета фона консоли.

double input;

cprintf("Enter the number "); //вывод строки "Enter the number " на экран.

cin >> input;

clrscr(); // очистка экрана.

window(20, 5, 60, 15); // установка окна вывода.

textattr(112); // установка цвета текста.

scroll(0, 0, 9, 9, 19, 54, 6);

for (int i = 0; i < 127; i++) //цикл от 0 до 126.

{

textattr(i); // установка цвета текста в соответствии с переменной i.

print(input); //вызов функции print для вывода двоичного представления числа.

GetPrintColor(i); //вызов функции GetPrintColor для получения цвета текста.

delay(700); //задержка на 700 миллисекунд.

scroll(6, 2, 14, 9, 19, 69, i); // вызов функции scroll для прокрутки экрана.

}

cprintf("\n\r The end of the programm \n\r");

getch(); //ожидание нажатия клавиши.

return 0;

}

П римеры запуска программы

Структура

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

Соседние файлы в предмете Организация ЭВМ