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

📄 serial.pas

📁 该串口调试助手
💻 PAS
字号:
unit serial;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, ComCtrls, ImgList, OleCtrls, MSCommLib_TLB,
  SPComm;

type
  TForm1 = class(TForm)
  //Pchar =^char;
    Panel1: TPanel;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    ComboBox2: TComboBox;
    ComboBox3: TComboBox;
    ComboBox4: TComboBox;
    ComboBox5: TComboBox;
    Panel5: TPanel;
    ComboBox1: TComboBox;
    CheckBox1: TCheckBox;
    CheckBox2: TCheckBox;
    Panel6: TPanel;
    Panel9: TPanel;
    CheckBox3: TCheckBox;
    CheckBox4: TCheckBox;
    Edit1: TEdit;
    Label6: TLabel;
    Label7: TLabel;
    StatusBar1: TStatusBar;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    Button7: TButton;
    button8: TButton;
    Panel2: TPanel;
    Button1: TButton;
    Panel3: TPanel;
    Panel4: TPanel;
    Button9: TButton;
    Panel7: TPanel;
    Button10: TButton;
    Button11: TButton;
    Image1: TImage;
    Comm1: TComm;
    Memo1: TMemo;
    Memo2: TMemo;
    OpenDialog1: TOpenDialog;
    SaveDialog1: TSaveDialog;
    Timer1: TTimer;
    Button2: TButton;
    Image2: TImage;
    procedure button8Click(Sender: TObject);
    procedure ComboBox1Change(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button10Click(Sender: TObject);
    procedure ComboBox2Change(Sender: TObject);
    procedure ComboBox3Change(Sender: TObject);
    procedure ComboBox4Change(Sender: TObject);
    procedure ComboBox5Change(Sender: TObject);
    procedure Button7Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button9Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Memo1Change(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button11Click(Sender: TObject);
    procedure sendstring(const str:string);
    procedure Edit1Change(Sender: TObject);
    procedure CheckBox4Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure SendFile(const filename: string);
    procedure Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
      BufferLength: Word);
  private
    { Private declarations }
    FShowText:Boolean;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  SBUFF,viewstring:string;
  txlen,rxlen:integer;
  receivedata:array of byte;
  rbuf,sbuf:array[1..6] of byte;
implementation

{$R *.dfm}

procedure TForm1.button8Click(Sender: TObject);
begin
  if (button8.Caption='打开串口') then
begin
    button7.Enabled:=true;
    checkbox3.Enabled:=true;
    checkbox4.Enabled:=true;
    button8.Caption:='关闭串口';
    comm1.StartComm;
    image2.Visible:=false;
    image1.Visible:=true;
    statusbar1.Panels.Items[0].Text:='STATUS:'+combobox1.text+','+combobox2.text+','+combobox3.text+','+combobox4.text+','+combobox5.text;
end
  else
begin
    button7.Enabled:=false;
    checkbox3.Enabled:=false;
    checkbox4.Enabled:=false;
    button8.Caption:='打开串口';
    comm1.StopComm;
    image2.Visible:=true;
    image1.Visible:=false;
    statusbar1.Panels.Items[0].Text:='STATUS:COM Port Closed';
end;
end;

procedure TForm1.ComboBox1Change(Sender: TObject);
begin
comm1.commname:=combobox1.text;
statusbar1.Panels.Items[0].Text:='STATUS:'+combobox1.text+','+combobox2.text+','+combobox3.text+','+combobox4.text+','+combobox5.text;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  image2.Visible:=true;
  image1.Visible:=false;
if button8.Caption='打开串口' then
begin
   button7.Enabled:=false;
   statusbar1.Panels.Items[0].Text:='STATUS:COM Port Closed';
end
else
begin
   button7.Enabled:=true;
   statusbar1.Panels.Items[0].Text:='STATUS:'+combobox1.text+','+combobox2.text+','+combobox3.text+','+combobox4.text+','+combobox5.text;
end;
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
memo1.Clear;
end;

procedure TForm1.Button6Click(Sender: TObject);
begin
 memo2.Clear;
end;

procedure TForm1.Button10Click(Sender: TObject);
begin
Close;
end;

procedure TForm1.ComboBox2Change(Sender: TObject);
begin
comm1.BaudRate:=strtoint(combobox2.text);
statusbar1.Panels.Items[0].Text:='STATUS:'+combobox1.text+','+combobox2.text+','+combobox3.text+','+combobox4.text+','+combobox5.text;
end;

procedure TForm1.ComboBox3Change(Sender: TObject);
var
 i:string;
begin
//TParity = ( None, Odd, Even, Mark, Space );
comm1.Parity:=Tparity(combobox3.ItemIndex);
statusbar1.Panels.Items[0].Text:='STATUS:'+combobox1.text+','+combobox2.text+','+combobox3.Text+','+combobox4.text+','+combobox5.text;
end;

procedure TForm1.ComboBox4Change(Sender: TObject);
begin
//TByteSize = ( _5, _6, _7, _8 );
comm1.ByteSize:=TByteSize(combobox4.ItemIndex);
statusbar1.Panels.Items[0].Text:='STATUS:'+combobox1.text+','+combobox2.text+','+combobox3.text+','+combobox4.text+','+combobox5.text;
end;

procedure TForm1.ComboBox5Change(Sender: TObject);
begin
//TStopBits = ( _1, _1_5, _2 );
comm1.StopBits:=TStopBits(combobox5.ItemIndex);
statusbar1.Panels.Items[0].Text:='STATUS:'+combobox1.text+','+combobox2.text+','+combobox3.text+','+combobox4.text+','+combobox5.text;
end;


procedure TForm1.sendstring(const str:string);
var
len:integer;
begin
  if Comm1.WriteCommData(Pchar(str),Length(str)) then
    begin
    len:=length(str);
    txlen:=txlen+len;
    statusbar1.Panels.Items[2].Text:='TX'+':'+inttostr(txlen);
    end;
end;

function HexStrToStr(const S:string):string;
//16进制字符串转换成字符串
var
  t:Integer;
  ts:string;
  M,Code:Integer;
begin
  t:=1;
  Result:='';
  while t<=Length(S) do
  begin   //xlh 2006.10.21
    while (t<=Length(S)) and (not (S[t] in ['0'..'9','A'..'F','a'..'f'])) do
      inc(t);
    if (t+1>Length(S))or(not (S[t+1] in ['0'..'9','A'..'F','a'..'f'])) then
      ts:='$'+S[t]
    else
      ts:='$'+S[t]+S[t+1]; //$表示十六进制显示
    Val(ts,M,Code);
    if Code=0 then   //code=0表示转换正确
      Result:=Result+Chr(M);
    inc(t,2);        //t的值加2
  end;
end;

procedure TForm1.Button7Click(Sender: TObject);
begin
if checkbox3.Checked=true then
sendstring(HexStrToStr(memo2.Text))
else
sendstring(memo2.Text);
end;

function StrToHexStr(const S:string):string;
//字符串转换成16进制字符串
var
  I:Integer;
begin
  for I:=1 to Length(S) do
  if I=1 then
      Result:=IntToHex(Ord(S[1]),2)//ord()取ASC
  else
      Result:=Result+' '+IntToHex(Ord(S[I]),2);
end;

procedure TForm1.SendFile(const filename: string);
var
  S:TStringList;
begin
  S:=TStringList.Create;
  try
    S.LoadFromFile(filename);
    SendString(S.Text);
  finally
    S.Free;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
OpenDialog1.FileName:='';
    if OpenDialog1.Execute then
    memo2.Lines.LoadFromFile(OpenDialog1.FileName);
panel3.Caption:=OpenDialog1.FileName;
end;

procedure TForm1.Button9Click(Sender: TObject);
begin
   sendfile(panel3.Caption);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  savedialog1.FileName:='';
  if savedialog1.Execute then
    memo1.Lines.SaveToFile(savedialog1.FileName);
end;

procedure TForm1.Memo1Change(Sender: TObject);
begin
  if (checkbox1.Checked=true)and (memo1.lines.count>265) then
    memo1.Clear;
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
  FShowText:=not FShowText;
  if FShowText then
     button5.Caption:='继续显示'
  else
     button5.Caption:='停止显示';
end;

procedure TForm1.Button11Click(Sender: TObject);
begin
  txlen:=0;
  rxlen:=0;
  statusbar1.Panels.Items[1].Text:='RX'+':'+inttostr(rxlen);
  statusbar1.Panels.Items[2].Text:='TX'+':'+inttostr(txlen);
end;

procedure TForm1.Edit1Change(Sender: TObject);
begin
  timer1.Interval:=strtoint(edit1.text);
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if memo2.Text<>''then
  begin
  button7.Click;
  end;
end;

procedure TForm1.CheckBox4Click(Sender: TObject);
begin   
  timer1.Interval:=strtoint(edit1.text);
  timer1.Enabled:=checkbox4.Checked;
  edit1.Enabled:=not checkbox4.Checked;
end;



procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
  BufferLength: Word);
var
str :string;
begin
  SetLength(Str,BufferLength);//将str的长度设置为bufferlength
  move(buffer^,pchar(@Str[1])^,bufferlength);
  if not FShowText then
  begin
    if checkbox2.Checked then
      Memo1.Text:=Memo1.Text+StrToHexStr(Str)+' '
    else
      Memo1.Text := Memo1.Text + Str;
      //Memo1.SelStart := Length(Memo1.Text);
     // Memo1.SelLength:= 0;
      //Memo1.Perform(EM_SCROLLCARET,0,0);
  end;
  rxlen:=rxlen+bufferlength;
  statusbar1.Panels.Items[1].Text:='RX'+':'+inttostr(rxlen);
end;

end.

⌨️ 快捷键说明

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