搜索
bottom↓
回复: 2

delphi怎么让串口发送接收为十六进制数

[复制链接]

出0入0汤圆

发表于 2011-11-29 17:18:47 | 显示全部楼层 |阅读模式
用MSCOMM控件,想设置inputmode为1,接收到的数据为十六进制格式,然后发送也是十六进制的,有没有详细的例程啊。谢谢!
以下是我的程序
  mscomm1.InBufferCount:=0;      
  mscomm1.InputLen:=0;         
  mscomm1.RThreshold:=1;  
  mscomm1.Settings:='9600,N,8,1';
  mscomm1.CommPort:=3;
  mscomm1.PortOpen:=true;         //打开端口
  mscomm1.DTREnable:=true;        //DTR信号线有效,指示计算机等待接收传输
  mscomm1.RTSEnable:=true;        //RTS信号线有效,请示允许发送数据
procedure TForm2.MSComm1Comm(Sender: TObject);
var
  recstr:olevariant;
begin
if mscomm1.CommEvent=2 then          //接收
  begin
    recstr:=mscomm1.Input;
    memo1.Text:=memo1.text+recstr;
  end;
end;

procedure TForm2.Button3Click(Sender: TObject);//发送

begin

  mscomm1.Output:=edit1.Text;
end;

我现在就只会接收为文本文件,和发送单个ASCII码。我需要实现的是接收一串的数据和发送一串的数据,不懂怎么实现,求助谢谢

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2011-12-1 08:24:11 | 显示全部楼层
我也是一个新手,发送和接收只能是ASCII码,所以要把自已发送的字符串数据转换为十六进制数
ep:
var
a:String;
...
a := '0'.
StrToInt(a).就OK了,实际发送就是0

再说接收,我是在网上看了一函数转换就可以,楼主可以Google一下,明白原理就很好用的

出0入0汤圆

发表于 2011-12-1 08:41:33 | 显示全部楼层
//网上找来的...传输模式设为BinAry    //触发接收事件的字数设为1(MSComm1.RThreshold:=1;)

Function Str_HexToInt(Hex: String): integerVar HexDigital: Set Of char;
    i: integer;
    Digital: String;
  Begin
    Result := 0;
    HexDigital := ['1', '2', '3', '4', '5', '6', '7', '8','9',
    '0', 'A', 'B','C','D', 'E', 'F', 'a', 'b', 'c', 'd', 'e', 'f'];
  If Length(Hex) = 0 Then Exit;
  For i := 1 To Length(Hex) Do
    Begin
      Digital := Copy(Hex, i, 1);
      If (i = 1) And (digital = '$') Then Continue;
    End;
    Digital := Copy(Hex, 1, 1);
    If Digital <> '$' Then Hex := '$' + Hex;
    //Result := StrToInt(Hex);
    Str_HexToInt:=StrToInt(Hex) ;
  End;
//+++++++++++++++++++++++++++++++++++++++++++++++++++
function HexCharToInt(HexToken : char):Integer;
begin
{if HexToken>#97 then HexToken:=Chr(Ord(HexToken)-32);
{ use lowercase aswell }
Result:=0;
if (HexToken>#47) and (HexToken <#58) then      { chars 0....9 }
   Result:=Ord(HexToken)-48
else if (HexToken>#64) and (HexToken <#71) then  { chars A....F }//??91
   Result:=Ord(HexToken)-65 + 10;
end;
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-18 17:30

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

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