产品推荐:水表|流量计|压力变送器|热电偶|液位计|冷热冲击试验箱|水质分析|光谱仪|试验机|试验箱


仪表网>技术中心>使用指南>正文

欢迎联系我

有什么可以帮您? 在线咨询

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

   2012年03月29日 17:18  
  一.引言
  
  单片机实时监测数据的图形显示一般都借助于数据处理能力*的上位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)中的数。每次有新数据移入并且有原数据移出时,先清屏再复原背景显示数据,造成数据平移视觉效果。
  
  设计时波形一定要从界面zui左端入,从zui右端出,这样动态平移视觉效果才好。窗体的AutoRedraw属性要设为True.
  
  四.软件设计源程序(波形参见图4、图5)
  
  '定义所用变量
  
  Dima(11)AsSingle
  
  DimdAsInteger
  
  DimnAsInteger
  
  DimmAsInteger
  
  DimBufferAsVariant
  
  PrivateSubForm_Load()
  
  '一屏显示的12个数赋初值0
  
  Fori=0To11
  
  a(i)=0
  
  Nexti
  
  '定义坐标原点
  
  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)"
  
  Fori=0To220Step20
  
  CurrentX=i:CurrentY=3:Line-(i,0)
  
  Ifi<=200ThenCurrentX=i-7ElseCurrentX=i-12
  
  CurrentY=0:PrintiMod19
  
  Nexti
  
  Fori=0To210Step20
  
  Ifi<>0Then
  
  CurrentX=-14:CurrentY=i:Printi/10
  
  CurrentX=230:CurrentY=i:Line-(0,i)
  
  EndIf
  
  Nexti
  
  'mscomm控件初始化
  
  MSComm1.CommPort=1
  
  MSComm1.Settings="9600,n,8,1"
  
  MSComm1.InputMode=comInputModeBinary
  
  MSComm1.InputLen=0
  
  MSComm1.RThreshold=0
  
  EndSub
  
  '接收并显示数据
  
  PrivateSubCommand1_Click()
  
  '无条件循环接收数据
  
  Do
  
  接收数据
  
  DoUntilMSComm1.InBufferCount=1
  
  Loop
  
  Buffer=MSComm1.Input
  
  Fori=LBound(Buffer)ToUBound(Buffer)
  
  d=Buffer(i)
  
  Nexti
  
  '判是否*屏12个数据,设标志量m
  
  Ifm<12Then
  
  m=m+1
  
  EndIf
  
  '12个数据放a数组,a(0)是数据,原a(11)中的数移出
  
  Fori=11To1Step-1
  
  a(i)=a(i-1)
  
  Nexti
  
  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)"
  
  Fori=0To220Step20
  
  CurrentX=i:CurrentY=3:Line-(i,0)
  
  Ifi<=200ThenCurrentX=i-7ElseCurrentX=i-12
  
  CurrentY=0:PrintiMod19
  
  Nexti
  
  Fori=0To210Step20
  
  Ifi<>0Then
  
  CurrentX=-14:CurrentY=i:Printi/10
  
  CurrentX=230:CurrentY=i:Line-(0,i)
  
  EndIf
  
  Nexti
  
  '连点成波形
  
  Fori=0Tom-2
  
  Line(20*i,230*a(i)/20)-(20*(i+1),230*a(i+1)/20),RGB(240,0,0)
  
  NextI
  
  Loop
  
  EndSub

免责声明

  • 凡本网注明“来源:仪表网”的所有作品,均为浙江兴旺宝明通网络有限公司-仪表网合法拥有版权或有权使用的作品,未经本网授权不得转载、摘编或利用其它方式使用上述作品。已经本网授权使用作品的,应在授权范围内使用,并注明“来源:仪表网”。违反上述声明者,本网将追究其相关法律责任。
  • 本网转载并注明自其它来源(非仪表网)的作品,目的在于传递更多信息,并不代表本网赞同其观点或和对其真实性负责,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品第一来源,并自负版权等法律责任。
  • 如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。
联系我们

客服热线: 15267989561(同微信)

加盟热线: 15267989561(同微信)

媒体合作: 0571-87759945

投诉热线: 0571-87759942

关注我们
  • 下载仪表站APP

  • Ybzhan手机版

  • Ybzhan公众号

  • Ybzhan小程序

温馨提示

该企业已关闭在线交流功能