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

📄 uautocode.pas

📁 单片机
💻 PAS
📖 第 1 页 / 共 3 页
字号:
{
  Project:  AVR Universal Bootloader Download
  File:     uAutoCode.pas
  Describe: Show autocode dialog, auto make bootcfg.h file
  Author:   Shaoziyang
  Date:     2007.6
  Version:  3.0
  Web:      http://shaoziyang.googlepages.com
        or  http://shaoziyang.bloger.com.cn (Chinese)
  Email:    shaoziyang@gmail.com
}

unit uAutoCode;

interface

uses
  Windows,
  Messages,
  SysUtils,
  Classes,
  Graphics,
  Controls,
  Forms,
  Dialogs,
  ExtCtrls,
  StdCtrls,
  Buttons,
  ShellAPI,
  CPortCtl;

type
  TfrmAutoCode = class(TForm)
    btnCancel: TBitBtn;
    btnHypertrm: TBitBtn;
    btnMake: TBitBtn;
    btnRecommand: TBitBtn;
    btnRecover: TBitBtn;
    btnSmallest: TBitBtn;
    cbbCportBaudRate: TComComboBox;
    cbbBootCnt: TComboBox;
    cbbBootLevel: TComboBox;
    cbbBootMode: TComboBox;
    cbbBootStart: TComboBox;
    cbbBufferSize: TComboBox;
    cbbComPortNo: TComboBox;
    cbbCRC: TComboBox;
    cbbFCPU: TComboBox;
    cbbFileCnt: TComboBox;
    cbbInitDelay: TComboBox;
    cbbPINLED: TComboBox;
    cbbPINLevel: TComboBox;
    cbbPINRS485: TComboBox;
    cbbPortLED: TComboBox;
    cbbPortLevel: TComboBox;
    cbbPortRS485: TComboBox;
    cbbTimeClk: TComboBox;
    chkChipCheck: TCheckBox;
    chkLED: TCheckBox;
    chkRS485En: TCheckBox;
    chkVerbose: TCheckBox;
    chkWDG: TCheckBox;
    edtKeyHEX: TEdit;
    GroupBox1: TGroupBox;
    GroupBox2: TGroupBox;
    GroupBox3: TGroupBox;
    imgDragon: TImage;
    imgLED: TImage;
    lbBauRate: TLabel;
    lbBOOTLEVEL: TLabel;
    lbBOOTPIN: TLabel;
    lbBOOTPORT: TLabel;
    lbBootStart: TLabel;
    lbBUFFERSIZE: TLabel;
    lbchecksum: TLabel;
    lbComPortNo: TLabel;
    lbFCPU: TLabel;
    lbInitDelay: TLabel;
    lbKEY: TLabel;
    lbLEDEn: TLabel;
    lbLEDPIN: TLabel;
    lbLEDPORT: TLabel;
    lbLEVELMODE: TLabel;
    lbRS485En: TLabel;
    lbRS485PIN: TLabel;
    lbRS485PORT: TLabel;
    lbtimeclk: TLabel;
    lbTimeOutCnt: TLabel;
    lbTimeOutCntC: TLabel;
    Panel1: TPanel;
    Panel2: TPanel;
    Panel3: TPanel;
    Timer: TTimer;
    tmrErr: TTimer;
    cbbBaudRate: TComboBox;
    dlgSave: TSaveDialog;
    Panel4: TPanel;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    cbbMCU: TComboBox;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    cbbByteWord: TComboBox;
    btnReload: TSpeedButton;
    procedure chkLEDClick(Sender: TObject);
    procedure edtKeyHEXChange(Sender: TObject);
    procedure edtKeyHEXClick(Sender: TObject);
    procedure FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    procedure lbLEDEnClick(Sender: TObject);
    procedure lbRS485EnClick(Sender: TObject);
    procedure TimerTimer(Sender: TObject);
    procedure btnRecommandClick(Sender: TObject);
    procedure btnHypertrmClick(Sender: TObject);
    procedure btnSmallestClick(Sender: TObject);
    procedure btnMakeClick(Sender: TObject);
    procedure tmrErrTimer(Sender: TObject);
    procedure dlgSaveShow(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure cbbByteWordChange(Sender: TObject);
    procedure cbbMCUChange(Sender: TObject);
  private
    { Private declarations }
    Idle: Boolean;
    procedure setedtErr(edt: TEdit);
    procedure setcbbErr(cbb: TComboBox);
  public
    { Public declarations }
    function getAVRType: Integer;
  end;

var
  frmAutoCode: TfrmAutoCode;
  cbbErr: TComboBox;
  edtErr: TEdit;

implementation

uses
  uMain;

{$R *.DFM}

procedure TfrmAutoCode.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  //释放鼠标事件的对象
  ReleaseCapture;
  PostMessage(handle, wm_SysCommand, $F012, 0);
end;

procedure TfrmAutoCode.TimerTimer(Sender: TObject);
begin
  imgLED.Visible := not imgLED.Visible;
end;

procedure TfrmAutoCode.chkLEDClick(Sender: TObject);
begin
  try
    Timer.Interval := StrToInt(cbbTimeClk.Text);
  except
    Timer.Interval := 200;
  end;
  Timer.Enabled := chkLED.Checked;
  imgLED.Visible := chkLED.Checked;
end;

procedure TfrmAutoCode.lbRS485EnClick(Sender: TObject);
begin
  chkRS485En.Checked := not chkRS485En.Checked;
end;

procedure TfrmAutoCode.lbLEDEnClick(Sender: TObject);
begin
  chkLED.Checked := not chkLED.Checked;
  chkLEDClick(Sender);
end;

procedure TfrmAutoCode.edtKeyHEXChange(Sender: TObject);
begin
  if Sender is TEdit then
  begin
    if (Length(TEdit(Sender).Text) mod 3) = 0 then
    begin
      edtKeyHEXClick(Sender);
      PostMessage(TEdit(Sender).handle, WM_KEYDOWN, VK_END, 0);
    end;
  end;
end;

procedure TfrmAutoCode.edtKeyHEXClick(Sender: TObject);
var
  buf: CBuf;
begin
  if not (Sender is TEdit) then
    Exit;

  TEdit(Sender).Text := FormatHexStr(TEdit(Sender).Text, buf);
end;

procedure TfrmAutoCode.btnRecommandClick(Sender: TObject);
begin
  chkVerbose.Checked := False;
  chkWDG.Checked := True;
  chkChipCheck.Checked := True;
  edtKeyHEX.Text := '64 0E 1C 39 14 28 57 AA';
  cbbTimeClk.Text := '200';
  cbbBootCnt.Text := '5';
  cbbFileCnt.Text := '20';
  cbbBootMode.ItemIndex := 0;
  chkLED.Checked := True;
  cbbBufferSize.Text := '128';
  chkLED.Checked := True;
  cbbCRC.ItemIndex := 0;
end;

procedure TfrmAutoCode.btnHypertrmClick(Sender: TObject);
begin
  chkVerbose.Checked := True;
  chkLED.Checked := True;
  edtKeyHEX.Text := '64';
  cbbBufferSize.Text := '128';
  cbbTimeClk.Text := '500';
  cbbBootCnt.Text := '10';
  cbbFileCnt.Text := '100';
  cbbBootMode.ItemIndex := 0;
  cbbCRC.ItemIndex := 0;
end;

procedure TfrmAutoCode.btnSmallestClick(Sender: TObject);
begin
  chkRS485En.Checked := False;
  chkLED.Checked := False;
  cbbInitDelay.Text := '0';
  cbbBootMode.ItemIndex := 1;
  chkChipCheck.Checked := False;
  chkWDG.Checked := False;
  chkVerbose.Checked := False;
  cbbCRC.ItemIndex := 1;
end;

//

procedure TfrmAutoCode.dlgSaveShow(Sender: TObject);
begin
  HWD := FindWindow(nil, PChar(dlgSave.Title));
  frmMain.clrSmart;
end;

procedure TfrmAutoCode.btnMakeClick(Sender: TObject);
var
  f: TextFile;
  buf: CBuf;
  i: Integer;
  t: Double;
  b: Boolean;
  msg: string;
begin
  if Idle = False then
    Exit;
  try
    Idle := False;
    edtKeyHEXClick(Sender);

    if (cbbMCU.Text = '') or (StrLIComp(PChar(cbbMCU.Text), PChar('at'), 2) <> 0) then
    begin
      Application.MessageBox(PChar(lang.msgError + ': MCU'), PChar(lang.msgError), MB_OK + MB_ICONSTOP);
      setcbbErr(cbbMCU);
      Exit;
    end;

    //check value range
    if edtKeyHEX.Text = '' then
    begin
      Application.MessageBox(PChar(lang.msgError + ': KEY[]'), PChar(lang.msgError), MB_OK + MB_ICONSTOP);
      setedtErr(edtKeyHEX);
      Exit;
    end;

    try
      btnMake.Tag := StrToInt(cbbFCPU.Text);
    except
      Application.MessageBox(PChar(lang.msgError + ': F_CPU'), PChar(lang.msgError), MB_OK + MB_ICONSTOP);
      setcbbErr(cbbFCPU);
      Exit;
    end;

    try
      btnMake.Tag := StrToInt(cbbBufferSize.Text);
    except
      Application.MessageBox(PChar(lang.msgError + ': BUFFERSIZE'), PChar(lang.msgError), MB_OK + MB_ICONSTOP);
      setcbbErr(cbbBufferSize);
      Exit;
    end;

    try
      btnMake.Tag := StrToInt(cbbTimeClk.Text);
    except
      Application.MessageBox(PChar(lang.msgError + ': timeclk'), PChar(lang.msgError), MB_OK + MB_ICONSTOP);
      setcbbErr(cbbTimeClk);
      Exit;
    end;

    try
      btnMake.Tag := StrToInt(cbbBootCnt.Text);
    except
      Application.MessageBox(PChar(lang.msgError + ': TimeOutCnt'), PChar(lang.msgError), MB_OK + MB_ICONSTOP);
      setcbbErr(cbbBootCnt);
      Exit;
    end;

    try
      btnMake.Tag := StrToInt(cbbFileCnt.Text);
    except
      Application.MessageBox(PChar(lang.msgError + ': TimeOutCntC'), PChar(lang.msgError), MB_OK + MB_ICONSTOP);
      setcbbErr(cbbFileCnt);
      Exit;
    end;

    try
      btnMake.Tag := StrToInt(cbbInitDelay.Text);
    except
      Application.MessageBox(PChar(lang.msgError + ': InitDelay'), PChar(lang.msgError), MB_OK + MB_ICONSTOP);
      setcbbErr(cbbInitDelay);
      Exit;
    end;

    try
      btnMake.Tag := StrToInt(cbbBootStart.Text);
    except
      Application.MessageBox(PChar(lang.msgError + ': BootStart'), PChar(lang.msgError), MB_OK + MB_ICONSTOP);

⌨️ 快捷键说明

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