哪位高手会把串口通信发出的数有规则的发出 就像这样 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 谢谢了
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 谢谢了
从LZ提供的代码只有满足某些条件时通过MsComm控件发送GrayCodeChr字符串的代码.
1)二进制码与格雷码互相转换
2)字符表示的二进制码如何转换为10进制数
3)通过MsComm控件来输出字节(Byte)数组
4)串口只能传递字节代表的(8数据位/每字节)
如:
1110 0001 1010
1100 0011 1110
0011 0011 0010
0010 1101 0011
似乎应该看成是48个位,用MsComm控件传递需要6个字节(Byte)来满足
Byte 变量存储为单精度型、无符号整型、8 位(1个字节)的数值形式,范围在 0 至 255 之间。
Byte 数据类型在存储二进制数据时很有用。
学会在坛子搜索答案.搜索关键词MsComm
八进制与十六进制转二进制