Public
Class
Form1
Dim
mSTR
As
String
Dim
strData
As
String
Dim
strDat
As
String
Dim
mRecvByte()
As
Byte
Dim
Hexsj
As
String
Dim
form2
As
Form
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
ONMLoadA), SerialPort1.BytesToRead())
'使用委托方式显示接收到的字符串
End
Sub
Sub
ONMLoadA(
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 = strData & IIf(mRecvByte(i) > 15, Hex(mRecvByte(i)),
"0"
& Hex(mRecvByte(i))) &
" "
Next
Dim
sj
As
Byte
For
i = 1
To
Len(strData)
Step
3
'处理为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
TextBox1.Text = strDat
'显示字符
TextBox2.Text = strData
'显示为16进制
TextBox3.Text = Len(strData) / 3
End
Sub