Обработчик прерываний таймера - Turbo Pascal
Формулировка задачи:
Нужна помощь в написании проги на паскале в пределах операционной среды MS DOS
разработать обработчик прерываний таймера,который после своей установки каждую секунду меняет показания цифровых часов, изображенного на графическом экране.
(использовать графический режим 640Х480Х16)
Решение задачи: «Обработчик прерываний таймера»
textual
Листинг программы
{.$M $1000,0,0} Uses Graph, Crt, Dos; Var OldVect: pointer; TimerVect: Procedure; hr, min, sec, hund: word; second_call: boolean; const tm = '00:00:00'; Function Beauty(n: Word): String; var s: string; begin str(n, s); while length(s) < 2 do s := '0' + s; Beauty := s; end; Procedure PrintTime; begin bar(getmaxx div 2 - textwidth(tm) div 2, getmaxy div 2 - textheight(tm), getmaxx div 2 + textwidth(tm) div 2, getmaxy div 2 + textheight(tm)); outtextxy(getmaxx div 2, getmaxy div 2, Beauty(hr)+':'+Beauty(min)+':'+Beauty(sec)); End; {$F+} Procedure MyTimer; interrupt; begin if second_call then begin inc(hund, 11); if hund >= 100 then begin dec(hund, 100); inc(sec); if sec >= 60 then begin dec(sec, 60); inc(min); if min >= 60 then begin dec(min, 60); inc(hr); if hr >= 24 then dec(hr, 24); end; end; printtime; end; end; Inline ($9C); TimerVect; second_call := not second_call; end; {$F-} var gd, gm, err : integer; begin { GetTime(hr, min, sec, hund); } gd := Detect; initgraph(gd, gm, ''); err := graphresult; if err <> grOk then begin writeln('error : ' + grapherrormsg(err)); halt(1); end; setfillstyle(solidfill, getbkcolor); settextjustify(centertext, centertext); hr := 0; min := 0; sec := 0; hund := 0; second_call := false; GetIntVec ($8, @TimerVect); GetIntVec ($8, OldVect); SetIntVec ($8, Addr (myTimer)); repeat delay(10); until keypressed; while keypressed do readkey; SetIntVec ($8, OldVect); closegraph; end.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д