
2392_Смирнова_ЛР2_ЭВМ
.docxМИНОБРНАУКИ РОССИИ
Санкт-Петербургский государственный
электротехнический университет
«ЛЭТИ» им. В.И. Ульянова (Ленина)
Кафедра ВТ
отчет
по лабораторной работе №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;
}
П
римеры
запуска
программы
Структура
С
труктурная
схема аппаратных средств, используемых
при выполнении программы с необходимой
степенью детализации содержимого
блоков.