串口接收计数数值,程序实时显示数据的变化,要求由波形显示。遇到一个问题,就是怎么将数据转换成10进制,这样才好画图吧?编了一部分程序,运行出错,感觉是因为接收到的是字符串,要变成10进制数才行吧?菜鸟啊,菜鸟。另外,如果接收数据速度要求很快时,有什么其他方法没有?这方面的资料哪里有啊?
ption Explicit
Dim x1, y1, lastx, lasty As Double
Private Sub Command1_Click()
MSComm1.PortOpen = False
End
End SubPrivate Sub Command2_Click()
Timer1.Enabled = Not Timer1.Enabled
If Timer1.Enabled Then
Command2.Caption = "end"
Else
Command2.Caption = "start"
End If
End SubPrivate Sub Form_Load()
MSComm1.PortOpen = True
x1 = 0
y1 = 0
lastx = 0
lasty = 0
Picture1.Scale (0, 2000)-(1000, 0)
End SubPrivate Sub Timer1_Timer()
y1 = MSComm1.Input '这一句应该怎么写?
If x1 > 10000 Or x1 < 0 Then
x1 = 0
Else
x1 = x1 + 1
End If
Picture1.Line (lastx, lasty)-(x1, y1), QBColor(12)
lastx = x1
lasty = y1
End Sub

解决方案 »

  1.   

    串口收到的是一个字符串,可能包含了两个或两个以上的数据呀.你在串口中收到的包应该有包头包尾的,这样才可以取得你需要的数据呀.
    还有,你处理数据的时候可以在Private Sub MSComm1_OnComm()这个事件中处理呀,串口有数据到的时候就会触发这个事件了.
      

  2.   

    网上有和你一样的程序 自己收一下吧
        Private Sub Command2_Click ()‘串口发送
          
              
        End Sub  Private Sub Timer1_Timer()    call Command2
        call MSComm1_OnComm
        
      End Sub  接收数据速度要求可在0.01 但注意要延时
      

  3.   

    写过这样的程序,不过太大,贴不上来,讲个思路给你:
    Com1_OnComm()事件中接受数据
    查询Com1.CommEvent属性,
    如果CommEvent属性为comEvReceive则 TEMP = Com1.Input'假设数据先放到字符串TEMP变量中
    然后SPLIT函数将数据分割,并使用VAL()函数转化为数字格式,(这个函数只转换10进制的数字文本,如果是其他进制的,则自己写一个函数)将转换好的数字存放在一个数组中。
    然后将数据画到对象上,可以使用:MoveToEx和LineTo这两个API,或SetPixelV
    进行绘画,前者是连线,后者是描点,随便你喜欢怎么画了。
    最后一个问题,可以使用一个TIMER控件来定时刷新画面,但是要告诉你一点:绝对做不到1毫秒一次的刷新率,并且就算作到了也没有意义(你有刷新率为1000赫兹的显示器吗?弄个10赫兹就撑死你的CPU了)