jiongeyes 发表于 2011-11-29 17:18:47

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

用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码。我需要实现的是接收一串的数据和发送一串的数据,不懂怎么实现,求助谢谢

xjjiang 发表于 2011-12-1 08:24:11

我也是一个新手,发送和接收只能是ASCII码,所以要把自已发送的字符串数据转换为十六进制数
ep:
var
a:String;
...
a := '0'.
StrToInt(a).就OK了,实际发送就是0

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

wjhhh 发表于 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;
页: [1]
查看完整版本: delphi怎么让串口发送接收为十六进制数