回 帖 发 新 帖 刷新版面

主题:MSComm串口通讯问题求助,如何发送接收十六进制码?

在下愚钝,下面本菜鸟代码,请各位帮帮忙,谢谢!!!


void __fastcall TForm1::Button1Click(TObject *Sender)//打开串口
{
   if(MSComm1->PortOpen != true)
   {
    MSComm1->CommPort=StrToInt(ComboBox1->Text);     //选择串口号
    MSComm1->Settings = ComboBox2->Text+","+
                        ComboBox3->Text+","+
                        ComboBox4->Text+","+
                        ComboBox5->Text;
    MSComm1->InputMode=0;     //设置串口传入数据格式,0表示文本
    MSComm1->PortOpen = true; //打开串口
    Button1->Enabled=false;
    Button2->Enabled=true;
    Button3->Enabled=true;
    Button4->Enabled=true;
    Shape1->Brush->Color=clGreen;
   }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)   //关闭串口
{
    if(MSComm1->PortOpen != false)
    {
     MSComm1->PortOpen=false;
     Button1->Enabled=true;
     Button2->Enabled=false;
     Button3->Enabled=false;
     Button4->Enabled=false;
     Shape1->Brush->Color=clRed;
    }
    else
    {
     Button1->Enabled=false;
     Button2->Enabled=true;
     Shape1->Brush->Color=clRed;
    }
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button3Click(TObject *Sender)    //发送Memo2中的数据
{
   MSComm1->Output=StringToOleStr(Memo2->Text); //把AnsiString型转化为Ole形式
}
//---------------------------------------------------------------------------

void __fastcall TForm1::MSComm1Comm(TObject *Sender)
{
   AnsiString str; //申明一个AnsiString类型变量
   OleVariant s;   //申明一个用于接收数据的OleVariant类型变量
   int a;

   if(MSComm1->CommEvent==comEvReceive)
   {
     if(MSComm1->InBufferCount)
     {
      s=MSComm1->Input;
      str=s.AsType(varString);
      a = StrToInt(str);
      str = IntToHex(a,2);
      Memo1->Text=Memo1->Text+str;
     }
   }
}

回复列表 (共3个回复)

沙发

晕死了

有什么真正的 16 进制? 都是 二进制的.

板凳

我的意思是可以发送,接收,显示Hex数据。

3 楼

我是这样做的了:
unsigned char  tmpchar[PackageMaxLength];
int len = SIUComm->ReadBufUsed();//这里根据实际情况改了
SIUComm->ReadBuf(tmpchar,Res);//SIU是串口类
 for(int j=0; j<len;j++)
 {
    str=str+" "+(IntToHex(tmpchar[j],2));//将它转化为HEX
 }
Memo1->Lines->Add(str);//显示

我来回复

您尚未登录,请登录后再回复。点此登录或注册