Blame | Last modification | View Log | Download
unit LPTMot;interfaceuses PORTINC,Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,StdCtrls, ExtCtrls;typeTForm1 = class(TForm)Button1: TButton;Button2: TButton;Edit1: TEdit;RadioButton1: TRadioButton;RadioButton2: TRadioButton;RadioButton3: TRadioButton;RadioButton4: TRadioButton;Button3: TButton;Button4: TButton;Label1: TLabel;Timer1: TTimer;Timer2: TTimer;Button5: TButton;Button6: TButton;Button7: TButton;Button8: TButton;Timer3: TTimer;CheckBox1_4: TCheckBox;CheckBox1_5: TCheckBox;CheckBox1_6: TCheckBox;CheckBox1_7: TCheckBox;Button9: TButton;procedure FormCreate(Sender: TObject);procedure Button1Click(Sender: TObject);procedure Button2Click(Sender: TObject);procedure Edit1Change(Sender: TObject);procedure RadioButton1Click(Sender: TObject);procedure RadioButton2Click(Sender: TObject);procedure RadioButton3Click(Sender: TObject);procedure RadioButton4Click(Sender: TObject);procedure Button3Click(Sender: TObject);procedure Button4Click(Sender: TObject);procedure Timer1Timer(Sender: TObject);procedure Button5Click(Sender: TObject);procedure Button6Click(Sender: TObject);procedure Button8Click(Sender: TObject);procedure Button7Click(Sender: TObject);procedure Timer3Timer(Sender: TObject);procedure Button9Click(Sender: TObject);end;varForm1: TForm1;krok1, krok2, krok3 : Byte;msteps: integer;smer: byte;const BA = $378; { LPT1 }vpravo = true;vlevo = false;mspeed = 10;implementation{$R *.DFM}procedure Motor1 (vpravo : Boolean);beginif vpravo then beginkrok1 := krok1 * 2;if krok1 = 16 then krok1 := 1end else beginkrok1 := krok1 div 2;if krok1 = 0 then krok1 := 8;end;OutPort(BA, krok1 + 16 * krok2);end;procedure Motor2 (vpravo : Boolean);beginif vpravo then beginkrok2 := krok2 * 2;if krok2 = 16 then krok2 := 1end else beginkrok2 := krok2 div 2;if krok2 = 0 then krok2 := 8;end;OutPort(BA, krok1 + 16 * krok2);end;procedure Motor3 (vpravo : Boolean);beginif vpravo then beginkrok3 := krok3 * 2;if krok3 = 16 then krok3 := 1end else beginkrok3 := krok3 div 2;if krok3 = 0 then krok3 := 8;end;OutPort(BA+2, krok3 XOR 11);end;function spinac1: Boolean;beginif (InPort(BA+1) and 8) = 0 then spinac1 := true else spinac1 := false;end;function spinac2: Boolean;beginif (InPort(BA+1) and 16) = 0 then spinac2 := true else spinac2 := false;end;function spinac3: Boolean;beginif (InPort(BA+1) and 32) = 0 then spinac3 := true else spinac3 := false;end;procedure nulpoloha;beginrepeatMotor1(vlevo);delay (5);until spinac1;repeatMotor2(vlevo);delay (5);until spinac2;repeatMotor3(vlevo);delay (5);until spinac3;end;procedure pohyb1;var N : Word;beginfor n:= 1 to 100 do begin { 100 krokù }Motor1 (vpravo);Motor2 (vpravo); { vechny motory }Motor3 (vpravo);delay (5); { rychle }end;for n:= 1 to 100 do begin { 100 krokù }Motor1 (vpravo); { jen motor 1 }delay (10); { pomalu }end;delay(1000); { klid 1s }for n:= 1 to 100 do begin { 100 krokù }Motor1 (vlevo);Motor2 (vlevo); { vechny motory }Motor3 (vlevo);delay(5); { rychle }end;for n:= 1 to 100 do begin { 100 krokù }Motor1 (vlevo); { jen motor 1 }delay (10); { pomalu }end;delay (1000); { klid 1s }end;procedure TForm1.FormCreate(Sender: TObject);var ble: integer;beginOpenCom (Pchar('LPT1:'));krok1 := 1;krok2 := 1;krok3 := 1;OutPort (BA,0);val(Edit1.Text,msteps,ble);end;procedure TForm1.Button1Click(Sender: TObject);beginnulpoloha;end;procedure TForm1.Button2Click(Sender: TObject);beginpohyb1;end;procedure TForm1.Edit1Change(Sender: TObject);varble:integer;beginval(Edit1.Text,msteps,ble);end;procedure TForm1.RadioButton1Click(Sender: TObject);beginOutPort(BA, 1);end;procedure TForm1.RadioButton2Click(Sender: TObject);beginOutPort(BA, 2);end;procedure TForm1.RadioButton3Click(Sender: TObject);beginOutPort(BA, 4);end;procedure TForm1.RadioButton4Click(Sender: TObject);beginOutPort(BA, 8);end;procedure TForm1.Button3Click(Sender: TObject);var n:integer;beginfor n:=1 to msteps dobeginOutPort(BA, 5);delay(mspeed);OutPort(BA, 6);delay(mspeed);OutPort(BA, 10);delay(mspeed);OutPort(BA, 9);delay(mspeed);end;OutPort(BA, 0);end;procedure TForm1.Button4Click(Sender: TObject);var n:integer;beginfor n:=1 to msteps dobeginOutPort(BA, 9); //1delay (mspeed); { pomalu }OutPort(BA, 10); //8delay (mspeed); { pomalu }OutPort(BA, 6); //2delay (mspeed); { pomalu }OutPort(BA, 5); //4delay (mspeed); { pomalu }end;OutPort(BA, 0);end;procedure TForm1.Timer1Timer(Sender: TObject);beginif (smer and 1)=1 thenButton4Click(Sender)elseButton3Click(Sender);inc(smer);end;procedure TForm1.Button5Click(Sender: TObject);beginTimer1.Enabled:=true;Timer2.Enabled:=true;end;procedure TForm1.Button6Click(Sender: TObject);beginTimer1.Enabled:=false;Timer2.Enabled:=false;end;procedure TForm1.Button8Click(Sender: TObject);var n:integer;beginfor n:=1 to msteps dobeginOutPort(BA, 1); //1delay (mspeed); { pomalu }OutPort(BA, 8); //8delay (mspeed); { pomalu }OutPort(BA, 2); //2delay (mspeed); { pomalu }OutPort(BA, 4); //4delay (mspeed); { pomalu }end;OutPort(BA, 0);end;procedure TForm1.Button7Click(Sender: TObject);var n:integer;beginfor n:=1 to msteps dobeginOutPort(BA, 4); //1delay (mspeed); { pomalu }OutPort(BA, 2); //8delay (mspeed); { pomalu }OutPort(BA, 8); //2delay (mspeed); { pomalu }OutPort(BA, 1); //4delay (mspeed); { pomalu }end;OutPort(BA, 0);end;procedure TForm1.Timer3Timer(Sender: TObject);varn : integer;beginn := InPort(BA+1);IF $10 = n and $10 thenCheckBox1_4.Checked := false else CheckBox1_4.Checked := true;IF $20 = n and $20 thenCheckBox1_5.Checked := false else CheckBox1_5.Checked := true;IF $40 = n and $40 thenCheckBox1_6.Checked := false else CheckBox1_6.Checked := true;IF $80 = n and $80 thenCheckBox1_7.Checked := true else CheckBox1_7.Checked := false;end;procedure run(turns:integer; speed:integer);var n:integer;beginfor n:=1 to turns dobeginOutPort(BA, 1);delay (speed); { pomalu }OutPort(BA, 2);delay (speed); { pomalu }OutPort(BA, 4);delay (speed); { pomalu }end;OutPort(BA, 0);end;procedure TForm1.Button9Click(Sender: TObject);var n: integer;beginfor n:=35 downto 20 do run(2,n);run(70,20);end;end.