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

📄 unit1.pas

📁 单片机编程的一款好软件
💻 PAS
📖 第 1 页 / 共 2 页
字号:
     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 + -