最近在用Delphi7做串口通信,但在网上找了很多代码,都是没有一个完整的实例,复制粘贴网上的代码运行就没有能通过的,可能是现在Delphi7在市场上用得不是很多,又或者说我是井底之蛙。因此,为了解决大部分初学者对串口通讯不怎么了解的郁闷,现将我做好的实例分享给大家参考参考,希望能给初学者予以帮助,如有不对的地方还请多多指教。本实例用到的控件是Spcomm,也包含在这个文件夹里面了,下面是部份截图和部份代码展示:
部分代码展示:
//打开、关闭串口
procedure TCommixForm.btnPortClick(Sender: TObject);
begin
if btnPort.Caption = 'Open Port' then
begin
if ComPortAvailable(pchar(cbbPort.Text)) then
begin
cmPort.StopComm;
cmPort.CommName := cbbPort.Text;
cmPort.BaudRate := StrToInt(cbbBaudRate.Text);
Commsize;
cmPort.StartComm;
btnPort.Caption := 'Close Port';
cbbPort.Enabled := False;
btnSend.Enabled := True;
end
else
begin
ShowMessage(cbbPort.Text + ' 打开失败,请检查串口!');
cbbPort.Enabled := True;
btnPort.Caption := 'Open Port';
btnSend.Enabled := False;
end;
end
else
begin
cmPort.StopComm;
cbbPort.Enabled := True;
btnPort.Caption := 'Open Port';
btnSend.Enabled := False;
end;
end;
//处理接收的数据
procedure TCommixForm.cmPortReceiveData(Sender: TObject; Buffer: Pointer; BufferLength: Word);
var
str, rbuf: string;
i: Integer;
begin
SetLength(rbuf, BufferLength);
Move(Buffer^, PChar(rbuf)^, BufferLength);
if rbShowHEX.Checked then
begin
rbuf := StrToHex(rbuf);
str := '';
for i := 0 to Length(rbuf) div 2 do
begin
//加个空格相对美观点 clBlue
if i < 1 then
str := str + Copy(rbuf, i * 2, 2);
if i > 0 then
str := str + ' ' + Copy(rbuf, i * 2 + 1, 2);
end;
rbuf := str;
end;
mmoShow.Font.Color := clBlue;
mmoShow.Lines.Add(rbuf);
end;
// 发送数据
procedure TCommixForm.btnSendClick(Sender: TObject);
var
sendInput, result: string;
i: Integer;
begin
sendInput := mmoInput.Text;
if rbInputHEX.Checked then
begin
sendInput := StringReplace(mmoInput.Text, ' ', '', [rfReplaceAll, rfIgnoreCase]);
for i := 1 to Length(sendInput) do
begin
if System.Odd(i) then
begin
result := result + Char(StrToIntDef('$' + Copy(sendInput, i, 2), 0))
end;
end;
cmPort.WriteCommData(PChar(result), Length(sendInput) div 2);
end
else
begin
cmPort.WriteCommData(PChar(sendInput), Length(sendInput));
end;
end;
本实例我将上传至CSDN,有需要的朋友请自行下载!
下载地址:https://download.csdn.net/download/weixin_42148410/12251892