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

📄 unit1.~pas

📁 Philips ARM lpc2000家族ISP下载源码集成了串口调试助手源码是个非常优秀的软件
💻 ~PAS
📖 第 1 页 / 共 4 页
字号:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls, ExtCtrls, SPComm, Spin, MPlayer, Buttons,
  Grids, Registry;

type
  TForm1 = class(TForm)
    PageControl1: TPageControl;
    StatusBar1: TStatusBar;
    TabSheet1: TTabSheet;
    Panel1: TPanel;
    GroupBox1: TGroupBox;
    Label1: TLabel;
    Label2: TLabel;
    ComboBox1: TComboBox;
    ComboBox2: TComboBox;
    Label3: TLabel;
    ComboBox3: TComboBox;
    Label4: TLabel;
    ComboBox4: TComboBox;
    GroupBox2: TGroupBox;
    Comm1: TComm;
    CheckBox1: TCheckBox;
    CheckBox2: TCheckBox;
    RadioButton1: TRadioButton;
    RadioButton2: TRadioButton;
    GroupBox3: TGroupBox;
    CheckBox3: TCheckBox;
    Label5: TLabel;
    SpinEdit1: TSpinEdit;
    SpinEdit2: TSpinEdit;
    Label6: TLabel;
    Label8: TLabel;
    GroupBox4: TGroupBox;
    MediaPlayer1: TMediaPlayer;
    OpenDialog1: TOpenDialog;
    OpenDialog2: TOpenDialog;
    Edit1: TEdit;
    SpeedButton1: TSpeedButton;
    TabSheet2: TTabSheet;
    TabSheet3: TTabSheet;
    GroupBox5: TGroupBox;
    GroupBox6: TGroupBox;
    GroupBox7: TGroupBox;
    GroupBox8: TGroupBox;
    Memo2: TMemo;
    Memo1: TMemo;
    GroupBox11: TGroupBox;
    GroupBox12: TGroupBox;
    GroupBox13: TGroupBox;
    CheckBox4: TCheckBox;
    CheckBox5: TCheckBox;
    CheckBox6: TCheckBox;
    CheckBox7: TCheckBox;
    CheckBox8: TCheckBox;
    GroupBox14: TGroupBox;
    Label11: TLabel;
    ComboBox5: TComboBox;
    GroupBox15: TGroupBox;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    PageControl2: TPageControl;
    TabSheet4: TTabSheet;
    TabSheet5: TTabSheet;
    OpenDialog3: TOpenDialog;
    GroupBox16: TGroupBox;
    Label13: TLabel;
    ComboBox6: TComboBox;
    Label14: TLabel;
    ComboBox7: TComboBox;
    Label16: TLabel;
    ComboBox9: TComboBox;
    Label12: TLabel;
    ComboBox8: TComboBox;
    Label15: TLabel;
    Label17: TLabel;
    ComboBox10: TComboBox;
    Label18: TLabel;
    ComboBox11: TComboBox;
    Timer1: TTimer;
    TabSheet6: TTabSheet;
    StringGrid1: TStringGrid;
    Memo3: TMemo;
    Label7: TLabel;
    SpinEdit3: TSpinEdit;
    SpinEdit4: TSpinEdit;
    Label19: TLabel;
    StringGrid2: TStringGrid;
    ComboBox12: TComboBox;
    PageControl3: TPageControl;
    TabSheet7: TTabSheet;
    Label9: TLabel;
    CheckBox9: TCheckBox;
    Button1: TButton;
    Edit2: TEdit;
    TabSheet8: TTabSheet;
    Label10: TLabel;
    Label20: TLabel;
    Edit3: TEdit;
    Edit4: TEdit;
    CheckBox10: TCheckBox;
    Button2: TButton;
    CheckBox11: TCheckBox;
    Button7: TButton;
    TabSheet9: TTabSheet;
    Label21: TLabel;
    Label22: TLabel;
    Label23: TLabel;
    Edit5: TEdit;
    ComboBox13: TComboBox;
    Button8: TButton;
    TabSheet10: TTabSheet;
    StringGrid3: TStringGrid;
    Button9: TButton;
    Button10: TButton;
    Button11: TButton;
    CheckBox13: TCheckBox;
    Button12: TButton;
    Button13: TButton;
    CheckBox14: TCheckBox;
    Edit6: TEdit;
    ComboBox14: TComboBox;
    Label24: TLabel;
    TabSheet11: TTabSheet;
    Button14: TButton;
    Button15: TButton;
    CheckBox12: TCheckBox;
    CheckBox15: TCheckBox;
    CheckBox16: TCheckBox;
    Label25: TLabel;
    Edit7: TEdit;
    Button16: TButton;
    Label26: TLabel;
    Edit8: TEdit;
    CheckBox17: TCheckBox;
    CheckBox18: TCheckBox;
    CheckBox19: TCheckBox;
    GroupBox9: TGroupBox;
    Label27: TLabel;
    ComboBox15: TComboBox;
    Label28: TLabel;
    Button18: TButton;
    Button17: TButton;
    Button19: TButton;
    StringGrid4: TStringGrid;
    Button20: TButton;
    Edit9: TEdit;
    Edit10: TEdit;
    Button21: TButton;
    procedure SpeedButton1Click(Sender: TObject);
    procedure CheckBox3Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure CheckBox9Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure Button5Click(Sender: TObject);
//-----------------------------------------------------------------------------------------------------//
    procedure FMShellSetup;
    function FMExecSystemRegistry: String;
    function ReadRegistryString(RegString: String): String;
    procedure WriteRegistryString(RegString, str: String);
    function WinExecAndWait32(FileName: string; Visibility: Integer; var ShowString: string): Cardinal;
    function ReadIspStatus(FileName: string): string;
    function GetIspStartStr: string;
    function GetIspReadSecurityStr: string;
    function GetIspCtrlStr: string;
    function GetIspEraseStr: string;
    function GetIspReadRAMStr: string;
    function GetIspBlankCheckStr(Sector: Integer): string;
    function GetIspHexFileNameStr(FileName: string): string;
    function GetIspVerifyStr(FileName: string): string;
    function GetIspTimeoutsStr: string;
    function GetSectorNumber(Address: Integer): Integer;
    function GetSectorSize(Sector: Integer): Integer;
    function GetDeviceFlashSize(Device: string): Integer;
    function GetDeviceRAMSize(Device: string): Integer;
    function GetSectorTop(Sector: Integer): Integer;
    function GetSectorBottom(Sector: Integer): Integer;
    procedure ComboBox5Change(Sender: TObject);
    function GetStrCrc(str: string): Byte;
    function LoadHexFile(FileName: string): Integer;
    procedure SaveHexFile(FileName: string);
    function GetStringGridInteger(Address, Number: integer): DWord;
    function GetStringGridByte(Address: integer): Byte;
    function GetStringGridWord(Address: integer): Word;
    function GetStringGridDWord(Address: integer): DWord;
    procedure SetStringGridInteger(Address, val, Number: integer);
    procedure SetStringGridByte(Address: integer;val: Byte);
    procedure SetStringGridWord(Address: integer;val: Word);
    procedure SetStringGridDWord(Address: integer;val: DWord);
    procedure LoadDosMessage(buff: string);
    procedure SetCodeStr;
    procedure SetUserIDStr;
    procedure SetBlankCheckStr;
//-----------------------------------------------------------------------------------------------------//
    procedure CheckBox8Click(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure ComboBox12Change(Sender: TObject);
    procedure ComboBox1KeyPress(Sender: TObject; var Key: Char);
    procedure StringGrid1KeyPress(Sender: TObject; var Key: Char);
    procedure StringGrid1GetEditText(Sender: TObject; ACol, ARow: Integer;
      var Value: String);
    procedure CheckBox11Click(Sender: TObject);
    procedure Button8Click(Sender: TObject);
    procedure Button9Click(Sender: TObject);
    procedure Button11Click(Sender: TObject);
    procedure Button10Click(Sender: TObject);
    procedure Button12Click(Sender: TObject);
    procedure Button13Click(Sender: TObject);
    procedure Button14Click(Sender: TObject);
    procedure Button15Click(Sender: TObject);
    procedure Button7Click(Sender: TObject);
    procedure RadioButton1Click(Sender: TObject);
    procedure CheckBox1Click(Sender: TObject);
    procedure CheckBox2Click(Sender: TObject);
    procedure ComboBox1Change(Sender: TObject);
    procedure Button16Click(Sender: TObject);
    procedure Button19Click(Sender: TObject);
    procedure Button17Click(Sender: TObject);
    procedure Comm1ReceiveData(Sender: TObject; Buffer: PAnsiChar;
      BufferLength: Word);
    procedure Button20Click(Sender: TObject);
    procedure Button21Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    RxBuffers: String;
    RxBufferCount: Integer;
    TxCount, RxCount: Integer;
  end;

var
  Form1: TForm1;
  ShowModeSele: integer;
  StringGridACol, StringGridARow: integer;
implementation

{$R *.dfm}

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
  if OpenDialog2.Execute then
  begin
    Edit1.Text := OpenDialog2.FileName;
    MediaPlayer1.FileName := OpenDialog2.FileName;
    MediaPlayer1.Open;
  end;
end;

procedure TForm1.CheckBox3Click(Sender: TObject);
begin
  SpinEdit1.Enabled := CheckBox3.Checked;
  SpinEdit2.Enabled := CheckBox3.Checked;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if OpenDialog1.Execute then
  begin
    Edit2.Text := OpenDialog1.FileName;
  end;
end;

procedure TForm1.SetStringGridInteger(Address, val, Number: integer);
var
  i: Integer;
begin
  for i := 1 to Number do
  begin
    StringGrid1.Cells[(Address and $0f) + 1, (Address shr 4) + 1] := IntToHex((val and $ff), 2);
    val := val shr 8;
    Address := Address + 1;
  end;
end;

procedure TForm1.SetStringGridByte(Address: integer;val: Byte);
begin
  SetStringGridInteger(Address, val, 1);
end;

procedure TForm1.SetStringGridWord(Address: integer;val: Word);
begin
  SetStringGridInteger(Address, val, 2);
end;

procedure TForm1.SetStringGridDWord(Address: integer;val: DWord);
begin
  SetStringGridInteger(Address, val, 4);
end;


function TForm1.GetStringGridInteger(Address, Number: integer): DWord;
var
  str: String;
  i: Integer;
begin
  Address := Address + Number - 1;//小端
  Result := 0;
  for i := 1 to Number do
  begin
    str := StringGrid1.Cells[(Address and $0f) + 1, (Address shr 4) + 1];
    Result := (Result shl 8);
    if str <> '' then
    begin
      Result := Result + StrToInt('$' + str);
    end;
    Address := Address - 1;
  end;
end;

function TForm1.GetStringGridByte(Address: integer): Byte;
begin
  Result := GetStringGridInteger(Address, 1);
end;

function TForm1.GetStringGridWord(Address: integer): Word;
begin
  Result := GetStringGridInteger(Address, 2);
end;

function TForm1.GetStringGridDWord(Address: integer): DWord;
begin
  Result := GetStringGridInteger(Address, 4);
end;

procedure TForm1.Button7Click(Sender: TObject);
begin
  SaveHexFile(Edit3.Text);
end;


procedure TForm1.SaveHexFile(FileName: string);
var
  FileLen: Integer;
  HexFile: TextFile;
  str, s: String;
  i, k, n, address: Integer;
  crc: Byte;
begin
  if FileExists(FileName) then
  begin
    if Application.MessageBox('请您确认是否覆盖???', '系统提示:写入配置文件!!!', MB_YESNO) = IDNO then
      Exit;
    if Application.MessageBox('请您再次确认是否覆盖???', '系统提示:写入配置文件!!!', MB_YESNO) = IDNO then
      Exit;
  end;
  FileLen := StrToInt(Edit4.Text);//文件长度
  AssignFile(HexFile, FileName);
  ReWrite(HexFile);
  try
    Writeln(HexFile, ':0400000500000000F7');
    Writeln(HexFile, ':020000040000FA');

    for i := 1 to StringGrid1.RowCount - 1 do
    begin
      str := '';
      n := 0;
      for k := 1 to 16 do
      begin
        s := Trim(StringGrid1.Cells[k , i]);
        if s = '' then
          break;
        str := str + s;
        n := n + 1;
      end;
      if n = 0 then break;
      str := ':' + IntToHex(n, 2)
                 + IntToHex((i - 1) * 16, 4)
                 + '00'
                 + str;
      crc := GetStrCrc(str);
      crc := crc xor $ff;
      crc := crc + 1;
      str := str + intToHex(crc, 2);
      Writeln(HexFile, str);
    end;
    Writeln(HexFile, ':00000001FF');
  finally
    CloseFile(HexFile);
  end;
end;

function TForm1.GetStrCrc(str: string): Byte;
var
  crc: Byte;
  i, len: Integer;
  s: string;
begin
  len := Length(str);
  crc := 0;
  i := 2;
  while i < len do
  begin
    crc := crc + StrToInt('$' + Copy(str, i, 2));
    i := i + 2;
  end;
  Result := crc;
end;


function TForm1.LoadHexFile(FileName: string): Integer;
var
  FileLen: Integer;
  HexFile: TextFile;
  str, s: String;
  val: DWord;
  crcval, ch: Byte;
  i, n, k, len, col, row, address, command: Integer;
begin
  FileLen := 0;
  if FileExists(FileName) then
  begin
    StringGrid1.ColCount := 17;
    StringGrid1.RowCount := 2;
    StringGrid1.Row := 1;
    StringGrid1.Col := 1;
    AssignFile(HexFile, FileName);
    Reset(HexFile);
    while not Eof(HexFile) do
    begin
      Readln(HexFile, str);
      crcval := GetStrCrc(str);
      len := Length(str);
      if (crcval = 0) and (len >= 11) and (str[1] = ':') then//每行必须以':'
      begin
        command := StrToInt('$' + Copy(str, 8, 2));
        if command = 1 then
        begin
          Edit4.Text := IntToStr(FileLen + 1);
          val := GetStringGridDWord($1fc);
          if val = $87654321 then CheckBox8.Checked := True
          else if val <> $ffffffff then
          begin
            CheckBox8.Checked := false;
          end;
          if CheckBox10.Checked then//用户有效代码
          begin
            val := 0;
            for i := 0 to 7 do
            begin
              val := val + GetStringGridDWord(i * 4);
            end;
            if val <> 0 then
            begin
              val := GetStringGridDWord($14) - val;
              SetStringGridDWord($14, val);//???
            end;
          end;
          if (Edit5.Text <> '') and (Edit6.Text <> '') then
          begin
            SetUserIDStr();
          end;
          Break;//结束
        end;
        if command = 0 then//不理睬4,5
        begin
          n := StrToInt('$' + Copy(str, 2, 2));//每行个数
          FileLen := FileLen + n;
          address := StrToInt('$' + Copy(str, 4, 4));//每行起始地址
          row := address shr 4;
          col := address and $0f;//列
          StringGrid1.RowCount := row + 2;
          StringGrid1.Cells[0, row + 1] := '0x' + IntToHex(row shl 4, 4);
          k := 10;//去掉':'1个字节个数2个字节地址4个字节标志2个字节
          for i := 1 to n do//
          begin
            StringGrid1.Cells[col + 1, row + 1] := Copy(str, k, 2);
            k := k + 2;
            col := col + 1;
          end;
        end;
      end;
    end;

⌨️ 快捷键说明

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