📄 unit1.pas
字号:
end;
stringgrid1.RowCount :=x+1; //地址从0开始,且表头占一行,所以 +2
end;
end;
//if radiobutton1.Checked then s:='00' else s:='FF'; for i:=1 to x do for j:=1 to 16 do begin LL:=LL+1; if StringGrid1.Cells[j,i]='' then StringGrid1.Cells[j,i]:=s; 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; //地址从0开始,个数从1开始,所以大1。 sz:=format('%x',[LL]); sz:=copy(s,1,4-length(sz))+sz;
file1.Free; //总共有x+1行,最后一行有nk个,起点是y , (即LL+y是首地址)。
end;
end;
procedure TForm1.SpeedButton6Click(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 // bufa:='';
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 TForm1.SpeedButton3Click(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.StepIt;
progressbar1.Position:=0 ;
case RadioGroup1.ItemIndex of
0: begin s:=char($17); end; //2051 //字节数由装放文件定
1: begin s:=char($15); end; //89c51 if checkbox1.Checked then sz:='1fff'
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 TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer; BufferLength: Word);
var s,d:string ; i:integer; cp:bool; // rbuf:array[1..2] of byte;
begin
setlength(s,bufferlength); cp:=true;
move(buffer^,pchar(s)^,bufferlength); //有就移,^取数据,@取地址.//move(buffer^,pchar(@rbuf)^,bufferlength);
if read then begin //读操作 单片机一次发多少都行<500。
for i:=1 to bufferlength do begin //v:=format('%x',[byte(s[i])]); v:=inttohex(rbuf[i],2);//2是取两位,前面补0
if comp then begin if stringGrid1.Cells[ja,ia]<>inttohex(byte(s[i]),2)then begin cp:=false; showmessage('comp error!'); break;end; end else
stringGrid1.Cells[ja,ia]:=inttohex(byte(s[i]),2);
ja:=ja+1; if ja=17 then begin ja:=1; ia:=ia+1 end;
end;
progressbar1.StepIt; edit1.Text:='当前地址:'+inttohex(ia-1,3)+inttohex(ja-1,1);
if cp then s:=char($6A) else s:=char($6B); comm1.WriteCommData(pchar(s),1); //读操作,请求新的发送, $6A是个任意的数
w:=w-256; if w=0 then begin if comp then showmessage(' comp ok !')else showmessage(' readed ok ! '); progressbar1.Position:=0 end;
end else //写操作
case byte(s[1]) of // if byte(s[1])=$5A then begin
$5A:begin d:=char(strtoint('$'+sz[1]+sz[2])); comm1.WriteCommData(pchar(d),1); end; //高位
$5B:begin d:=char(strtoint('$'+sz[3]+sz[4])); comm1.WriteCommData(pchar(d),1); end; //低位
$5C:begin
for i:=1 to 16 do begin d:=stringgrid1.Cells[ja,ia];
if d='' then d:=char($FF) else d:=char(strtoint('$'+d)); //读出是空写'FF'
comm1.WriteCommData(pchar(d),1); ja:=ja+1; if ja=17 then begin ja:=1; ia:=ia+1 end; //发送
end; progressbar1.StepIt; edit1.Text:='当前地址:'+inttohex(ia-1,3)+inttohex(ja-1,1);
end;
$5D:begin showmessage(' OK ! '); progressbar1.Position:=0 ; end;
$5E: showmessage(' Error ! ');
end;
end;
procedure TForm1.SpeedButton1Click(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 if checkbox1.Checked then sz:='1fff' else sz:='0fff' end
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.StepIt;
progressbar1.Position:=0 ;
end;
procedure TForm1.SpeedButton4Click(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 if checkbox1.Checked then sz:='1fff' else sz:='0fff' end
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.StepIt;
progressbar1.Position:=0 ;
end;
procedure TForm1.SpeedButton2Click(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 TForm1.BitBtn2Click(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 TForm1.StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean);
begin
//StatusBar1.Panels[2].Text:=format(' 单元格的地址坐标:[%s,%x]',[StringGrid1.Cells[0, ARow], ACol-1]);
StatusBar1.Panels[1].Text:=' 当前单元地址:'+inttohex(ARow-1,3)+inttohex(ACol-1,1);
progressbar1.Position:=0 ;
end;
procedure TForm1.SpeedButton8Click(Sender: TObject); // <退出>按钮处理事件(程序退出)
begin
COMM1.StopComm;
myini.Writeinteger('芯片选择','型号',radiogroup1.ItemIndex);
myini.Writeinteger('文件格式','类型',radiogroup2.ItemIndex);
form1.Close; // Application.Terminate;
end;
procedure TForm1.SpeedButton5Click(Sender: TObject); //帮助
begin form2.Show; end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -