⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unit1.~pas

📁 生成一个周期的正弦波数据,作为常数存于单片机中,产生三相正弦波,可改调深度.
💻 ~PAS
字号:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    Memo2: TMemo;
    Memo3: TMemo;
    Memo4: TMemo;
    Memo5: TMemo;
    Memo6: TMemo;
    Memo7: TMemo;
    Memo8: TMemo;
    Memo9: TMemo;
    Memo10: TMemo;
    Memo11: TMemo;
    Memo12: TMemo;
    Memo13: TMemo;
    Edit1: TEdit;
    Edit2: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    Label11: TLabel;
    Label12: TLabel;
    Label13: TLabel;
    Label14: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Edit1Change(Sender: TObject);
    procedure Edit2Change(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function Mmax( X1,X2,X3,X4,X5,X6: integer): integer;
begin
 if X2>X1 then X1:=X2;
 if X3>X1 then X1:=X3;
 if X4>X1 then X1:=X4;
 if X5>X1 then X1:=X5;
 if X6>X1 then X1:=X6;
 Mmax:=X1;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
T: string;
A: real;
I,K,U0,V0,W0,U1,V1,W1: integer;
Step,Pop,Total: integer;
begin
Button1.Enabled:=False;
Memo1.Lines.Clear;
Memo2.Lines.Clear;
Memo3.Lines.Clear;
Memo4.Lines.Clear;
Memo5.Lines.Clear;
Memo6.Lines.Clear;
Memo7.Lines.Clear;
Memo8.Lines.Clear;
Memo9.Lines.Clear;
Memo10.Lines.Clear;
Memo11.Lines.Clear;
Memo12.Lines.Clear;
Memo13.Lines.Clear;

Step:=strToInt(Edit1.Text);//6角度步长
Pop:=strToInt(Edit2.Text);//30每步点数
Total:=360 div Step;//每周期步数
I:=0;
while (I<360) do begin
 A:=(SIN(3.14159 * I / 180)) * Pop;
 K:=Round(A);
 if K>0 then Memo1.Lines.Add(IntToStr(K)) else Memo1.Lines.Add('0');
 if K<0 then Memo4.Lines.Add(IntToStr(-K)) else Memo4.Lines.Add('0');
 I:=I+Step;
end;

I:=240;
while (I<360) do begin
 A:=(SIN(3.14159 * I / 180)) * Pop;
 K:=Round(A);
 if K>0 then Memo2.Lines.Add(IntToStr(K)) else Memo2.Lines.Add('0');
 if K<0 then Memo5.Lines.Add(IntToStr(-K)) else Memo5.Lines.Add('0');
 I:=I+Step;
end;
I:=0;
while (I<240) do begin
 A:=(SIN(3.14159 * I / 180)) * Pop;
 K:=Round(A);
 if K>0 then Memo2.Lines.Add(IntToStr(K)) else Memo2.Lines.Add('0');
 if K<0 then Memo5.Lines.Add(IntToStr(-K)) else Memo5.Lines.Add('0');
 I:=I+Step;
end;

I:=120;
while (I<360) do begin
 A:=(SIN(3.14159 * I / 180)) * Pop;
 K:=Round(A);
 if K>0 then Memo3.Lines.Add(IntToStr(K)) else Memo3.Lines.Add('0');
 if K<0 then Memo6.Lines.Add(IntToStr(-K)) else Memo6.Lines.Add('0');
 I:=I+Step;
end;
I:=0;
while (I<120) do begin
 A:=(SIN(3.14159 * I / 180)) * Pop;
 K:=Round(A);
 if K>0 then Memo3.Lines.Add(IntToStr(K)) else Memo3.Lines.Add('0');
 if K<0 then Memo6.Lines.Add(IntToStr(-K)) else Memo6.Lines.Add('0');
 I:=I+Step;
end;

for I:=0 to Total-1 do begin
 U0:=StrToInt(Memo1.Lines.Strings[I]);
 V0:=StrToInt(Memo2.Lines.Strings[I]);
 W0:=StrToInt(Memo3.Lines.Strings[I]);
 U1:=StrToInt(Memo4.Lines.Strings[I]);
 V1:=StrToInt(Memo5.Lines.Strings[I]);
 W1:=StrToInt(Memo6.Lines.Strings[I]);
 for K:=1 to U0 do begin
  Memo7.Lines.Add('1');
  Memo8.Lines.Add('0');
  Memo9.Lines.Add('0');
 end;
 for K:=1 to V0 do begin
  Memo7.Lines.Add('0');
  Memo8.Lines.Add('1');
  Memo9.Lines.Add('0');
 end;
 for K:=1 to W0 do begin
  Memo7.Lines.Add('0');
  Memo8.Lines.Add('0');
  Memo9.Lines.Add('1');
 end;
 for K:=U0+V0+W0+1 to Pop do begin
  Memo7.Lines.Add('0');
  Memo8.Lines.Add('0');
  Memo9.Lines.Add('0');
 end;
 for K:=1 to U1 do begin
  Memo10.Lines.Add('1');
  Memo11.Lines.Add('0');
  Memo12.Lines.Add('0');
 end;
 for K:=1 to V1 do begin
  Memo10.Lines.Add('0');
  Memo11.Lines.Add('1');
  Memo12.Lines.Add('0');
 end;
 for K:=1 to W1 do begin
  Memo10.Lines.Add('0');
  Memo11.Lines.Add('0');
  Memo12.Lines.Add('1');
 end;
 for K:=U1+V1+W1+1 to Pop do begin
  Memo10.Lines.Add('0');
  Memo11.Lines.Add('0');
  Memo12.Lines.Add('0');
 end;
end;

T:='';
for I:=0 to Total * Pop - 1 do begin
 U0:=StrToInt(Memo7.Lines.Strings[I]);
 V0:=StrToInt(Memo8.Lines.Strings[I]);
 W0:=StrToInt(Memo9.Lines.Strings[I]);
 U1:=StrToInt(Memo10.Lines.Strings[I]);
 V1:=StrToInt(Memo11.Lines.Strings[I]);
 W1:=StrToInt(Memo12.Lines.Strings[I]);
 K:=0;
 if U0=1 then K:=K or $01;
 if V0=1 then K:=K or $02;
 if W0=1 then K:=K or $04;
 if U1=1 then K:=K or $08;
 if V1=1 then K:=K or $10;
 if W1=1 then K:=K or $20;
 T:=T+'0x'+intToHex(K,2)+',';
 if (I mod 10 =0) then begin
  Memo13.Lines.Add(T);
  T:='';
 end;
end;
Memo13.Lines.Add(T);
Memo13.SetFocus;
Memo13.SelectAll;
Memo13.CopyToClipboard;
end;

procedure TForm1.Edit1Change(Sender: TObject);
begin
Button1.Enabled:=True;
end;

procedure TForm1.Edit2Change(Sender: TObject);
begin
Button1.Enabled:=True;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -