📄 main.pas
字号:
n:=n+9;
xa:=x;
for i:=0 to nk-1 do
begin
yi:=y+i;
if yi+1>16 then begin yi:=yi-16; xa:=x+1; end;
StringGrid1.Cells[yi+1,xa+1]:=buf[n+2*i]+buf[n+2*i+1];
end;
n:=n+2*nk+4;
if buf[n+1]+buf[n+2]='00' then Break;
end;
Stringgrid1.RowCount :=xa+2;
end ;
0: begin
x:=0; y:=0;
N13.Enabled :=False; ToolButton6.Enabled:=False;
while n<file1.Size do
begin
if buf[n]=':' then
if buf[n+1]='1' then nk:=16
else nk:=StrToInt('$'+(buf[n+2]));
x:=x+1;
Stringgrid1.Cells[0,x]:=buf[n+3]+buf[n+4]+buf[n+5]+buf[n+6];
n:=n+9;
for i:=0 to nk-1 do
StringGrid1.Cells[y+1+i,x]:=buf[n+2*i]+buf[n+2*i+1] ;
n:=n+2*nk+4;
end;
Stringgrid1.RowCount :=x+2;
end;
2: begin
x:=0;
while n<file1.Size do
begin
x:=x+1; nk:=15;
if file1.Size-n<15 then nk:=file1.Size-n ;
for i:=0 to nk do
StringGrid1.Cells[i+1,x]:=IntToHex(Word(buf[n+i]),2);
n:=n+16;
end;
Stringgrid1.RowCount :=x+1;
end;
3: begin
x:=0;
while n<file1.Size do
begin
x:=x+1; nk:=15;
if file1.Size-n<15 then nk:=file1.Size-n ;
for i:=0 to nk do
StringGrid1.Cells[i+1,x]:=buf[n+2*i]+buf[n+2*i+1] ;
n:=n+32;
end;
Stringgrid1.RowCount :=x+1;
end;
4: begin
x:=StrToInt('$'+buf[1]+buf[2]+buf[3]);
y:=StrToInt('$'+(buf[4]));
m:=StrToInt('$'+buf[5]+buf[6]+buf[7]+buf[8]);
for i:=1 to 2*m do buf[i]:=buf[i+8];
while n<m do
begin ;
x:=x+1; nk:=15;
if m-n<15 then nk:=m-n ;
for i:=0 to nk do
StringGrid1.Cells[i+1,x]:=buf[n+2*i]+buf[n+2*i+1] ;
n:=n+32;
end;
Stringgrid1.RowCount :=x+1;
end;
end;
LL:=x*16;
LL:=LL+y+nk;
if (LL mod 16)<>0 then LL:=(LL div 16)*16+16;
sz:=IntToHex(LL,4);
Edit1.Text :='装入字节数: '+sz;
file1.Free;
end;
end;
{------------------------------------------------------------------------------}
procedure TF_Main.N3Click(Sender: TObject); // <保存>菜单处理事件
var
i,j:Integer;
bufa:array[0..2]of Char;
begin
if SaveDialog1.Execute then
begin
file2:=TFilestream.Create(SaveDialog1.FileName, fmopenwrite or fmcreate);
for i:=1 to StringGrid1.RowCount-1 do
for j:=1 to 16 do
begin
if StringGrid1.Cells[j,i]<>'' then
Strpcopy(bufa,StringGrid1.Cells[j,i])
else bufa:=' ';
if Radiogroup2.ItemIndex=2 then
begin
bufa[0]:=Char(StrToInt('$'+bufa[0]+bufa[1]));
file2.Write(bufa,1)
end
else file2.Write(bufa,2);
end;
end;
file2.Free ;
end;
{------------------------------------------------------------------------------}
procedure TF_Main.N5Click(Sender: TObject); // <退出>菜单处理事件
begin
COMM1.StopComm;
myini.Writeinteger('芯片选择','型号',Radiogroup1.ItemIndex);
myini.Writeinteger('文件格式','类型',Radiogroup2.ItemIndex);
Application.Terminate;
end;
{------------------------------------------------------------------------------}
{--------------------------------- 操作菜单 ----------------------------------}
procedure TF_Main.N7Click(Sender: TObject); // <清空程序存储器>菜单处理事件
var
i,j:Integer;
begin
for i:=1 to StringGrid1.RowCount do
for j:=1 to 17 do
if Radiobutton1.Checked then StringGrid1.Cells[j,i]:='FF'
else StringGrid1.Cells[j,i]:='00';
end;
{------------------------------------------------------------------------------}
procedure TF_Main.E1Click(Sender: TObject); // <擦除芯片>菜单处理事件
begin
Read:=False; s:=Char($88);
case RadioGroup1.ItemIndex of
0: s:=Char($27); //2051
1: s:=Char($25); //89c51
2: s:=Char($25); //89c52
3: s:=Char($24); //89s51
4: s:=Char($24); //89s52
5: s:=Char($24); //89s53
end;
Comm1.WriteCommData(pchar(s),1);
end;
{------------------------------------------------------------------------------}
procedure TF_Main.N8Click(Sender: TObject); // <读取芯片>菜单处理事件
begin
Comp:=False;
Read:=True; ja:=1; ia:=1;
case RadioGroup1.ItemIndex of
0: begin s:=Char($07); sz:='0800' end; //2051
1: begin s:=Char($05); sz:='1000' end; //89c51
2: begin s:=Char($06); sz:='2000' end; //89c52
3: begin s:=Char($05); sz:='1000' end; //89s51
4: begin s:=Char($06); sz:='2000' end; //89s52
5: begin s:=Char($08); sz:='4000' end; //89s53
6: begin s:=Char($01); sz:='2000' end; //2764
7: begin s:=Char($01); sz:='2000' end; //2864
8: begin s:=Char($03); sz:='2000' end; //new
9: begin s:=Char($09); sz:='2000' end; //new1
end;
LL:= StrToInt('$'+sz); w:=LL;
Comm1.WriteCommData(pchar(s),1); //发出控制码
Progressbar1.Min :=0; //最小值
Progressbar1.Max :=LL; //最大值
Progressbar1.step:=256; //步进
Progressbar1.Position:=0 ;
end;
{------------------------------------------------------------------------------}
procedure TF_Main.N13Click(Sender: TObject); // <写入芯片>菜单处理事件
begin
Read:=false; ia:=1; ja:=1;
if Stringgrid1.Cells[1,1]='' then Showmessage('没有装入数据。')
else
begin
Progressbar1.Min :=0; //最小值
Progressbar1.Max :=LL; //最大值
Progressbar1.step:=16; //步进
Progressbar1.Position:=0 ;
case RadioGroup1.ItemIndex of
0: begin s:=Char($17); end; //2051
1: begin s:=Char($15); end; //89c51
2: begin s:=Char($15); end; //89c52
3: begin s:=Char($14); end; //89s51
4: begin s:=Char($14); end; //89s52
5: begin s:=Char($18); end; //89s53
6: begin s:=Char($12); end; //2864
7: begin s:=Char($11); end; //2764
8: begin s:=Char($13); end; //new
9: begin s:=Char($19); end; //new1
end;
Comm1.WriteCommData(pchar(s),1);
end ;
end;
{------------------------------------------------------------------------------}
procedure TF_Main.N9Click(Sender: TObject); // <开始校验>菜单处理事件
begin
Comp:=True;
Read:=True; ja:=1; ia:=1;
case RadioGroup1.ItemIndex of
0: begin s:=Char($07); sz:='0800' end; //2051
1: begin s:=Char($05); sz:='1000' end; //89c51
2: begin s:=Char($06); sz:='2000' end; //89c52
3: begin s:=Char($05); sz:='1000' end; //89s51
4: begin s:=Char($06); sz:='2000' end; //89s52
5: begin s:=Char($08); sz:='4000' end; //89s53
6: begin s:=Char($01); sz:='2000' end; //2764
7: begin s:=Char($01); sz:='2000' end; //2864
8: begin s:=Char($03); sz:='2000' end; //new 新开发的芯片 ???
9: begin s:=Char($09); sz:='2000' end; //new1 ???
end;
LL:= StrToInt('$'+sz); w:=LL;
Comm1.WriteCommData(pchar(s),1); //发出控制码
Progressbar1.Min :=0; //最小值
Progressbar1.Max :=LL; //最大值
Progressbar1.step:=256; //步进
Progressbar1.Position:=0 ;
end;
{------------------------------------------------------------------------------}
{--------------------------------- 帮助菜单 ----------------------------------}
procedure TF_Main.H1Click(Sender: TObject); // <帮助>菜单处理事件
begin F_Help.ShowModal; end; // 显示帮助对话框
{------------------------------------------------------------------------------}
procedure TF_Main.A1Click(Sender: TObject); // <关于>菜单处理事件
begin F_About.ShowModal; end; // 显示关于对话框
{------------------------------------------------------------------------------}
{==============================================================================}
/////////////////////////////////// 程序结束 ///////////////////////////////////
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -