搜索
bottom↓
回复: 3

串口控件SPComm多方法使用例程

[复制链接]

出0入0汤圆

发表于 2006-9-28 22:20:10 | 显示全部楼层 |阅读模式
点击此处下载armok01130360.rar

出0入0汤圆

 楼主| 发表于 2006-9-28 22:23:43 | 显示全部楼层
重点:(注意:本例程一定要将串口的2,3脚短联做自发自收演示)



procedure TForm1.Button1Click(Sender: TObject);

var

  i: integer;

  str: string;

begin

  str := '';

  for i := 0 to 2047 do

  begin

    str := str + Char(i and $ff);//所有字符0x00~0xff

  end;

  Comm1.PortOpen := true;//打开串口(注意:本例将串口的2,3脚短联做自发自收演示)

  Comm1.Output := str;//发送2048个字符到串口

end;



procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: PAnsiChar;//旧事件处理方法用Buffer: Pointer

  BufferLength: Word);

var

  i: integer;

  str: string;

begin                                       



  Memo1.Lines.Add('SPCOMM控件改造应用方法一:(String)');

  SetString(str, Buffer, BufferLength);//从串口接收BufferLength个字节

  if Length(str) <> BufferLength then Exit;

  for i := 0 to BufferLength - 1 do

  begin

    if (i and $f) = 0 then

    begin

      Buffers := inttohex(i, 4) + ': ';

    end;

    if (i and $ff) = Byte(str[i + 1]) then//str从str[1]开始

      Buffers := Buffers + '0x' + inttohex(Byte(str[i + 1]), 2) + ' '

    else //接收错误显示

      Buffers := Buffers + '**/' + inttohex(Byte(str[i + 1]), 2) + ' ';

    if (i and $f) = $f then

    begin

      Memo1.Lines.Add(Buffers);//输出一行显示数据

      Buffers := '';

    end;

  end;



  Memo1.Lines.Add('');

  Memo1.Lines.Add('SPCOMM控件改造应用方法二:(Array)');

  for i := 0 to BufferLength - 1 do

  begin

    if (i and $f) = 0 then

    begin

      Buffers := inttohex(i, 4) + ': ';

    end;

    if (i and $ff) = Byte(Buffer) then//Buffer从Buffer[0]开始

      Buffers := Buffers + '0x' + inttohex(Byte(Buffer), 2) + ' '

    else //接收错误显示

      Buffers := Buffers + '**' + inttohex(Byte(Buffer), 2) + ' ';

    if (i and $f) = $f then

    begin

      Memo1.Lines.Add(Buffers);//输出一行显示数据

      Buffers := '';

    end;

  end;



  Memo1.Lines.Add('');

  Memo1.Lines.Add('SPCOMM控件改造应用方法三:(Pointer)');

  for i := 0 to BufferLength - 1 do

  begin

    if (i and $f) = 0 then

    begin

      Buffers := inttohex(i, 4) + ': ';

    end;

    if (i and $ff) = Byte((Buffer + i)^) then//Buffer+i从Buffer开始

      Buffers := Buffers + '0x' + inttohex(Byte((Buffer + i)^), 2) + ' '

    else //接收错误显示

      Buffers := Buffers + '**' + inttohex(Byte((Buffer + i)^), 2) + ' ';

    if (i and $f) = $f then

    begin

      Memo1.Lines.Add(Buffers);//输出一行显示数据

      Buffers := '';

    end;

  end;



  Memo1.Lines.Add('');

  Memo1.Lines.Add('SPCOMM控件改造应用方法四:(Pointer)');

  for i := 0 to BufferLength - 1 do

  begin

    if (i and $f) = 0 then

    begin

      Buffers := inttohex(i, 4) + ': ';

    end;

    if (i and $ff) = Byte(Buffer^) then

      Buffers := Buffers + '0x' + inttohex(Byte(Buffer^), 2) + ' '

    else //接收错误显示

      Buffers := Buffers + '**' + inttohex(Byte(Buffer^), 2) + ' ';

    if (i and $f) = $f then

    begin

      Memo1.Lines.Add(Buffers);//输出一行显示数据

      Buffers := '';

    end;

    Inc(Buffer, SizeOf(Char));//移动字符指针

  end;



end;

出0入0汤圆

 楼主| 发表于 2006-9-28 22:58:44 | 显示全部楼层
比较喜欢方法二~~~

出0入0汤圆

发表于 2006-12-27 12:37:50 | 显示全部楼层
把酷帖顶起!把酷帖顶齐!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-10 11:02

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表