Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пояснительная записка_ЦУМ.DOC
Скачиваний:
7
Добавлен:
12.07.2019
Размер:
320.51 Кб
Скачать

10

Федеральное агентство по образованию

Государственное образовательное учреждение высшего профессионального образования

Новгородский государственный университет имени Ярослава Мудрого

_____________________________________________________________________________

Кафедра «Радиосистемы»

Будильник

Пояснительная записка к курсовому проекту по учебной дисциплине

«Цифровые устройства и микропроцессоры

по специальности 552500-радиотехника

Руководитель

__________ С.А. Гурьянов

_________________ 2010г.

Выполнил

Студент группы 7011

___________ А.А. Огарков

_________________ 2010г.

Великий Новгород

СОДЕРЖАНИЕ

Стр.

1 Блок схема алгоритма программы 3

2 Описание работы программы 4

3 Листинг программы 5

4 Комментарии к листингу программы 8

5. Заключение 9

6 Список литературы 10

1 Блок-схема алгоритма программы На рисунке 1 представлена блок схема алгоритма программы.

Рисунок 1 – Блок схема программы

2 Описание работы программы

Программа имитирует работу часов-будильника. Основное назначение программы – оповещение пользователя путем срабатывания звукового сигнала (системный динамик компьютера) в момент времени, когда текущее время совпадает с временем, заданным пользователем. Если сигнал будильника не задан, то программа работает в режиме простых часов до прерывания работы пользователем.

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

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

Навигация по программе осуществляется интуитивно понятными командами, взятыми из bios. То есть, для согласия с редактированием текущего системного времени и установки времени будильника пользователь должен ввести «y» (англ. Yes) без кавычек на соответствующий вопрос или «n» (англ. No) для отказа. Вводимый ответ не чувствителен к регистру.

После согласия, пользователю будет предложено ввести текущее время и/или время срабатывания будильника. Сначала устанавливаются часы (от 0 до 23), затем минуты (от 0 до 59). Это позволяет срабатывать будильнику раз в сутки, а не каждые 12 часов.

Звуковой сигнал будильник подает в течение 30 сек или до нажатия любой клавиши на клавиатуре. Таким же образом осуществляется и выход из программы.

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

3 Листинг программы

(Turbo Pascal 7.0)

Program alarm_clock;

uses graph,crt,dos;

type

ar = string[10];

br = array[0..5] of integer;

const {1}

S = 135; M = 110; H = 85; XC = 300; YC = 220;

R = 200; df = PI/30; ac : integer = 0;

var

GrafDriver,GrafMode: integer;

i,j,x1,y1,x2,y2,hr,mn: integer;

xy,xy1: br;

f,ff: real;

c: char;

a: string[2];

tt,tt1: ar;

dl: longint;

hour,min,sec,sec100,hour1,min1,sec1: word;

procedure sttm; {2}

begin

write('Вы хотите изменить текущее время? (y=yes, n=no) ');

readln(c);

if (c <> 'N') and (c <> 'n') then

begin

write('Установите часы (от 0 до 23): '); readln(hour);

write('Установите минуты (от 0 до 59): '); readln(min);

SetTime(hour,min,0,0); {3}

end;

end;

procedure strelka(var tt: ar; var xy: br); {4}

begin

dl := hour; dl := dl*10000+min*100+sec; str(dl:6,tt); {5}

insert(':',tt,3); insert(':',tt,6);

f := (hour mod 12)*df*5 + min*df/12 + sec*df/720; {6}

xy[0] := round(XC + H*sin(f)); xy[1] := round(YC - H*cos(f));

f := min*df + sec*df/60; {7}

xy[2] := round(XC + M*sin(f)); xy[3] := round(YC - M*cos(f));

f := sec*df; {8}

xy[4] := round(XC + S*sin(f)); xy[5] := round(YC - S*cos(f));

end;

begin

clrscr;

write('Текущее время (чч:мм): ');

GetTime(hour,min,sec,sec100); {9}

if min < 10 then writeln(hour,':0',min)

else writeln(hour,':',min);

sttm; {10}

write('Вы хотите установить время будильника? (y=yes, n=no) ');

readln(c);

if (c <> 'N') and (c <> 'n') then

begin

ac := 1; {11}

write('Установите часы сигнала будильника (от 0 до 23): '); readln(hr);

write('Установите минуты сигнала будильника (от 0 до 59): '); readln(mn);

ff := (hr mod 12)*df*5 + mn*df/12;

end;

GrafDriver := Detect;

InitGraph(GrafDriver,GrafMode,' ');

if GraphResult <> grOk then

begin

writeln('Ошибка инициализации графического режима!!! '); exit;

end;

SetColor(CYAN); {12}

RectAngle(0,0,GetMaxX,GetMaxY);

SetColor(LIGHTMAGENTA); {13}

Circle(XC,YC,R);

SetTextStyle(DefaultFont,HorizDir,2); {14}

for i := 1 to 60 do {15}

begin

f := i*df; {16}

x2 := round(XC + R*sin(f)); y2 := round(YC - R*cos(f)); {17}

x1 := round(XC + (R-10)*sin(f)); y1 := round(YC - (R-10)*cos(f)); {18}

if i mod 5 <> 0 then line(x1,y1,x2,y2) {19}

else

begin {20}

x1 := round(XC + (R-20)*sin(f));

y1 := round(YC - (R-20)*cos(f));

line(x1,y1,x2,y2);

str(i div 5,a);

x1 := round(XC + (R-40)*sin(f) - 5);

y1 := round(YC - (R-40)*cos(f) - 5);

OutTextXY(x1,y1,a); {21}

end;

end;

if ac = 1 then {22}

begin

SetColor(LIGHTRED);

x1 := round(XC + R*sin(ff)); y1 := round(YC - R*cos(ff));

x2 := round(XC + (R-30)*sin(ff)); y2 := round(YC - (R-30)*cos(ff));

Line(x1,y1,x2,y2);

end;

GetTime(hour,min,sec,sec100); {23}

strelka(tt1,xy1); {24}

while not keypressed do {25}

begin

hour1 := hour; min1 := min; sec1 := sec; {26}

GetTime(hour,min,sec,sec100); {27}

if sec <> sec1 then

begin

SetColor(BLACK); {28}

line(XC,YC,xy1[0],xy1[1]); line(XC,YC,xy1[2],xy1[3]);

line(XC,YC,xy1[4],xy1[5]);

if (ac = 1) and (hour = hr) and (min = mn) and (sec <= 30) then

begin {29}

sound(1046); delay(1000); sound(2093); delay(1000);

sound(4186); delay(1000); sound(1569); delay(1000); nosound;

end;

strelka(tt,xy); {30}

SetColor(WHITE);

line(XC,YC,xy[0],xy[1]); line(XC,YC,xy[2],xy[3]);

line(XC,YC,xy[4],xy[5]); delay(980); {31}

SetColor(BLACK);

OutTextXY(XC-60,2*YC,tt);

for j := 0 to 5 do xy1[j] := xy[j]; {32}

end;

end;

c := ReadKey; {33}

CloseGraph;

sttm; {34}

End.