|
摘要:本文介绍利用VB6.0数字动态图形显示单片机实时检测数据的一种方法,该显示方法符合人们看图习惯,视觉效果好且数值显示精确、算法简单、实现容易。
一.引言
单片机实时监测数据的图形显示一般都借助于数据处理能力强大的上 位PC 机。VB6.0 具有强大的图形处理功能和良好的界面设计功能并且可以利用 MsComm 控件方便地实现和单片机的串行数据通信。
本文介绍利用 VB6.0 的窗体对象、命令按钮控件对象、微软的MsComm 控件对象、数组和用户自定义坐标系动态、连续、数字、波形地显示单片机实时 检测数据的一种方法。 该显示方法的坐标系符合人们看图习惯,显示的实时波形随时间动态变 化并从左向右平移,视觉效果好且数值显示精确、算法简单、实现容易。
二.所用对象介绍
1.窗体
窗体是所有控件的容器,是设计界面的载体,具有Print、Cls、Line、 Scale 等方法。 窗体容器有一个坐标系,窗体的ScaleTop、ScaleLeft 两个属性值形成坐标 原点且默认值为0 和0,窗体默认坐标原点在窗体的左上角,向右和向下为坐标 轴正方向,属性ScaleWidth 的值和ScaleHeight 的值确定窗体实际可用的宽度和 高度(见图1)。
![]()
2.命令按钮控件
命令按钮可以接收 Click 事件。
3.MsComm 控件
完善的串行数据发送和接收控件。通过属性设置、事件驱动方式或查询方式完成数据通信。
三.软件设计思想(一个具体的例)
要求:单片机每 1 秒串行发送给PC 一帧十位数据,VB6.0 波形动态显示数 据。 设计:通过窗体 Load 事件程序完成如图3 所示界面设计,使得程序一运行 即出现该界面,单击“接收数据”按钮,通过MsComm 控件接收串行通信数据 并波形动态显示。显示时一屏12 个数据,每次接收了新数据后,数组中的数据 依次后移,既a(0)(假设为数组a(11))放最新接收的数据,原a(11)中的数据被 移出而移入原a(10)中的数。
![]()
![]()
四.软件设计源程序(波形参见图4、图5)
'定义所用变量
Dim a(11) As Single
Dim d As Integer
Dim n As Integer
Dim m As Integer
Dim Buffer As Variant
'初始化
Private Sub Form_Load()
'一屏显示的12 个数赋初值0
For i = 0 To 11
a(i) = 0
Next i
'定义坐标原点
Form1.Scale (-10, 250)-(220, -15)
'画X、Y 轴
Line (0, 0)-(220, 0)
Line (0, 0)-(0, 250)
'加坐标刻度和数值
CurrentX = 200: CurrentY = 13: Print "X(s)"
CurrentX = 5: CurrentY = 245: Print "Y(V)"
For i = 0 To 220 Step 20
CurrentX = i: CurrentY = 3: Line -(i, 0)
If i 0 Then
CurrentX = -14: CurrentY = i: Print i / 10
CurrentX = 230: CurrentY = i: Line -(0, i)
End If
Next i
'mscomm控件初始化
MSComm1.CommPort = 1
MSComm1.Settings = "9600,n,8,1"
MSComm1.InputMode = comInputModeBinary
MSComm1.InputLen = 0
MSComm1.RThreshold = 0
End Sub
‘接收并显示数据
Private Sub Command1_Click()
’无条件循环接收数据
Do
'接收数据
Do Until MSComm1.InBufferCount = 1
Loop
Buffer = MSComm1.Input
For i = LBound(Buffer) To UBound(Buffer)
d = Buffer(i)
Next i
'判是否第一屏12 个数据,设标志量m
If m 0 Then
CurrentX = -14: CurrentY = i: Print i / 10
CurrentX = 230: CurrentY = i: Line -(0, i)
End If
Next i
'连点成波形
For i = 0 To m - 2
Line (20 * i, 230 * a(i) / 20)-(20 * (i + 1), 230 * a(i + 1) / 20), RGB(240, 0, 0)
Next I
Loop
End Sub
|
|