Федеральное агентство по образованию
Государственное образовательное учреждение высшего профессионального образования
Новгородский государственный университет имени Ярослава Мудрого
_____________________________________________________________________________
Кафедра «Радиосистемы»
Будильник
Пояснительная записка к курсовому проекту по учебной дисциплине
«Цифровые устройства и микропроцессоры
по специальности 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.