procedure TSG_Form.SpeedButton1Click(Sender: TObject);
begin
  CurrentSGWave := (Sender as TSpeedButton).Tag;
  SetupWavePara_Btn.Enabled := True;  ReDraw_timer.Enabled := False;
  if (CurrentSGWave = 0) or (CurrentSGWave = 6) or (CurrentSGWave = 7) then
  begin
    SetupWavePara_Btn.Enabled := False;
    ReDraw_timer.Enabled := True;
  end;
  if SGSendWave then
  begin
    DownLoad;
    DrawWave(Wave_Pic);
  end
  else
    DrawWave(Wave_Pic);
end;procedure TSG_Form.TrigerType_CBChange(Sender: TObject);
begin
  case TrigerType_CB.ItemIndex of
    0: SGSetConByte := SGSetConByte and $fb;     // 1111 1011   内触发
    1: SGSetConByte := SGSetConByte or $06;      // 0000 0110   外触发上升沿
    2: begin
         SGSetConByte := SGSetConByte or $04;
         SGSetConByte := SGSetConByte and $fd;   // 1111 1101   外触发下降沿
       end;
  end;
  SetCON(SGSetConByte, 0);
end;procedure TSG_Form.Frequency_EditExit(Sender: TObject);
begin
  try
    SGFrequency := StrToFloat(Frequency_Edit.Text);
    if SGSendWave then
    begin
      DownLoad;
      DrawWave(Wave_Pic);
    end
    else
      DrawWave(Wave_Pic);
  except
    Frequency_Edit.SetFocus;
    Frequency_Edit.Text := FloatToStr(SGFrequency);
    Application.MessageBox('请输入正确的频率!', '输入错误', MB_OK + MB_ICONERROR);
  end;
end;procedure TSG_Form.Frequency_EditKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if key = 13 then (Sender as TEdit).OnExit(Sender);
end;procedure TSG_Form.Amplitude_EditExit(Sender: TObject);
begin
  try
    SGAmplitude := StrToFloat(Amplitude_Edit.Text);
    if SGSendWave then
    begin
      DownLoad;
      DrawWave(Wave_Pic);
    end
    else
      DrawWave(Wave_Pic);
  except
    Amplitude_Edit.SetFocus;
    Amplitude_Edit.Text := FloatToStr(SGAmplitude);
    Application.MessageBox('请输入正确的幅度!', '输入错误', MB_OK + MB_ICONERROR);
  end;
end;procedure TSG_Form.YOffset_EditExit(Sender: TObject);
begin
  try
    SGYOffset := StrToFloat(YOffset_Edit.Text);
    if SGSendWave then
    begin
      DownLoad;
      DrawWave(Wave_Pic);
    end
    else
      DrawWave(Wave_Pic);
  except
    YOffset_Edit.SetFocus;
    YOffset_Edit.Text := FloatToStr(SGYOffset);
    Application.MessageBox('请输入正确的Y轴偏移!', '输入错误', MB_OK + MB_ICONERROR);
  end;
end;procedure TSG_Form.SingleWave_RBClick(Sender: TObject);
begin
  if (Sender as TCheckBox).Checked then
    SGSetConByte := SGSetConByte or $01     //单波
  else
    SGSetConByte := SGSetConByte and $fe;   //多波
  SetCON(SGSetConByte, 0);
end;procedure TSG_Form.UpDown1Click(Sender: TObject; Button: TUDBtnType);
var
  i: integer;
begin
  if Button = btNext then
  begin
    try
      i := StrToInt(YOffset_Edit.Text);
      if i < 10000 then
        YOffset_Edit.Text := IntToStr(i + 1);
      YOffset_Edit.OnExit(YOffset_Edit);
    except
      YOffset_Edit.SetFocus;
      YOffset_Edit.Text := FloatToStr(SGYOffset);
      Application.MessageBox('请输入正确的Y轴偏移!', '输入错误', MB_OK + MB_ICONERROR);
    end;
  end;
  if Button = btPrev then
  begin
    try
      i := StrToInt(YOffset_Edit.Text);
      if i > -10000 then
        YOffset_Edit.Text := IntToStr(i - 1);
      YOffset_Edit.OnExit(YOffset_Edit);
    except
      YOffset_Edit.SetFocus;
      YOffset_Edit.Text := FloatToStr(SGYOffset);
      Application.MessageBox('请输入正确的Y轴偏移!', '输入错误', MB_OK + MB_ICONERROR);
    end;
  end;
end;procedure TSG_Form.Knob1Change(Sender: TObject);
var
  tpos, ttag: integer;
  r: real;
begin
  SGSendWave := false;
  tpos := (Sender as TKnob).Position;
  ttag := (Sender as TKnob).Tag;
  if tpos > ttag then
  begin
    try
      r := StrToFloat(Frequency_Edit.Text);
      if r < 12000000 then
        Frequency_Edit.Text := format('%8.0f', [r+1]);
    except
      Frequency_Edit.SetFocus;
      Frequency_Edit.Text := FloatToStr(SGFrequency);
      Application.MessageBox('请输入正确的频率!', '输入错误', MB_OK + MB_ICONERROR);
    end;
  end;
  if tpos < ttag then
  begin
    try
      r := StrToInt(Frequency_Edit.Text);
      if r > 1 then
        Frequency_Edit.Text := format('%8.0f', [r-1]);
    except
      Frequency_Edit.SetFocus;
      Frequency_Edit.Text := FloatToStr(SGFrequency);
      Application.MessageBox('请输入正确的频率!', '输入错误', MB_OK + MB_ICONERROR);
    end;
  end;
  (Sender as TKnob).Tag := (Sender as TKnob).Position;
end;procedure TSG_Form.Knob2Change(Sender: TObject);
var
  r: real;
  tpos, ttag: integer;
begin
  SGSendWave := false;
  tpos := (Sender as TKnob).Position;
  ttag := (Sender as TKnob).Tag;
  if tpos > ttag then
  begin
    try
      r := StrToFloat(Amplitude_Edit.Text);
      if r < 10.0 then
        Amplitude_Edit.Text := format('%2.3f', [r+0.007]);
    except
      Amplitude_Edit.SetFocus;
      Amplitude_Edit.Text := FloatToStr(SGAmplitude);
      Application.MessageBox('请输入正确的幅度!', '输入错误', MB_OK + MB_ICONERROR);
    end;
  end;
  if tpos < ttag then
  begin
    try
      r := StrToFloat(Amplitude_Edit.Text);
      if r > 0.007 then
        Amplitude_Edit.Text := format('%2.3f', [r-0.007]);
    except
      Amplitude_Edit.SetFocus;
      Amplitude_Edit.Text := FloatToStr(SGAmplitude);
      Application.MessageBox('请输入正确的幅度!', '输入错误', MB_OK + MB_ICONERROR);
    end;
  end;
  (Sender as TKnob).Tag := (Sender as TKnob).Position;
end;procedure TSG_Form.Knob2MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  SGSendWave := true;
  Amplitude_Edit.OnChange (Amplitude_Edit);
end;procedure TSG_Form.Knob1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  SGSendWave := true;
  Frequency_Edit.OnChange (Frequency_Edit);
end;end.