Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Управление динамиком





Модуль crt также содержит процедуры, обеспечивающие управление динамиком.

1. Процедура Sound (f:word) - генерирует звук указанной частоты в Гц.

Для справки, основной гамме соответствуют следующие частоты: нота «до» основной октавы - 330 Гц, далее - 349 Гц, 370 Гц, 392 Гц, 415 Гц, 440 Гц, 466 Гц, 494 Гц, 523 Гц, 554 Гц, 588 Гц, 622 Гц и, наконец, нота «до» следующей октавы - 660 Гц. Частоты нот других октав кратны частотам основной.

2. Процедура NoSound - выключает динамик.

3. Процедура Delaу (t:word) - обеспечивает задержку на заданный интервал времени, мс.

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

4. Процедура GetTime (VarHour, Minute, Second, Sec100:word) – возвращает текущее время суток. Определена в модуле Dos.

Пример 8.3. Разработать программу проигрывания основной октавы.

Проигрывание гаммы осуществляется включением и выключением динамика с разными частотами.

 

Program ex;

Uses Crt;

Const f: array[1..13] of word = (330, 349, 370, 392, 415, 440,

466, 494, 523, 554, 588, 622, 660);

Var i:byte;

Begin for i:=1 to 13 do

begin

Sound(f[i]);

for j:=1 to 5000 do Delay(1000); {задержка?!}

NoSound;

end;

End.

 

Чтобы не подбирать время задержки для конкретного компьютера, построим свою процедуру обеспечения требуемой задержки, использующую процедуру GetTime:

Program ex;

Uses Crt, Dos;

Procedure NewDelay(dTime:word);

Var key:boolean;

Hour, Min, Sec, Sec100, MyHour, MyMin, MySec, MySec100: Word;

Begin

GetTime(Hour, Min, Sec, Sec100); {узнаем текущее время}

{определяем время завершения задержки}

MySec100:=Sec100+dTime; MySec:=Sec+MySecl00 div 100;

MySec100:=MySec100 mod 100;

MyMin:=Min+MySec div 60; MySec:=MySec mod 60;

MyHour:=Hour+MyMin div 60; MyMin:=MyMin mod 60;

key:=false;

while not key do {цикл задержки}

Begin

GetTime(Hour, Min, Sec, Sec100); {узнаем текущее время}

{проверяем, наступил ли заданный момент}

if (Ноиr>МуНоиr) or ((Ноиr=МуНоиr) and ((Min>MyMin) or

((Min=MyMin) and ((Sec>MySec) or

((Sec=MySec) and ((Sec100>=MySec100)))))))

then key:=true;

End

End;

Const f array[1..13] of word = (330, 349, 370, 392, 415, 440,

466, 494, 523, 554, 588, 622, 660);

Var i:byte; j:integer;

{описываем массив окон пунктов меню}

Const menu:array[1..4] of win=

((x1:5;y1:4;x2:15;y2:4;text: 'new '),

(x1:5;y1:5;x2:15;y2:5;text: 'open'),

(x1:5;y1:6;x2:15;y2:6;text: save'),

(x1:5;y1: 7;x2:15;y2:7;text: 'exit'));

{процедура рисования пункта меню}

Procedure DrawWin(w:win;attr:byte);

Begin

with w do

begin

TextAttr:=attr; {устанавливаем атрибут окна пункта}

Window(xl,у1,х2,у2); {устанавливаем окно пункта}

Clrscr; {высвечиваем окно пункта}

GotoXY(2,1); {устанавливаем курсор}

Write(text); {выводим название пункта}

end;

End;

{процедура рисования меню с выделенным пунктом npos}

Procedure DrawMenu(npos: integer);

Begin

Clrscr;

for i:=1 to 4 do

if i=npos then DrawWin(menu[i],94) {выводим выделенный пункт}

else DrawWin (menu[i], 30); {выводим невыделенный пункт}

End;

{основная программа}

Begin

npos:=1; {выделенный пункт меню}

DrawMenu(npos); {выводим меню}

repeat

ch1:=ReadKey; if ch1=#0 then ch2:=ReadKey;

case ch1 of

#0: case ch2 of

#72: begin {стрелка вверх}

if npos>1 then {если не верхний пункт}

begin

DrawWin(menu[npos],30); {убираем выделение текущего пункта меню}

npos:=npos-1; {переходим к предыдущему пункту}

DrawWin(menu[npos],94); {выделяем новый пункт}

end;

end;

Begin for i:=l to 13 do

begin

Sound(f[i]):

NewDelay(50);

NoSound;

end;

End.

 

 

Date: 2015-07-24; view: 421; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.005 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию