哪位高手会把串口通信发出的数有规则的发出  就像这样 1110 0001 1010
                                                   1100 0011 1110
                                                   0011 0011 0010
                                                   0010 1101 0011
                                                   。
我用的串口调试助手接收的  源程序是Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
  Dim EncodeDeg As Double
  Dim EncodeMin As Double
  Dim EncodeSec As Double
  Dim MouseMPX As Long
  Dim EncodeRY As Long
  Dim GrayCodeChr As String
  Dim ReadCodeNum As Integer
  'Dim EncodeColor As Long
  If DrawCodeChannel = True Or DrawSingleCodeChannel = True Then
    Exit Sub
  Else
  End If
    
  If MousDown = True Then
    MouseMPX = X
    Call MoveEncode(MouseMPX)
    
    'With Line1
    '  If X <= 0 Then
    '    .X1 = 0
    '    .X2 = 0
    '  Else
    '    If X >= 16384 Then
    '      .X1 = 16384
    '      .X2 = 16384
    '    Else
    '      .X1 = X
    '      .X2 = X
    '    End If
    '  End If
    '  .ZOrder (0)
    '  EncodeDeg = .X1 * 360 / 16384
    '  EncodeMin = (EncodeDeg - Int(EncodeDeg)) * 60
    '  EncodeSec = (EncodeMin - Int(EncodeMin)) * 60
    '  Text1.Text = Format(Int(EncodeDeg), "") + "°" + Format(Int(EncodeMin), "00") + "′" + Format(EncodeSec, "00.0000") + "″"
    'End With
    
    '读取码道
    'For i = 1 To 12
    '  Select Case i
    '    Case 1: EncodeRY = 12305
    '    Case 2: EncodeRY = 11825
    '
    '    Case 3: EncodeRY = 10865
    '    Case 4: EncodeRY = 10385
    '
    '    Case 5: EncodeRY = 9425
    '    Case 6: EncodeRY = 8945
    '    Case 7: EncodeRY = 8465
    '    Case 8: EncodeRY = 7985
    '
    '    Case 9: EncodeRY = 6785
    '    Case 10: EncodeRY = 6305
    '    Case 11: EncodeRY = 5825
    '    Case 12: EncodeRY = 5345
    '    Case Else
    '  End Select
      'EncodeColor = GetPixel(Picture1.hdc, 8192, EncodeRY)
      'If EncodeColor = RGB(255, 255, 255) Then
      '  Text1.Text = Text1.Text + "1"
      'Else
      '  Text1.Text = Text1.Text + "0"
      'End If
    'Next
    
    '读码道
'    For i = 1 To 12
    For i = 1 To CodeChannelDesignNum
'      Select Case i
'        Case 1, 2, 3, 5, 9: ReadCodeNum = 4
'        Case 4, 6, 10:      ReadCodeNum = 6
'        Case 7, 11:         ReadCodeNum = 10
'        Case 8, 12:         ReadCodeNum = 18
'        Case Else
'      End Select
'      For j = 0 To ReadCodeNum - 1
       For j = 0 To CodeChannelLineNum(i) - 1
        If Controls("shape" & i)(j).Left < Line1.X1 And Controls("shape" & i)(j).Left + Controls("shape" & i)(j).Width > Line1.X1 Then
          If Controls("shape" & i)(j).BackColor = RGB(255, 255, 255) Then
            GrayCode(i) = 1
          Else
            GrayCode(i) = 0
          End If
        Else
        End If
      Next
    Next
    GrayCodeChr = ""
'    For i = 1 To 12
    For i = 1 To CodeChannelDesignNum
      If (i + (4 - (CodeChannelDesignNum Mod 4))) Mod 4 = 0 And i <> CodeChannelDesignNum Then
        GrayCodeChr = GrayCodeChr + CStr(GrayCode(i)) + " "
      Else
        GrayCodeChr = GrayCodeChr + CStr(GrayCode(i))
      End If
    Next
    If MSComm1.PortOpen = False Then MSComm1.PortOpen = True
    MSComm1.Output = GrayCodeChr
    Text1.SelStart = Len(Text1.Text)
'    Text1.SelText = Chr(13)
'    Text1.SelText = vbCrLf & GrayCodeChr
    Text1.SelText = Chr(13) + Chr(10) + GrayCodeChr
    'Text1.SelStart = Len(Text1.Text)
    'Text1.SelText = GrayCodeChr
  End If
End Sub  谢谢了

解决方案 »

  1.   


    从LZ提供的代码只有满足某些条件时通过MsComm控件发送GrayCodeChr字符串的代码.
      

  2.   

    LZ需要解决的是
    1)二进制码与格雷码互相转换
    2)字符表示的二进制码如何转换为10进制数
    3)通过MsComm控件来输出字节(Byte)数组
    4)串口只能传递字节代表的(8数据位/每字节)
    如:
    1110 0001 1010
    1100 0011 1110
    0011 0011 0010
    0010 1101 0011
    似乎应该看成是48个位,用MsComm控件传递需要6个字节(Byte)来满足
      

  3.   

    Byte 数据类型
    Byte 变量存储为单精度型、无符号整型、8 位(1个字节)的数值形式,范围在 0 至 255 之间。
    Byte 数据类型在存储二进制数据时很有用。
      

  4.   


    学会在坛子搜索答案.搜索关键词MsComm
    八进制与十六进制转二进制
      

  5.   

    http://topic.csdn.net/u/20101207/20/cc030a0c-f68f-47ec-8764-2cac78af039b.html