📄 unit1.~pas
字号:
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 + -