uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, VIPUB, SG, StdCtrls, Buttons, ComCtrls,
  G_SetupDlg, T_SetupDlg, E_SetupDlg, F_SetupDlg, Knob;type
  TSG_Form = class(TForm)
    Panel1: TPanel;
    Panel2: TPanel;
    Wave_Pic: TImage;
    WaveNum_SB: TScrollBar;
    Start_btn: TSpeedButton;
    ReDraw_timer: TTimer;
    WavePure_ChB: TCheckBox;
    Sub20DB_ChB: TCheckBox;
    FilterOpt_CB: TComboBox;
    Panel4: TPanel;
    SpeedButton1: TSpeedButton;
    SpeedButton2: TSpeedButton;
    SpeedButton3: TSpeedButton;
    SpeedButton4: TSpeedButton;
    SpeedButton5: TSpeedButton;
    SpeedButton6: TSpeedButton;
    SpeedButton7: TSpeedButton;
    SpeedButton8: TSpeedButton;
    TrigerType_CB: TComboBox;
    Label2: TLabel;
    SpeedButton10: TSpeedButton;
    Frequency_Edit: TEdit;
    Amplitude_Edit: TEdit;
    YOffset_Edit: TEdit;
    SetupWavePara_Btn: TSpeedButton;
    Label1: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    SingleWave_RB: TCheckBox;
    Knob1: TKnob;
    Image1: TImage;
    Knob2: TKnob;
    Image2: TImage;
    UpDown1: TUpDown;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure WaveNum_SBChange(Sender: TObject);
    procedure Start_btnClick(Sender: TObject);
    procedure ReDraw_timerTimer(Sender: TObject);
    procedure BClick(Sender: TObject);
    procedure Sub20DB_ChBClick(Sender: TObject);
    procedure FilterOpt_CBChange(Sender: TObject);
    procedure SetupWavePara_BtnClick(Sender: TObject);
    procedure SpeedButton1Click(Sender: TObject);
    procedure TrigerType_CBChange(Sender: TObject);
    procedure Frequency_EditExit(Sender: TObject);
    procedure Frequency_EditKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure Amplitude_EditExit(Sender: TObject);
    procedure YOffset_EditExit(Sender: TObject);
    procedure SingleWave_RBClick(Sender: TObject);
    procedure UpDown1Click(Sender: TObject; Button: TUDBtnType);
    procedure Knob1Change(Sender: TObject);
    procedure Knob2Change(Sender: TObject);
    procedure Knob2MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Knob1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    { Private declarations }
    procedure SGCreate(Pn: TPanel);
  public
    { Public declarations }
  end;var
  SG_Form: TSG_Form;implementation{$R *.dfm}procedure TSG_Form.SGCreate(Pn: TPanel);
begin
  InitSG;
  Frequency_Edit.Text := FloatToStr(SGFrequency);
Amplitude_Edit.Text := FloatToStr(SGAmplitude);
  YOffset_Edit.Text := FloatToStr(SGYOffset);
  WaveNum_SB.Position := SGWaveNum;
  DrawWave(Wave_Pic);
end;procedure TSG_Form.FormCreate(Sender: TObject);
begin
  SGCreate(panel1);
end;procedure TSG_Form.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caHide;
  DeviceStates[SGID].Showed := False;
end;procedure TSG_Form.WaveNum_SBChange(Sender: TObject);
begin
  SGWaveNum := WaveNum_SB.Position;
  if SGSendWave then
  begin
    DownLoad;
    DrawWave(Wave_Pic);
  end
  else
    DrawWave(Wave_Pic);
  WaveNum_SB.Hint := IntToStr(SGWaveNum) + '个周期波形';
end;procedure TSG_Form.Start_btnClick(Sender: TObject);
begin
  SGSetRelayByte := SGSetRelayByte and $f3;
  if not SGSendWave then
  begin
    SGSetConByte := SGSetConByte and $ef;
    SetCON(SGSetConByte, 0);
    SGSetRelayByte := SGSetRelayByte or $08;
    SGSendWave := True;
    SetRelay(SGSetRelayByte, 0);
    DownLoad;
    DrawWave(Wave_Pic);
    Start_Btn.Caption := '关闭';
  end
  else
  begin
    SGSetConByte := SGSetConByte or $10;
    SetCON(SGSetConByte, 0);
    SGSetRelayByte := SGSetRelayByte or $04;
    SGSendWave := False;
    SetRelay(SGSetRelayByte, 0);
    Start_Btn.Caption := '输出';
  end;
end;procedure TSG_Form.ReDraw_timerTimer(Sender: TObject);
begin
  DrawWave(Wave_Pic);
end;procedure TSG_Form.BClick(Sender: TObject);
begin
  SGWavePure := WavePure_ChB.Checked;
  if SGSendWave then
  begin
    DownLoad;
    DrawWave(Wave_Pic);
  end
  else
    DrawWave(Wave_Pic);
end;procedure TSG_Form.Sub20DB_ChBClick(Sender: TObject);
begin
  SGSetRelayByte := SGSetRelayByte and $cf;
  if Sub20DB_ChB.Checked then
    SGSetRelayByte := SGSetRelayByte or $20
  else
    SGSetRelayByte := SGSetRelayByte or $10;
  SetRelay(SGSetRelayByte, 0);
end;procedure TSG_Form.FilterOpt_CBChange(Sender: TObject);
begin
  SGFilter := FilterOpt_CB.ItemIndex;
  if SGFilter = 1 then SGFilter := 2
  else if SGFilter = 2 then SGFilter := 1;
  SetFir(SGFilter, 0);
  if SGFilter < 4 then
  begin
    SGSetRelayByte := SGSetRelayByte and $fc;     // 1111 1100
    SGSetRelayByte := SGSetRelayByte or $01;
    SetRelay(SGSetRelayByte,0);
  end
  else
  begin
    SGSetRelayByte := SGSetRelayByte and $fc;     // 1111 1100
    SGSetRelayByte := SGSetRelayByte or $02;
  SetRelay(SGSetRelayByte,0);
  end;
end;