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

📄 main.pas

📁 六路三十二次谐波信号发生器 可产生三十次以下任何谐波叠加的波形
💻 PAS
📖 第 1 页 / 共 3 页
字号:
unit main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,math,StrUtils, StdCtrls, OleCtrls, MSCommLib_TLB, XPMan, ComCtrls,
  Menus, ExtCtrls;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    MSComm1: TMSComm;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    Button7: TButton;
    Memo2: TMemo;
    Button8: TButton;
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    Button10: TButton;
    GroupBox2: TGroupBox;
    Label9: TLabel;
    Label10: TLabel;
    Label5: TLabel;
    Label23: TLabel;
    Button9: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    ListBox4: TListBox;
    Button26: TButton;
    Memo1: TMemo;
    Memo3: TMemo;
    TabSheet2: TTabSheet;
    GroupBox7: TGroupBox;
    Label19: TLabel;
    Label20: TLabel;
    Label6: TLabel;
    Label24: TLabel;
    Button20: TButton;
    Edit3: TEdit;
    Edit4: TEdit;
    ListBox5: TListBox;
    Button11: TButton;
    Button13: TButton;
    Memo4: TMemo;
    Memo9: TMemo;
    TabSheet3: TTabSheet;
    GroupBox5: TGroupBox;
    Label15: TLabel;
    Label16: TLabel;
    Label8: TLabel;
    Label25: TLabel;
    Button16: TButton;
    Edit5: TEdit;
    Edit6: TEdit;
    ListBox6: TListBox;
    Button17: TButton;
    Button15: TButton;
    Memo5: TMemo;
    Memo10: TMemo;
    TabSheet4: TTabSheet;
    GroupBox3: TGroupBox;
    Label7: TLabel;
    Label11: TLabel;
    Label12: TLabel;
    Label26: TLabel;
    Button12: TButton;
    Edit7: TEdit;
    Edit8: TEdit;
    ListBox7: TListBox;
    Button19: TButton;
    Button21: TButton;
    Memo6: TMemo;
    Memo11: TMemo;
    TabSheet5: TTabSheet;
    GroupBox4: TGroupBox;
    Label13: TLabel;
    Label14: TLabel;
    Label21: TLabel;
    Label28: TLabel;
    Button14: TButton;
    Edit9: TEdit;
    Edit10: TEdit;
    ListBox8: TListBox;
    Button22: TButton;
    Button23: TButton;
    Memo7: TMemo;
    Memo12: TMemo;
    TabSheet6: TTabSheet;
    GroupBox6: TGroupBox;
    Label17: TLabel;
    Label18: TLabel;
    Label22: TLabel;
    Label29: TLabel;
    Button18: TButton;
    Edit11: TEdit;
    Edit12: TEdit;
    ListBox9: TListBox;
    Button24: TButton;
    Button25: TButton;
    Memo8: TMemo;
    Memo13: TMemo;
    MainMenu1: TMainMenu;
    N1: TMenuItem;
    N7: TMenuItem;
    N2: TMenuItem;
    N8: TMenuItem;
    StatusBar1: TStatusBar;
    N3: TMenuItem;
    Label30: TLabel;
    GroupBox1: TGroupBox;
    ListBox1: TListBox;
    procedure FormCreate(Sender: TObject);
    procedure MSComm1Comm(Sender: TObject);
    procedure Button4Click(Sender: TObject);

    procedure Button5Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button7Click(Sender: TObject);
    procedure Button8Click(Sender: TObject);
    procedure Button10Click(Sender: TObject);
    procedure Button11Click(Sender: TObject);
    procedure Button15Click(Sender: TObject);
    procedure Button19Click(Sender: TObject);
    procedure Button22Click(Sender: TObject);
    procedure Button24Click(Sender: TObject);
    procedure Button26Click(Sender: TObject);
    procedure Button13Click(Sender: TObject);
    procedure Button17Click(Sender: TObject);
    procedure Button21Click(Sender: TObject);
    procedure Button23Click(Sender: TObject);
    procedure Button25Click(Sender: TObject);
    procedure ListBox4Click(Sender: TObject);
    procedure ListBox5Click(Sender: TObject);
    procedure ListBox6Click(Sender: TObject);
    procedure ListBox7Click(Sender: TObject);
    procedure ListBox8Click(Sender: TObject);
    procedure ListBox9Click(Sender: TObject);
    procedure Button9Click(Sender: TObject);
    procedure Button20Click(Sender: TObject);
    procedure Button16Click(Sender: TObject);
    procedure Button12Click(Sender: TObject);
    procedure Button14Click(Sender: TObject);
    procedure Button18Click(Sender: TObject);
    procedure N7Click(Sender: TObject);
    procedure N8Click(Sender: TObject);
    procedure N3Click(Sender: TObject);


  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  dataout_1:array[0..94] of double;//转移用
  dataout1:array of integer;
  dataout2:array of integer;
  dataout3:array of integer;
  dataout4:array of integer;
  dataout5:array of integer;
  dataout6:array of integer;
  
  b:integer; //显示序号
  m1:integer;//谐波的个数
  m2:integer;
  m3:integer;
  m4:integer;
  m5:integer;
  m6:integer;

  k1:array of integer;//谐波次数
  k2:array of integer;
  k3:array of integer;
  k4:array of integer;
  k5:array of integer;
  k6:array of integer;

  l1:array of integer;//谐波幅度
  l2:array of integer;
  l3:array of integer;
  l4:array of integer;
  l5:array of integer;
  l6:array of integer;

  p1:array of integer;//相角
  p2:array of integer;
  p3:array of integer;
  p4:array of integer;
  p5:array of integer;
  p6:array of integer;

  w:integer;//采样点数
  v:integer;//时间点

  flag_1:boolean;
  flag_2:boolean;
  flag_3:boolean;
  flag_4:boolean;
  flag_5:boolean;
  
implementation

{$R *.dfm}
uses functions;
procedure TForm1.FormCreate(Sender: TObject);
var
  i:integer;
  begin
  m1:=0;     //谐波数为零
  m2:=0;
  m3:=0;
  m4:=0;
  m5:=0;
  m6:=0;

  w:=95;    //采64个点

  flag_1:=false; //保证通讯顺序用的
  flag_2:=false;
  flag_3:=false;
  flag_4:=false;
  flag_5:=false;

  Button9.Enabled:=false;
  Button20.Enabled:=false;
  Button16.Enabled:=false;
  Button12.Enabled:=false;
  Button18.Enabled:=false;
  Button14.Enabled:=false;

  setlength(dataout1,95);  //保存95个数据
  setlength(dataout2,95);
  setlength(dataout3,95);
  setlength(dataout4,95);
  setlength(dataout5,95);
  setlength(dataout6,95);

  //初始化listbox1
  for i:=1 to 32 do
    if i<10 then
     begin
     listbox1.Items.add('0'+inttostr(i)+'次谐波');
     end
    else
     begin
     listbox1.Items.add(inttostr(i)+'次谐波');
     end;
     
 //避免刚开始添加时点击LISTBOX出错
listbox4.Enabled:=false;
listbox5.Enabled:=false;
listbox6.Enabled:=false;
listbox7.Enabled:=false;
listbox8.Enabled:=false;
listbox9.Enabled:=false;

  l1:=0;
  k1:=0;
  m1:=0;

  l2:=0;
  k2:=0;
  m2:=0;

  l2:=0;
  k2:=0;
  m2:=0;

  l3:=0;
  k3:=0;
  m3:=0;

  l4:=0;
  k4:=0;
  m4:=0;

  l5:=0;
  k5:=0;
  m5:=0;


//测试数据
// for i:=0 to 94 do
//    begin
//    dataout[i]:=round(sin(PI*i/47)*127+128);
//   memo1.lines.add(inttostr(dataout[i]));
//  end;
//测试数据

  end;




procedure TForm1.MSComm1Comm(Sender: TObject);

var
  buffer: Olevariant;//MSComm1.InputMode = comInputModeBinary
  i: integer;

  strr:string;
  cc:string;
  tempvalue:real;
  endt:int64;
  r:real;
begin

  if(MSComm1.CommEvent=comEvReceive) then //串行接收事件处理
  begin
           buffer := MSComm1.Input;//读出后会自动清除接收缓冲区,buffer[0]~buffer[31]
          strr:='';

        //  for i := 0 to MSComm1.RThreshold - 1 do //32字节Hex转换
           strr:= strr + inttohex(buffer[0], 2);
            memo2.Lines.Add(inttostr(strtoint('$'+strr)));  //显示接收数据
            cc:='                ';
            b:=b+1;
           strr:=inttohex(b,2)+cc+strr;

  end;
end;
procedure TForm1.Button4Click(Sender: TObject);
var
i:integer;
str:string;
begin
listbox4.Enabled:=true;
listbox5.Enabled:=true;
listbox6.Enabled:=true;
listbox7.Enabled:=true;
listbox8.Enabled:=true;
listbox9.Enabled:=true;
//波形设置可以进行修改
  Button9.Enabled:=true;
  Button20.Enabled:=true;
  Button16.Enabled:=true;
  Button12.Enabled:=true;
  Button18.Enabled:=true;
  Button14.Enabled:=true;
//################################
//一通道
  setlength(k1,m1);   //设置波次
  setlength(l1,m1);   //设置幅度
  setlength(p1,m1);   //设置相角
//二通道
  setlength(k2,m2);
  setlength(l2,m2);
  setlength(p2,m2);
//三通道
  setlength(k3,m3);
  setlength(l3,m3);
  setlength(p3,m3);
//四通道
  setlength(k4,m4);
  setlength(l4,m4);
  setlength(p4,m4);
//五通道
  setlength(k5,m5);
  setlength(l5,m5);
  setlength(p5,m5);
//六通道
  setlength(k6,m6);
  setlength(l6,m6);
  setlength(p6,m6);
//################################
//一通道
  for i := 0 to listbox4.Count -1 do //初始化设置框显示
  begin
    l1[i]:=1;
    p1[i]:=0;
    str:=trim(listbox4.Items[i]);
    str:=ansireplacestr(str,'次谐波','');
    k1[i]:=strtoint(str);
  end;
//二通道
  for i := 0 to listbox5.Count -1 do //初始化设置框显示
  begin
    l2[i]:=1;
    p2[i]:=0;
    str:=trim(listbox5.Items[i]);
    str:=ansireplacestr(str,'次谐波','');
    k2[i]:=strtoint(str);
  end;
//三通道
  for i := 0 to listbox6.Count -1 do //初始化设置框显示
  begin
    l3[i]:=1;
    p3[i]:=0;
    str:=trim(listbox6.Items[i]);
    str:=ansireplacestr(str,'次谐波','');
    k3[i]:=strtoint(str);
  end;
//四通道
  for i := 0 to listbox7.Count -1 do //初始化设置框显示
  begin
    l4[i]:=1;
    p4[i]:=0;
    str:=trim(listbox7.Items[i]);
    str:=ansireplacestr(str,'次谐波','');
    k4[i]:=strtoint(str);
  end;
//五通道
  for i := 0 to listbox8.Count -1 do //初始化设置框显示
  begin
    l5[i]:=1;
    p5[i]:=0;
    str:=trim(listbox8.Items[i]);
    str:=ansireplacestr(str,'次谐波','');
    k5[i]:=strtoint(str);
  end;
//六通道
  for i := 0 to listbox9.Count -1 do //初始化设置框显示
  begin
    l6[i]:=1;
    p6[i]:=0;
    str:=trim(listbox9.Items[i]);
    str:=ansireplacestr(str,'次谐波','');
    k6[i]:=strtoint(str);
  end;
  
end;



procedure TForm1.Button5Click(Sender: TObject);
  begin
  //更改不允许
  Button9.Enabled:=false;
  Button20.Enabled:=false;
  Button16.Enabled:=false;
  Button12.Enabled:=false;
  Button18.Enabled:=false;
  Button14.Enabled:=false;
//################################
  //清空memo
  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;
//################################
  //清空listbox
  listbox4.Items.Clear;
  listbox5.Items.Clear;
  listbox6.Items.Clear;
  listbox7.Items.Clear;
  listbox8.Items.Clear;
  listbox9.Items.Clear;
//################################
  //清空当前波次显示
  Label23.Caption:='';
  Label24.Caption:='';
  Label25.Caption:='';
  Label26.Caption:='';
  Label28.Caption:='';
  Label29.Caption:='';
//################################
  l1:=0;
  k1:=0;
  m1:=0;

  l2:=0;
  k2:=0;
  m2:=0;

  l2:=0;
  k2:=0;
  m2:=0;

  l3:=0;
  k3:=0;
  m3:=0;

  l4:=0;
  k4:=0;
  m4:=0;

  l5:=0;
  k5:=0;
  m5:=0;
  end;

procedure TForm1.Button6Click(Sender: TObject);
var
  str:string;
  osenddata:variant;
  osendstr:olevariant;
  i:integer;
  g:double;

begin

  //显示各个值是否正确
  //通道一
   memo1.Lines.Clear;
    for i:=0 to m1-1 do
     begin

⌨️ 快捷键说明

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