如何将单片机输出的交流信号用vb的程序读出来(串口),并用这个信号绘制成曲线图?

如题所述

先接收
Buffer = MSComm1.Input ' 接收一个二进制数据
Arr(0) = AscB(Buffer) '存入到二进制数组数组中
Receive_Count_Byte = Receive_Count_Byte + 1
'定义该数据变量为DataFromCom。
DataFromCom = Arr(0) '接收的数据
'按单片机的信号进行处理得到对应的数据
......
实时曲线反映的就是该数据。 打开VB6.0中文版,新建一个项目和窗体,修改窗体的属性,将“Heigh”修改为:8000,“Width”修改为在窗体中放如一个PictureBox控件。然后重新定义PictureBox控件的一些基本属性,在VB中选中PictureBox控件,直接在它的属性框中,修改一些属性参数。“名称”改为Pic。 “AutoRedraw”改为:True。“BackColor”改为:&H00004000&(墨绿色背景颜色)。”Heigh”改为:5000。“Width”改为:8000。
然后要重新定义PictureBox控件的坐标系。图像框的默认坐标系,是从左上角开始的,不符合我们的画线要求。修改坐标系的目的是让曲线从图像框的左边正中间,开始画线。修改图像框的坐标系,这里定义一个过程PicScale(),代码如下:
Private Sub PicScale(picX As PictureBox)
picX.Scale (0, PicX.ScaleHeight)-(picX.ScaleWidth, -PicX.ScaleHeight)
End Sub
一般的实时曲线显示的时候在屏幕的正中间有一条基准线,这里也要画出这条基准线,用一个过程PicMidleLine()来实现,代码如下:

picX.Line (0, 0)-(picX.ScaleWidth, 0), vbGreen '画出中线
End Sub
要画一条实时曲线,坐标轴的设定很重要,在这里把X轴设定为时间轴,Y轴设定为数据轴。对应X轴我们定义一个时间变量TimeCount,TimeCount会随着时间逐渐递增,每次递增,对应着一个从串口读过来的数据DataFromCom,这样图像框中的(x,y)坐标点实际上就对应着(TimeCount,DataFromCom)如果只是当TimeCount发生变化时就在图像框上画一个点,就只需调用VB中的画像素的函数point(x,y),这里x,y为所画的点的坐标。单这样画出来的是一个个不连续的点。我们想要的是实时的连续的曲线,所以要调用VB中的画线的函数line(x1,y1)-(x2,y2),这里(x1,y1)(x2,y2)为所要画的线的起点和终点的坐标。只要把上次串口读过来的数据(这里把它定义为变量DataFromComLast)和现在串口读过来的数据(DataFromCom)和TimeCount相对应,调用line(x1,y1)-(x2,y2)函数就可以在图像框中画出实时的曲线了。把它写成一个过程如下面的代码:
Private Sub DrawRealLine(picX As PictureBox, TimeCountX As Integer, DataFromComX As Integer, DataFromComLastX As Integer)
If TimeCountX - 1 > 0 Then
picX.Line (TimeCountX - 1, DataFromComLastX)-(TimeCountX, DataFromComX), vbWhite
End If
End Sub
有了三个过程就可以在图像框中画出一条实时的曲线了。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-03-14
VB程序不能直接接收交流信号,需要用单片机将交流信号转化为数字信号,
然后通过232串口传输到VB中.再通过VB中的画线程序进行画线本回答被提问者采纳
第2个回答  2013-03-14
用串口的控件进行接收并显示
第3个回答  2013-03-14
mscomm+picturebox
or
mscomm+mschart
相似回答