1,451
社区成员
发帖
与我相关
我的任务
分享
Dim X As Integer '定义变量x用于记录数据个数
Dim y0 As Integer '定义变量y0用于记录上一次数据
Dim Y As Integer '定义变量y用于记录当前数据
Dim strData As String
Private Sub Command1_Click()
MSComm1.CommPort = 9 '设置通信端口号为COM15,这个要根据自己所使用的串口而定
MSComm1.Settings = "9600,n,8,1" '设置串口参数,表示传输速率为4800bit/s,没有奇偶校验位,8位数据位,1位停止位
'这里串口上位机的设置一定要和下位机一致
MSComm1.InputMode = comInputModeBinary
'接收文本型数据为0,如果设置为1则以二进制的形式取回传入的数据
MSComm1.PortOpen = True
'打开通信端口4'True即为打开端口,设置为False则为关上端口
'如果CommPort 属性设置 为一个非法端口,则会产生错误68(设备无效)
Picture1.Scale (0, 20)-(200, -20)
'定义Picture1的坐标系,左上角坐标值 (0, 10)到右下角坐标值(200, -10)
Picture1.Line (0, 0)-(200, 0), RGB(0, 0, 255)
'用RGB颜色(0,0,255)画出X轴
Shape1.FillColor = RGB(0, 255, 0)
'将指示灯调整为绿色
Timer1.Enabled = True
'启动Timer1定时器
End Sub
Private Sub Timer1_Timer()
Dim buf() As Byte '定义一个字节变量
Dim i As Long
buf = MSComm1.Input '将串口接收缓冲区内的数据读入buf变量中
For i = 0 To UBound(buf)
If Len(Hex(buf(i))) = 1 Then
strData = strData & "0" & Hex(buf(i)) & " "
Else
strData = strData & Hex(buf(i)) & " "
End If
Text1.Text = Text1.Text & strData
If X <= 200 Then
'如果数据个数没有到达最大值
Y = CInt(buf(i))
'用Val函数将Text1中的内容转换为数字然后赋值给y,正负的符号也会一同转换
Picture1.PSet (X, Y), RGB(255, 0, 0)
'在Picture1上(x,y)位置用RGB颜色(255,0 ,0)颜色画点
Picture1.Line (X - 1, y0)-(X, Y), RGB(255, 0, 0)
'在上次数据(x-1,y1)和这次数据(x,y)之间用RGB颜色(255,0 ,0)颜色连线
End If
Next i
X = X + 1
'数据个数加1
y0 = Y
'把y值赋给用于记录上一个数据的变量y1
Text2.Text = Text2.Text & " " & Hex(Y) & Chr(13) & Chr(10)
'Text2中的数据等于原先的数据加上数据编号加上数据的值以及Chr(13) & Chr(10)组成的换行符
Text2.SetFocus
Text2.SelStart = Len(Text2.Text)
'设置垂直滚动条自动滚动
'Text1.Text = ""
'清空Text1控件中的数据
End Sub
我是初学者,不太懂您说的这些,我有一段代码是用于显示串口数据的波形的,可以帮我看一下错在哪里吗?
现在的情况的程序无响应