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

📄 form1.vb

📁 温度计的数据采集和显示
💻 VB
字号:
Public Class Form1
    'EZ-USB FX2 壏搙幖搙寁梡捠怣僾儘僌儔儉 for VB.NET
    'by takuya matsubara

    'API娭悢偺愰尵
    Public Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" ( _
        ByVal lpFileName As String, _
        ByVal dwDesiredAccess As Integer, _
        ByVal dwShareMode As Integer, _
        ByVal lpSecurityAttributes As Integer, _
        ByVal dwCreationDisposition As Integer, _
        ByVal dwFlagsAndAttributes As Integer, _
        ByVal hTemplateFile As Integer _
    ) As Short

    Public Declare Function DeviceIoControl Lib "kernel32" ( _
        ByVal hDevice As Integer, _
        ByVal dwIoControlCode As Integer, _
        ByRef lpInBuffer As Integer, _
        ByVal nInBufferSize As Integer, _
        ByRef lpOutBuffer As Byte, _
        ByVal nOutBufferSize As Integer, _
        ByRef lpBytesReturned As Integer, _
        ByVal lpOverlapped As Integer _
    ) As Integer

    Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Short) As Short

    Private Function ADcount_to_v(ByVal count As Short) As Double
        ADcount_to_v = 3.3 * count / 4095
    End Function

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        '壏搙幖搙寁應
        Const NULL = 0
        Const IOCTL_EZUSB_BULK_WRITE = ((&H220000) + ((&H800 + 20) * 4) + 1)
        Const IOCTL_EZUSB_BULK_READ = ((&H220000) + ((&H800 + 19) * 4) + 2)
        Const GENERIC_READ = &H80000000     '撉傒庢傝梡掕悢
        Const GENERIC_WRITE = &H40000000    '彂偒崬傒梡掕悢
        Const OPEN_EXISTING = 3             '婛懚偺僼傽僀儖偺張棟曽朄
        Const OUTPIPENUMBER = 0             'OUT僷僀僾斣崋
        Const INPIPENUMBER = 2              'IN僷僀僾斣崋
        Const OUTPACKETSIZE = 1             'OUT僷働僢僩僒僀僘
        Const INPACKETSIZE = 6              'IN僷働僢僩僒僀僘
        Const PIPESIZE = 4                  '僷僀僾忣曬僨乕僞僒僀僘
        Const FILE_SHARE_WRITE = &H2
        Const TBLRMAX = 5                   '僥乕僽儖峴悢
        Const TBLHMAX = 9                   '僥乕僽儖楍悢
        Const HUMIDMIN = 20                 '幖搙僥乕僽儖撪偺嵟掅幖搙[%]
        Const SENSOR_OHM = 4.7              '僙儞僒偵愙懕偟偰偄傞掞峈抣[k兌]
        Const VCC = 3.3                     'VCC揹埑[V]  

        Dim tData(OUTPACKETSIZE) As Byte    'PC-->USB Device
        Dim rData(INPACKETSIZE) As Byte     'PC<--USB Device   
        Dim hDevice As Short
        Dim lPipeNum As Integer
        Dim lByteCnt As Integer
        Dim vout As Double
        Dim temp As Double      ' 壏搙
        Dim ohm As Double
        Dim v1 As Double
        Dim v2 As Double
        Dim humid As Double     ' 幖搙
        Dim t, h As Short
        Dim font1 As New Font("俵俽丂僑僔僢僋", 64, GraphicsUnit.Pixel)
        Dim gp As Graphics = PictureBox1.CreateGraphics()

        '掞峈抣-幖搙曄姺[k兌]
        Dim tblHumid(,) As Double = { _
         {50000, 10000, 2000, 400, 150, 45, 14, 5, 3}, _
         {30000, 3000, 500, 150, 50, 20, 6.5, 2, 1.7}, _
         {8000, 1000, 200, 60, 20, 8, 3, 1.5, 0.8}, _
         {2500, 400, 80, 25, 10, 4, 1.8, 0.85, 0.4}, _
         {900, 150, 35, 15, 5, 1.5, 1, 0.5, 0.25} _
        }

        '夞慄僆乕僾儞
        hDevice = CreateFile( _
            "\\.\ezusb-0", _
            GENERIC_WRITE + GENERIC_READ, _
            FILE_SHARE_WRITE, _
            NULL, _
            OPEN_EXISTING, _
            0, _
            NULL _
        )

        If (hDevice < 0) Then
            MsgBox("Can't use USB Device", vbCritical)  '僆乕僾儞偺幐攕
            End
        End If

        tData(0) = 0        '憲怣僨乕僞

        '僨乕僞揮憲 PC --> USB Device
        lPipeNum = OUTPIPENUMBER
        DeviceIoControl( _
            hDevice, IOCTL_EZUSB_BULK_WRITE, _
            lPipeNum, PIPESIZE, _
            tData(0), OUTPACKETSIZE, _
            lByteCnt, 0 _
        )

        '僨乕僞揮憲 PC <-- USB Device
        lPipeNum = INPIPENUMBER
        DeviceIoControl( _
            hDevice, IOCTL_EZUSB_BULK_READ, _
            lPipeNum, PIPESIZE, _
            rData(0), INPACKETSIZE, _
            lByteCnt, 0 _
        )

        CloseHandle(hDevice)    '夞慄偺僋儘乕僘

        vout = ADcount_to_v((&H100 * rData(1)) + rData(0))  '僇僂儞僩抣偐傜揹埑偵曄姺
        v1 = ADcount_to_v((&H100 * rData(3)) + rData(2))    '僇僂儞僩抣偐傜揹埑偵曄姺
        v2 = ADcount_to_v((&H100 * rData(5)) + rData(4))    '僇僂儞僩抣偐傜揹埑偵曄姺

        '-----------------------------揹埑偐傜壏搙傊曄姺
        temp = vout * 100           ' 壏搙傪嶼弌

        '-----------------------------揹埑偐傜幖搙傊曄姺
        If (v1 > v2) Then
            ohm = v2 / ((v1 - v2) / SENSOR_OHM)
        Else
            ohm = (VCC - v2) / ((v2 - v1) / SENSOR_OHM)
        End If

        ' 掞峈抣偐傜幖搙傊曄姺
        t = temp
        t = t - 5
        If (t < 0) Then t = 0 '5亷埲壓偺応崌偼5亷愝掕
        t = t / 10
        If (t >= TBLRMAX) Then t = TBLRMAX - 1 '45亷埲忋偼45亷愝掕

        For h = 0 To TBLHMAX - 1
            If (tblHumid(t, h) < ohm) Then
                If (h = 0) Then
                    humid = HUMIDMIN '幖搙20%埲壓側傜20%愝掕
                    Exit For
                Else
                    humid = h * 10 + HUMIDMIN
                    humid = humid - (10 * (ohm - tblHumid(t, h)) / (tblHumid(t, h - 1) - tblHumid(t, h)))
                    Exit For
                End If
            End If
        Next
        If (h = TBLHMAX) Then humid = 100 '幖搙100%埲忋側傜100%愝掕

        '-------------------壏搙偲幖搙傪夋柺偵昞帵

        '僺僋僠儍儃僢僋僗傪敀偵揾傝偮傇偡
        gp.FillRectangle(Brushes.White, gp.VisibleClipBounds)

        '暥帤偺昤夋
        gp.DrawString("壏搙=" + Format(temp, "##.#") + "亷", font1, Brushes.Black, 0, 0)
        gp.DrawString("幖搙=" + Format(humid, "##.#") + "亾", font1, Brushes.Black, 0, 120)

        font1.Dispose() ' Font僆僽僕僃僋僩傪攋婞偟傑偡丅
        gp.Dispose()
    End Sub
End Class

⌨️ 快捷键说明

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