📄 serial.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 + -