通过串口助手读的时候显示数据正常,显示为“01 02 03”
但用VB读串口却显示乱码  估计我VB程序写的肯定有问题 。。 求各位帮忙!(波特率设置没有错,inputmode=0,=1都试了都乱码)
Private Sub Form_Load()
MSComm1.CommPort = 3
MSComm1.Settings = "4800,n,8,1"
MSComm1.InputMode = 1
MSComm1.InputMode = comInputModeText
MSComm1.PortOpen = True
End SubPrivate Sub Timer1_Timer()
Dim buf$
buf = Trim(MSComm1.Input)
If Len(buf) <> 0 Then
Text1.Text = Text1.Text + Chr(13) + Chr(10) + buf
End If
End SubPrivate Sub cmdquit_click()
MSComm1.PortOpen = False
Unload Me
End Sub

解决方案 »

  1.   

    你读到的是什么?试试:Text1.Text = Text1.Text & vbCrLf & buf 
      

  2.   

    不行的话,再试试:
    Dim i As Long
    If Len(buf) > 0 Then
        Text1.Text = Text1.Text & Chr(13) & Chr(10) 
        For i = 0 To Len(buf) - 1
            Text1.Text = Text1.Text & Right("0" & Hex(buf(i)), 2)
        Next i
    End If
      

  3.   

    还是不行, 我用单片机给串口发的是一个百位数,比如说123,串口助手读数据的话是显示“00 7B 00”是123的十六进制显示。
    但是用VB读串口,就是乱码,具体表现是:串口里数据是300以下的,就什么也不显示;是300以上的,就从9开始显示,并递增
      

  4.   

    我用单片机给串口发的是一个百位数,比如说123,串口助手读数据的话是显示“00 7B 00”是123的十六进制显示。
    但是用VB读串口,就是乱码,具体表现是:串口里数据是300以下的,就什么也不显示;是300以上的,就从9开始显示,并递增
      

  5.   

    啊不对,应该说是:
    我用单片机给串口发的是一个百位数,比如说123,串口助手读数据的话是显示“00 7B 00”是123的十六进制显示。
    但是用VB读串口,就是乱码,具体表现是:串口里数据是300以下的,就什么也不显示;是300以上的,就只显示数据的个位数,十位和百位显示空格
      

  6.   


    Private Sub Form_Load()
    MSComm1.CommPort = 3
    MSComm1.Settings = "4800,n,8,1"
    MSComm1.InputMode = 1
    MSComm1.InputMode = comInputModeText
    MSComm1.PortOpen = True
     
     
    End Sub
     
    Private Sub Timer1_Timer()
    Dim buf() As Byte,I As Integer
    buf = MSComm1.Input
    Text1.Text=Text1.Text & vbCrlf
    For I=0 to Ubound(buf)
    Text1.Text = Text1.Text & right("0" & Hex(buf(i)),2) & Chr(32)
    End If
    Text1.Text=Text1.Text & vbCrlf
    End Sub
     
    Private Sub cmdquit_click()
    MSComm1.PortOpen = False
    Unload Me
    End Sub我改了Timer函数,运行一下,看下效果在说
      

  7.   

    不是字符串数据,你还用字符串数据来接收,VB字符串ascii码大于127的都会变0的,要用数组接收的
      

  8.   


    Private Sub Form_Load()
      MSComm1.CommPort = 3
      MSComm1.Settings = "4800,n,8,1"
      MSComm1.InputMode = 1
      MSComm1.InputMode = comInputModeText
      MSComm1.PortOpen = True
    End Sub
      
    Private Sub Timer1_Timer()
      Dim buf() As Byte,I As Integer
      if MSComm1.InputLen>0 then
        buf = MSComm1.Input
        Text1.Text=Text1.Text & vbCrlf
        For I=0 to Ubound(buf)
          Text1.Text = Text1.Text & right("0" & Hex(buf(i)),2) & Chr(32)
        Next
        Text1.Text=Text1.Text & vbCrlf
      end if
    End Sub
      
    Private Sub cmdquit_click()
      MSComm1.PortOpen = False
      Unload Me
    End Sub
      

  9.   

    这样就 。。 啥都读不到了QAQ
      

  10.   

    用二进制方式接收Byte字节流,再将接收的字节数据一一转换为2字符的十六进制字符拼接为能观看的十六进制字符串查看。
      

  11.   

    1   不要用定时器。照串口助手的方式来写接收代码。
    2   用二进制方式接收,接收缓存变量也用 Byte 型。VB 字符串有个毛病,当遇到大于 127 的值时会被系统置换为 "?"。
      

  12.   

    对电脑而言没有乱码,只有二进制字节;对人脑才有乱码。啊 GBK:0xB0 0xA1,Unicode-16 LE:0x4A 0x55,Unicode-16 BE:0x55 0x4A,UTF-8:0xE5 0x95 0x8A
      

  13.   

    仅供参考:
    Dim iBuf() As Byte
    Dim bt As Long
        bt = bytesTotal
    '   收当前流
        ReDim iBuf(bt - 1)
        tcpRTB.GetData iBuf
    '   log每个收到的字节
    '   i = 0
    '   lnx = "RTB-->BYTE:" + Right("0000000" + Hex(i), 8) + "-"
    '   For i = 0 To bt - 1
    '       lnx = lnx + " " + Right("0" + Hex(iBuf(i)), 2)
    '       If i Mod 16 = 15 Then
    '           LogRX lnx
    '           lnx = "RTB-->BYTE:" + Right("0000000" + Hex(i + 1), 8) + "-"
    '       End If
    '   Next
    '   i = bt - 1
    '   If i Mod 16 <> 15 Then
    '       LogRX lnx
    '   End If