⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 buoxunt.frm

📁 虚拟示波器.提供学习提供学习提供学习提供学习
💻 FRM
字号:
VERSION 5.00
Object = "{648A5603-2C6E-101B-82B6-000000000014}#1.1#0"; "MSCOMM32.OCX"
Begin VB.Form Form1 
   BorderStyle     =   1  'Fixed Single
   Caption         =   "虚拟示波器"
   ClientHeight    =   8625
   ClientLeft      =   45
   ClientTop       =   330
   ClientWidth     =   11910
   ControlBox      =   0   'False
   DrawStyle       =   5  'Transparent
   LinkTopic       =   "Form1"
   MaxButton       =   0   'False
   MinButton       =   0   'False
   ScaleHeight     =   8625
   ScaleWidth      =   11910
   Begin VB.ComboBox Combo3 
      BackColor       =   &H00C0FFFF&
      Height          =   300
      ItemData        =   "buoxunt.frx":0000
      Left            =   8520
      List            =   "buoxunt.frx":0010
      Style           =   2  'Dropdown List
      TabIndex        =   8
      Top             =   7440
      Width           =   975
   End
   Begin VB.OptionButton Option1 
      BackColor       =   &H008080FF&
      Caption         =   "暂停"
      Height          =   495
      Left            =   1680
      Style           =   1  'Graphical
      TabIndex        =   7
      Top             =   7320
      Width           =   495
   End
   Begin VB.OptionButton Option2 
      BackColor       =   &H0000FF00&
      Caption         =   "测量"
      Height          =   495
      Left            =   960
      Style           =   1  'Graphical
      TabIndex        =   6
      Top             =   7320
      Width           =   495
   End
   Begin VB.CommandButton Command1 
      BackColor       =   &H00FFC0C0&
      Caption         =   "结束"
      Height          =   495
      Left            =   2400
      Style           =   1  'Graphical
      TabIndex        =   5
      Top             =   7320
      Width           =   495
   End
   Begin VB.PictureBox Picture1 
      BackColor       =   &H00FFFFFF&
      Height          =   1935
      Left            =   960
      ScaleHeight     =   1875
      ScaleWidth      =   4275
      TabIndex        =   4
      Top             =   600
      Width           =   4335
   End
   Begin MSCommLib.MSComm MSComm1 
      Left            =   3120
      Top             =   7320
      _ExtentX        =   1005
      _ExtentY        =   1005
      _Version        =   393216
      DTREnable       =   0   'False
      InBufferSize    =   512
      OutBufferSize   =   0
      BaudRate        =   1200
      InputMode       =   1
   End
   Begin VB.ComboBox Combo2 
      BackColor       =   &H00FFFFC0&
      Height          =   300
      ItemData        =   "buoxunt.frx":002A
      Left            =   6120
      List            =   "buoxunt.frx":003D
      Style           =   2  'Dropdown List
      TabIndex        =   1
      Top             =   7440
      Width           =   855
   End
   Begin VB.ComboBox Combo1 
      BackColor       =   &H00FFC0FF&
      Height          =   300
      ItemData        =   "buoxunt.frx":0058
      Left            =   4800
      List            =   "buoxunt.frx":0068
      Style           =   2  'Dropdown List
      TabIndex        =   0
      Top             =   7440
      Width           =   855
   End
   Begin VB.Label Label3 
      Caption         =   "采样间隔(μs)"
      Height          =   375
      Left            =   8520
      TabIndex        =   9
      Top             =   7200
      Width           =   1215
   End
   Begin VB.Label Label2 
      Alignment       =   2  'Center
      Caption         =   "V/div"
      Height          =   255
      Left            =   6120
      TabIndex        =   3
      Top             =   7200
      Width           =   855
   End
   Begin VB.Label Label1 
      Alignment       =   2  'Center
      Caption         =   "ms/div"
      ForeColor       =   &H00404040&
      Height          =   255
      Left            =   4800
      TabIndex        =   2
      Top             =   7200
      Width           =   855
   End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
'声明通用变量
Public oldx As Single, oldy As Single
Private y() As Single
'绘制波形(拉格郎日三点插值,多点时分段)
Private Sub buo()
Dim n As Integer, i As Integer, j As Integer
Dim j1 As Integer, j2 As Integer, t As Single
Dim tm As Single, tm2 As Single
Dim tm3 As Single, u As Single
lp:
If Option2.Value = True Then '按下"测量"时绘制波形
Picture1.AutoRedraw = False  '绘制的波形可被清除
Picture1.Cls                 '清除上次绘制的波形
tm = Val(Combo3.Text) / 1000 '采样间隔μs转换为ms
tm2 = tm ^ 2
tm3 = tm / 1000
n = UBound(y)                '引用y()数组上界
If n >= 3 Then       '测量数据3个以上时才绘制波形
n = Int((n - 1) / 2) '分组插值组数
For i = 1 To n       '建立n个插值函数绘制波形
j = 2 * (i - 1) + 1
j1 = j + 1: j2 = j + 2
t0 = (j - 1) * tm: t1 = j * tm: t2 = (j + 1) * tm
For t = t0 To t2 Step tm3 '建立第i个插值函数绘波形
u = (t - t1) * (t - t2) * y(j) * 0.5
u = u - (t - t0) * (t - t2) * y(j1)
u = u + (t - t0) * (t - t1) * y(j2) * 0.5
u = u / tm2
Picture1.PSet (t / Val(Combo1.Text) + oldx, _
oldy - u / Val(Combo2.Text)), QBColor(9)
DoEvents               '可响应其它控件发生的事件
Next t
Next i
GoTo lp
Else
Picture1.Print "无测量数据"
Exit Sub
End If
End If
End Sub
Private Sub Combo1_Click()
Call buo     '改变横轴值/div时,重绘制波形
End Sub
Private Sub Combo2_Click()
Call buo    '改变纵轴值/div时,重绘制波形
End Sub
Private Sub Combo3_Click()
Dim out(0) As Byte, fa As Single
fa = Val(Combo3.Text)
Select Case fa
Case 10          '采样间隔为10微秒时发送1
out(0) = &H1
Case 100        '采样间隔为100微秒时发送2
out(0) = &H2
Case 1000      '采样间隔为1000微秒时发送4
out(0) = &H4
Case 10000    '采样间隔为10000微秒时发送8
out(0) = &H8
End Select
MSComm1.Output = out   '向单片机发送信息
End Sub
Private Sub Command1_Click()
End                '停止测量
End Sub
'初始化
Private Sub Form_Load()
With MSComm1             '串口初始化
.InBufferSize = 1024     '接收缓冲区1024字节
.OutBufferSize = 512     '输出缓冲区512字节
.CommPort = 1            '串口1
.Settings = "1200,n,8,1" '波特率1200,1个停止位,无校验
.Handshaking = comNone   '无协议
.InputLen = 0            '获得接收缓冲区的所有内容
.InputMode = comInputModeBinary '以二进制格式访问
.RThreshold = 7          '接收缓冲区可接收的字节数
.SThreshold = 1         '不发送
.PortOpen = True         '打开串口
End With
ReDim y(0)               '定义y()动态数组
Combo1.Text = 1          '纵横轴初值
Combo2.Text = 1
Combo3.Text = 100        '采样间隔初值
  
'调试程序时使用
Dim yy() As Byte, n As Integer '定义yy()数组
k = 8                    '串口接收的字节数送K
ReDim y(0), yy(7)
yy(0) = 1
yy(1) = &H0              'yy()数组内容(三角波)
yy(2) = &H80
yy(3) = &HFF
yy(4) = &H80
yy(5) = &H0
yy(6) = &H80
yy(7) = &HFF
y(0) = yy(0)           '取出被测摸拟量被衰减的倍数
For i = 2 To k
n = UBound(y)             '当前y()数组上界
ReDim Preserve y(n + 1)   '数组y()增加1个元素
y(n + 1) = yy(i - 1)  '把Byte型数据转换为Sigle型
y(n + 1) = -y(0) * (y(n + 1) / 128 - 1) * 5 '标度变换
Next

End Sub
'建立图片框内的坐标系统
Private Sub Form_Paint()
With Picture1     '使图片框大小随窗体尺寸自动改变
.Top = 200
.Left = 300
.Width = Me.ScaleWidth - 600
.Height = Me.ScaleHeight - 1800
.ScaleMode = 7           '以厘米为单位
oldx = .ScaleWidth / 2   '图片框中心坐标
oldy = .ScaleHeight / 2
.AutoRedraw = True       '使坐标系不被CLS清除
Picture1.Line (oldx, 0)-(oldx, .ScaleHeight), _
RGB(255, 0, 0)           '画纵轴
Picture1.Line (0, oldy)-(.ScaleWidth, oldy), _
RGB(255, 0, 0)           '画横轴
End With
For xt = -14 To 14        '画横轴厘米刻度线
If xt <> 0 Then
Picture1.Line (oldx + xt, oldy - 0.2)-(oldx _
+ xt, oldy), RGB(255, 0, 0)
End If
Next
For xt = -14 To 14 Step 0.1 '画横轴毫米刻度线
If xt <> 0 Then
Picture1.Line (oldx + xt, oldy - 0.1)-(oldx + _
xt, oldy), RGB(255, 0, 0)
End If
Next
For yt = -9 To 9           '画纵轴厘米刻度线
If yt <> 0 Then
Picture1.Line (oldx, oldy + yt)-(oldx + 0.2, _
oldy + yt), RGB(255, 0, 0)
End If
Next
For yt = -9 To 9 Step 0.1  '画纵轴毫米刻度线
If yt <> 0 Then
Picture1.CurrentX = oldx - 0.4
Picture1.CurrentY = oldy + st - 0.1
Picture1.Line (oldx, oldy + yt)-(oldx + 0.1, _
oldy + yt), RGB(255, 0, 0)
End If
Next
End Sub
'把串口接收的数据送y()数组
Private Sub MSComm1_OnComm()
If MSComm1.CommEvent = comEvReceive Then
Dim yy() As Byte, n As Integer
k = MSComm1.InBufferCount '串口接收的字节数送K
Debug.Print k
yy = MSComm1.Input '把串口接收的所有字节(K个)送yy()
ReDim y(0)
y(0) = yy(0)       '取出被测摸拟量被衰减的倍数
For i = 2 To k
n = UBound(y)             '当前y()数组上界
ReDim Preserve y(n + 1)   '数组y()增加1个元素
y(n + 1) = yy(i - 1)  '把Byte型数据转换为Sigle型
y(n + 1) = -y(0) * (y(n + 1) / 128 - 1) * 5 '标度变换
Debug.Print y(n + 1)
Next
End If
End Sub
Private Sub Option1_Click()
'Form1.PrintForm
End Sub
'"测量"画波形
Private Sub Option2_Click()
Call buo     '调画波形过程
End Sub
'计算、显示波形上任一点的值
Private Sub Picture1_MouseDown(Button As Integer, _
Shift As Integer, x As Single, y As Single)
x = (x - oldx) * Val(Combo1.Text) '计算单击处的值
y = (oldy - y) * Val(Combo2.Text)
Picture1.Line (0, 0)-(3, 2), _
Picture1.BackColor, BF           '清除该矩形区
Picture1.CurrentX = 0            '移动光标
Picture1.CurrentY = 0
Picture1.Print "该点数据:"
Picture1.Print "t="; x; "ms"     '显示t值
Picture1.Print "u="; y; "v"      '显示u值
End Sub

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -