16,721
社区成员




Dim strData As String
Dim strDat As String
Dim mRecvByte() As Byte
Dim Hexsj As String
Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
Dim mSize As Integer = Me.SerialPort1.BytesToRead
ReDim mRecvByte(mSize - 1)
SerialPort1.Read(mRecvByte, 0, mSize)
BeginInvoke(New EventHandler(AddressOf zhuanhuan), SerialPort1.BytesToRead()) '使用委托方式显示接收到的字符串
End Sub
Sub zhuanhuan(ByVal sender As System.Object, ByVal e As System.EventArgs) '委托
strDat = ""
TextBox1.Text = ""
Dim i As Integer
For i = 0 To UBound(mRecvByte) 'mSize - 1
strData = IIf(mRecvByte(i) > 15, Hex(mRecvByte(i)), "0" & Hex(mRecvByte(i))) & strData
Next
Dim sj As Byte
For i = 1 To Len(strData) Step 2 '处理为ASCII字符
sj = Val("&H" & Mid(strData, i, 2))
If sj < 32 Or sj > 128 Then '当接收字节中有Chr(0)时,其后字符被切割
strDat = strDat & "."
Else
strDat = strDat & Chr(sj)
End If
Next
If Mid(strDat, 1, 1) = "=" And Len(strDat) = 9 Then
TextBox1.Text = strDat '显示字符
TextBox2.Text = strData '显示为16进制
TextBox3.Text = Len(strData) / 2
strData = ""
End If
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
SerialPort1.BaudRate = 1200 '波特率设为
SerialPort1.PortName = "com1" '端口为串口COM1
SerialPort1.ReceivedBytesThreshold = 1
SerialPort1.BaudRate = 1200
SerialPort1.DataBits = 8
SerialPort1.Parity = IO.Ports.Parity.None
SerialPort1.StopBits = IO.Ports.StopBits.One
SerialPort1.ReadTimeout = 2000
If SerialPort1.IsOpen = False Then SerialPort1.Open() '打开串口
End Sub