Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Turbo Pascal / Stud_1_1 / LecRus / MainPart.doc
Скачиваний:
117
Добавлен:
03.03.2016
Размер:
5.03 Mб
Скачать

Управление экраном в текстовом режиме

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

Наиболее важные электронные компоненты видеомонитора - это контроллер (схема управления электронно-лучевой трубкой или ЖК-панелью), порты ввода-вывода, запоминающее устройство для генерации символов и видеопамять. Эти компоненты располагаются на одной печатной плате, которая называется дисплейным адаптером.

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

Изображение, выводимое на экран, предварительно формируется в видеопамяти. Эта память имеет два входа (два порта). Один порт используется сравнительно медленной программой для чтения или записи информации в видеопамять. Второй порт предназначен для быстродействующей схемы развертки изображения, обеспечивающей его регенерацию с частотой 25 гц.

Первый видеоадаптер (MDA), обладавший довольно скромными возможностями, появился в 1981 г. В дальнейшем его сменили все более совершенные модели (HEC, CGA, EGA, VGA, SVGA). Они отличаются друг от друга по количеству пикселей, объему видеопамяти, количеству цветов и другим параметрам. При этом в качестве стандартного режима вывода текста был принят режим, реализованный в адаптере CGA.

Типичный экран ПЭВМ имеет 200 строк по 640 пикселей в строке, т.е. 128000 пикселей. В монохромном режиме для каждого пикселя в видеопамяти требуется один бит, который определяет максимальную или минимальную яркость этого пикселя. Тогда видеопамять должна иметь объем 128000/8 = 16000 байт. В цветном мониторе каждый пиксель формируется как совокупность трех цветных точек: красной, зеленой и синей. В этом случае объем видеопамяти должен быть соответственно больше.

Различают два режима работы с экраном: текстовый и графический. Эти режимы существенно отличаются друг от друга способом использования видеопамяти.

В текстовом режиме на экран выводятся только символы, которые заранее предопределены таблицей, содержащей 256 их возможных вариантов. Для изображения символа на экране используется матрица из 8  8 = 64 пикселей, которую называют знакоместом. Первые 8 строк развертки образуют 80 знакомест первой текстовой строки экрана, следующие 8 строк развертки - это символы второй текстовой строки и т.д. Поэтому при выводе символа достаточно указать лишь его номер, для чего требуется один байт. Используя этот номер, электронные схемы развертки находят в специальной области памяти одну из 256 матриц 88 разрядов и вычерчивают соответствующий символ.

Примечание. В зависимости от типа адаптера количество пикселей в знакоместе может быть различным. Например, для EGA оно равно , для VGA .

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

Таким образом, для хранения "карты" экрана в текстовом режиме требуется 80  25  2 = 4000 байт видеопамяти.

Объем видеопамяти любой ПЭВМ составляет не менее 16000 байт. Целиком эта память необходима лишь при выводе графической информации. В текстовом режиме используется часть видеопамяти, которая называется страницей текстового экрана. Если емкость экрана 25  80 знакомест, то одна страница - это 80*25*2 = 4000 байт.

Байт атрибутов имеет следующую структуру:

7

6

5

4

3

2

1

0

 B  b a c k  H  t e x t 

Здесь back - цвет фона, text - цвет символа. Каждый разряд в разделах back и text - это один из основных цветов монитора: красный, зеленый или синий. Смешивание основных цветов дает 8 цветовых комбинаций. H - разряд интенсивности цвета. С учетом интенсивности получаем 16 цветов для отображения символа (темные и светлые). Для фона возможны только темные цвета. Разряд B управляет мерцанием символа: если B = 1, символ мигает с частотой около 2 гц.

К видеопамяти можно обращаться из программы с помощью адресов. Для нее в ПЭВМ зарезервированы адреса с сегментной частью от $A000 до $DFFF, т.е. 256 Кбайт.

В стандартном модуле Crt определены константы для всех 16 значений цветового атрибута в соответствии с приведенной ниже таблицей.

Бит

Н

Бит цвета

кр. зел. син.

Десятич.

значение

Имя

константы

Цвет

0

0

0

0

0

0

0

0

1

1

1

1

1

1

1

1

0

0

0

0

1

1

1

1

0

0

0

0

1

1

1

1

0

0

1

1

0

0

1

1

0

0

1

1

0

0

1

1

0

1

0

1

0

1

0

1

0

1

0

1

0

1

0

1

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

Black

Blue

Green

Cyan

Red

Magenta

Brown

LightGray

DarkGray

LightBlue

LightGreen

LightCyan

LightRed

LightMagenta

Yellow

White

Черный

Синий

Зеленый

Голубой

Красный

Фиолетовый

Коричневый

Светло-серый

Темно-серый

Ярко-синий

Ярко-зеленый

Ярко-голубой

Розовый

Малиновый

Желтый

Белый

128

Blink

Мерцание

символа

В этом же модуле определена переменная TextAttr типа byte, которая задает значение текстового атрибута.

Пример 1.

TextAttr:=Yellow+16*Brown+Blink;

Writeln('Мерцание желтых символов на коричневом фоне');

Аналогично:

TextAttr:=14+16*6+128;

Writeln('Мерцание желтых символов на коричневом фоне');

Для управления цветом символов и цветом фона могут быть использованы также следующие две процедуры:

1) TextColor(Color:byte) - текущий цвет для символов; если Color > 16, то принимается Color := Color div 16 и добавляется мерцание символа.

2) TextBackGround(Color:byte) - текущий цвет фона.

Пример 2.

TextColor(Yellow+Blink); TextBackGround(Brown);

Writeln('Мерцание желтых символов на коричневом фоне');

Аналогично:

TextColor(14+128); TextBackGround(6);

Writeln('Мерцание желтых символов на коричневом фоне');

Соседние файлы в папке LecRus