用VB6.0数字示波单片机实时监测数据的一种方法

出处:zzh12345 发布于:2009-09-14 15:00:57

  摘要:本文介绍利用VB6.0数字动态图形显示单片机实时检测数据的一种方法,该显示方法符合人们看图习惯,视觉效果好且数值显示、算法简单、实现容易。

  一.引言

  单片机实时监测数据的图形显示一般都借助于数据处理能力强大的上 位PC 机。VB6.0 具有强大的图形处理功能和良好的界面设计功能并且可以利用 MsComm 控件方便地实现和单片机的串行数据通信。

  本文介绍利用 VB6.0 的窗体对象、命令按钮控件对象、微软的MsComm 控件对象、数组和用户自定义坐标系动态、连续、数字、波形地显示单片机实时 检测数据的一种方法。 该显示方法的坐标系符合人们看图习惯,显示的实时波形随时间动态变 化并从左向右平移,视觉效果好且数值显示、算法简单、实现容易。

  二.所用对象介绍

  1.窗体

  窗体是所有控件的容器,是设计界面的载体,具有Print、Cls、Line、 Scale 等方法。 窗体容器有一个坐标系,窗体的ScaleTop、ScaleLeft 两个属性值形成坐标 原点且默认值为0 和0,窗体默认坐标原点在窗体的左上角,向右和向下为坐标 轴正方向,属性ScaleWidth 的值和ScaleHeight 的值确定窗体实际可用的宽度和 高度(见图1)。

  窗体的ScaleMode 属性值决定窗体坐标的度量单位,共有八种单位形式, 当值为0 时表示是用户定义形式。默认形式为twip。窗体默认坐标系不符合人们 习惯。

  用 Scale 方法可以方便建立用户坐标系,语法格式为:

  [窗体].Scale [(xLeft,yTop)-(xRight,yBottom)]

  其中(xLeft,yTop)表示窗体左上角的坐标值, (xRight,yBottom)表示窗体右 下角的坐标值,则窗体的下述属性值为:

  ScaleLeft = xLeft

  ScaleTop = yTop

  ScaleWidth = xRight-xLeft

  ScaleHeight = yBottom-yTop

  若有语句: Form1.Scale (-10, 250)-(220, -15), 则用户自定义坐标系如下图2:

  2.命令按钮控件

  命令按钮可以接收 Click 事件。

  3.MsComm 控件

  完善的串行数据发送和接收控件。通过属性设置、事件驱动方式或查询方式完成数据通信。

  三.软件设计思想(一个具体的例)

  要求:单片机每 1 秒串行发送给PC 一帧十位数据,VB6.0 波形动态显示数 据。 设计:通过窗体 Load 事件程序完成如图3 所示界面设计,使得程序一运行 即出现该界面,单击“接收数据”按钮,通过MsComm 控件接收串行通信数据 并波形动态显示。显示时一屏12 个数据,每次接收了新数据后,数组中的数据 依次后移,既a(0)(假设为数组a(11))放接收的数据,原a(11)中的数据被 移出而移入原a(10)中的数。

  每次有新数据移入并且有原数据移出时,先清屏再 复原背景显示数据,造成数据平移视觉效果。 设计时波形一定要从界面左端入,从右端出,这样动态平移视觉效果 才好。窗体的AutoRedraw 属性要设为True.



  四.软件设计源程序(波形参见图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 <= 200 Then CurrentX = i - 7 Else CurrentX = i - 12

  CurrentY = 0: Print i Mod 19

  Next i

  For i = 0 To 210 Step 20

  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 < 12 Then

  m = m + 1

  End If

  '12 个数据放a 数组,a(0)是数据,原a(11)中的数移出

  For i = 11 To 1 Step -1

  a(i) = a(i - 1)

  Next i

  a(0) = d

  '清零窗体界面、数据

  Form1.Cls

  '复原窗体界面

  Line (0, 0)-(230, 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 <= 200 Then CurrentX = i - 7 Else CurrentX = i - 12

  CurrentY = 0: Print i Mod 19

  Next i

  For i = 0 To 210 Step 20

  If i <> 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


  
关键词:用VB6.0数字示波单片机实时监测数据的一种方法单片机实时监测数据

版权与免责声明

凡本网注明“出处:维库电子市场网”的所有作品,版权均属于维库电子市场网,转载请必须注明维库电子市场网,https://www.dzsc.com,违反者本网将追究相关法律责任。

本网转载并注明自其它出处的作品,目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品出处,并自负版权等法律责任。

如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。

我司代理分销MOS管,单片机,电源IC,驱动IC,PD协议IC等,专业提供各种电子元器件!
广告
OEM清单文件: OEM清单文件
*公司名:
*联系人:
*手机号码:
QQ:
有效期:

扫码下载APP,
一键连接广大的电子世界。

在线人工客服

买家服务:
卖家服务:
技术客服:

0571-85317607

网站客服电话

0571-85317606

客服在线时间周一至周五
9:00-17:30

关注官方微信号,
第一时间获取资讯。

建议反馈

联系人:

联系方式:

按住滑块,拖拽到最右边
>>
感谢您向阿库提出的宝贵意见,您的参与是维库提升服务的动力!意见一经采纳,将有感恩红包奉上哦!