Виртуальные приборы: программа LPT генератор 5 - 600 Гц ____________________________________ И так, смотрим код:
Прежде всего обратите внимание, что в implementation{ Объявляем глобальную переменную для кнопки СТОП } Var stop:boolean; { Для частотомера добавлена функция Bits которая отслеживает логическое состояние бита или группы бит, заданных в SpinEdit1 .}
function TForm1.Bits : boolean ; //--отслеживает переключения бит (1-2-4-8-16-32-64-128)Var d : boolean; begin d := true; {Для генератора нет принципиальной разницы - xor или and }d := d and ((SpinEdit1.Value) = ((SpinEdit1.Value) and Lpt.ReadPort(GetCurrentPort,GetCurrentRegister))) ; Bits := d; end;
procedure TForm1.Button1Click(Sender: TObject); begin Stop:=true; //--кнопка стопEdit3.Color := clBtnFace; end; procedure TForm1.Button2Click(Sender: TObject); //--кнопка СТАРТbegin
Edit3.Color := claqua; //--индицируем stop:=false; //--флаг стартаWhile not stop do //--бесконечный цикл, пока флаг стоп не поднят:begin { Битовая операция как на Pin клавиатуре, здесь биты устанавливает SpinEdit1; } Lpt.WritePort (GetCurrentPort,GetCurrentRegister,((SpinEdit1.Value) xor Lpt.ReadPort( (GetCurrentPort) ,GetCurrentRegister) )); { при этом GetCurrentRegister устан. тип регистра }if RadioButton2.Checked = true then Sleep(TrackBar1.Position div 10) else //--уменьшаем задержку на 10if RadioButton3.Checked = true then Sleep(TrackBar1.Position div 100)else //--уменьшаем задержку на 100Sleep(TrackBar1.Position); //--приложение засыпает на заданный интервал (установка частоты)
if Edit2.Tag = 0 then begin if Bits = true then Edit2.Text := IntToStr(StrToInt(Edit2.Text)+1); Edit2.Tag :=1; end; if Bits = false then Edit2.Tag := 0;
{-----------------------------------------------------------------------} Application.ProcessMessages; //--Обработка всей очереди сообщений, иначе зациклитend; end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin stop := true; //-- чтобы можно было закрыть приложение стандартно (Х)end ;procedure TForm1.TrackBar1Change(Sender: TObject); begin { Показываем задержку } Edit1.Text := IntToStr(TrackBar1.Position); end; procedure TForm1.FormActivate(Sender: TObject); begin Edit1.Text := IntToStr(TrackBar1.Position); Application.HintColor := cllime; end;
procedure TForm1.Timer1Timer(Sender: TObject); begin Edit3.Text := edit2.Text; //--запоминает частотуEdit2.Text := '0'; //--сбрасует счётчик в 0 ( период измерений = 1 Гц )end ;Cкачайте этот пример - primer_xp03.zip(30 kb) Cкачать готовую программу - LPTgenerator.zip(190 kb) Смотрите дальше: Шаг 4. LPT терминатор - программа дистанционного управления компьютером. |