Delphi7串口通讯实例(含Spcomm控件)

标签: IT  Spcomm控件  Delphi7串口通讯  串口通讯  控件  Delphi7

最近在用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

原文链接:加载失败,请重新获取