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

📄 frmmain.frm

📁 VB与单片机通信实现智能照明温度控制示例 包括Vb代码和C代码
💻 FRM
字号:
VERSION 5.00
Object = "{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.0#0"; "MSCOMCTL.OCX"
Object = "{648A5603-2C6E-101B-82B6-000000000014}#1.1#0"; "MSCOMM32.OCX"
Begin VB.Form FrmMain 
   Caption         =   "智能照明控制系统"
   ClientHeight    =   8865
   ClientLeft      =   60
   ClientTop       =   450
   ClientWidth     =   10935
   LinkTopic       =   "Form1"
   ScaleHeight     =   8865
   ScaleWidth      =   10935
   StartUpPosition =   3  '窗口缺省
   Begin VB.CommandButton CmdRefresh 
      Caption         =   "刷新"
      Height          =   495
      Left            =   9120
      TabIndex        =   8
      Top             =   480
      Width           =   1335
   End
   Begin VB.CommandButton CmdScan 
      Caption         =   "初始化"
      Height          =   495
      Left            =   9120
      TabIndex        =   7
      Top             =   1320
      Width           =   1335
   End
   Begin VB.OptionButton OptManualDisable 
      Caption         =   "自动"
      Height          =   495
      Left            =   9240
      TabIndex        =   6
      Top             =   5760
      Width           =   855
   End
   Begin VB.OptionButton OptManualEnable 
      Caption         =   "手动"
      Height          =   495
      Left            =   9240
      TabIndex        =   5
      Top             =   5160
      Width           =   855
   End
   Begin VB.Frame Frame1 
      Caption         =   "控制模式"
      Height          =   1455
      Left            =   9120
      TabIndex        =   4
      Top             =   4920
      Width           =   1455
   End
   Begin VB.CommandButton CmdAdjTimer 
      Caption         =   "时钟同步"
      Height          =   495
      Left            =   9120
      TabIndex        =   3
      Top             =   2160
      Width           =   1335
   End
   Begin VB.CommandButton CmdTimer 
      Caption         =   "定时"
      Height          =   495
      Left            =   9120
      TabIndex        =   2
      Top             =   3840
      Width           =   1335
   End
   Begin VB.CommandButton CmdLight 
      Caption         =   "灯光控制"
      Height          =   495
      Left            =   9120
      TabIndex        =   1
      Top             =   3000
      Width           =   1335
   End
   Begin MSCommLib.MSComm MSComm 
      Left            =   10080
      Top             =   120
      _ExtentX        =   1005
      _ExtentY        =   1005
      _Version        =   393216
      DTREnable       =   -1  'True
   End
   Begin MSComctlLib.TreeView TView 
      Height          =   7695
      Left            =   480
      TabIndex        =   0
      Top             =   480
      Width           =   8175
      _ExtentX        =   14420
      _ExtentY        =   13573
      _Version        =   393217
      HideSelection   =   0   'False
      LineStyle       =   1
      Sorted          =   -1  'True
      Style           =   6
      Checkboxes      =   -1  'True
      Appearance      =   1
      BeginProperty Font {0BE35203-8F91-11CE-9DE3-00AA004BB851} 
         Name            =   "宋体"
         Size            =   9
         Charset         =   134
         Weight          =   400
         Underline       =   0   'False
         Italic          =   0   'False
         Strikethrough   =   0   'False
      EndProperty
   End
End
Attribute VB_Name = "FrmMain"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit
Private Sub Form_Load()
    Load FrmComPort
    FrmComPort.Visible = True
    FrmComPort.Show
    While FrmComPort.Visible = True
        DoEvents
        Sleep 50
    Wend
    MSComm.CommPort = FrmComPort.ComPort
    MSComm.RThreshold = 0
    MSComm.SThreshold = 0
    MSComm.DTREnable = False
    MSComm.EOFEnable = False
    MSComm.RTSEnable = False
    MSComm.InBufferCount = 0
    MSComm.OutBufferCount = 0
    MSComm.NullDiscard = False
    MSComm.Settings = "9600,n,8,1"
    MSComm.PortOpen = True
    MSComm.InputMode = comInputModeBinary
End Sub
Private Sub CmdScan_Click()
    Load FrmInitDev
    FrmInitDev.Visible = True
    FrmInitDev.Show
    FrmMain.Hide
    
    Dim i As Byte
    Dim CmdPing(2) As Byte
    FrmMain.TView.Nodes.Clear
    FrmMain.TView.Nodes.Add , , "Building", "大楼"
    GenCmd CmdPing, CMD_PING
    For i = 1 To 10
        FrmInitDev.LblDev.Caption = i
        FrmInitDev.ProgressBar.Value = i
        If SendCommand(CmdPing, i, TIMEOUT_WAITCLIENT) Then
            AddDevice i
        End If
    Next i
    Unload FrmInitDev
    FrmMain.Show
End Sub
Public Sub AddDevice(id As Byte)
    Dim DevInfo, DevData As String
    DevInfo = QueryDeviceInfo(id)
    DevData = QueryDeviceData(id)
    TView.Nodes.Add "Building", tvwChild, "F" & id, DevInfo + ":" + DevData
End Sub
Private Sub CmdAdjTimer_Click()
    Dim Cmd(5) As Byte
    Cmd(2) = Hour(Time)
    Cmd(3) = Minute(Time)
    Cmd(4) = Second(Time) + 1
    GenCmd Cmd, CMD_ADJ_TIMER
        If Not SendGroupCmd(Cmd, TIMEOUT_WAITREPLY) Then
            MsgBox "发送命令失败"
        End If
    RefreshDevice
End Sub

Private Sub CmdAirCon_Click()
    Dim CmdAir(3) As Byte
    g_Cancel = True
    Load FrmAirCon
    FrmAirCon.Visible = True
    FrmAirCon.Show
    While FrmAirCon.Visible = True
        DoEvents
        Sleep 50
    Wend
    If Not g_Cancel Then
        CmdAir(2) = FrmAirCon.AirCon
        GenCmd CmdAir, CMD_CON_AIRCON
        
        If Not SendGroupCmd(CmdAir, TIMEOUT_WAITREPLY) Then
            MsgBox "发送命令失败"
        End If
    End If
    RefreshDevice
End Sub
Private Sub CmdLight_Click()
    Dim CmdLight(3) As Byte
    g_Cancel = True
    Load FrmLight
    FrmLight.Visible = True
    FrmLight.Show
    While FrmLight.Visible = True
        DoEvents
        Sleep 50
    Wend
    If Not g_Cancel Then
        CmdLight(2) = FrmLight.Light
        GenCmd CmdLight, CMD_CON_LIGHT
        If Not SendGroupCmd(CmdLight, TIMEOUT_WAITREPLY) Then
            MsgBox "发送命令失败"
        End If
    End If
    RefreshDevice
End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
Unload FrmAirCon
Unload FrmComPort
Unload FrmLight
Unload FrmTimer
Unload Me
End Sub


Private Sub OptManualDisable_Click()
    Dim CmdMan(2) As Byte
    If OptManualDisable.Value = True Then
    GenCmd CmdMan, CMD_DISABLE_MANUAL_CON
    If Not SendGroupCmd(CmdMan, 500) Then
            MsgBox "发送命令失败"
    End If
    End If
    RefreshDevice
End Sub

Private Sub OptManualEnable_Click()
    Dim CmdMan(2) As Byte
    If OptManualEnable.Value = True Then
    GenCmd CmdMan, CMD_ENABLE_MANUAL_CON
    If Not SendGroupCmd(CmdMan, 500) Then
            MsgBox "发送命令失败"
    End If
    End If
    RefreshDevice
End Sub

Private Sub CmdTimer_Click()
    Dim Cmd(6) As Byte
    Dim i As Byte
    Load FrmTimer
    FrmTimer.Visible = True
    FrmTimer.Show
    While FrmTimer.Visible = True
        DoEvents
        Sleep 50
    Wend
    If Not g_Cancel Then
        Cmd(2) = FrmTimer.HourUp
        Cmd(3) = FrmTimer.MinuteUp
        Cmd(4) = FrmTimer.HourDown
        Cmd(5) = FrmTimer.MinuteDown
        GenCmd Cmd, CMD_SETTIMER_POWER
        If Not SendGroupCmd(Cmd, TIMEOUT_WAITREPLY) Then
            MsgBox "发送命令失败"
        End If
    End If
    RefreshDevice
End Sub

Private Sub CmdRefresh_Click()
    RefreshDevice
End Sub
Public Sub RefreshDevice()
    Dim i As Node
    Dim id As Byte
    For Each i In FrmMain.TView.Nodes
        If i.Children = 0 And i.Key <> "Building" Then
            id = CByte(Right(i.Key, Len(i.Key) - 1))
            i.Text = Left(i.Text, InStr(i.Text, ":"))
            i.Text = i.Text + QueryDeviceData(id)
        End If
    Next i
End Sub

Private Sub TView_NodeCheck(ByVal Node As MSComctlLib.Node)
    Dim NChild As Node
    Set NChild = Node.Child
    While Not NChild Is Nothing
        NChild.Checked = Node.Checked
        TView_NodeCheck NChild
        Set NChild = NChild.Next
    Wend
End Sub



Public Function QueryDeviceInfo(id As Byte) As String
    Dim Cmd(3) As Byte
    GenCmd Cmd, CMD_QUERY_ROOM
    If SendCommand(Cmd, id, TIMEOUT_WAITREPLY) Then
        If Cmd(2) < 10 Then
            QueryDeviceInfo = CStr(Cmd(1)) + "0" + CStr(Cmd(2)) + "室"
        Else
            QueryDeviceInfo = CStr(Cmd(1)) + CStr(Cmd(2)) + "室"
        End If
        Exit Function
    End If
    QueryDeviceInfo = "Fail"
End Function
Public Function QueryDeviceData(id As Byte) As String
    Dim Cmd(8) As Byte
    Dim i As Byte
    Dim sLight As String
    GenCmd Cmd, CMD_QUERY_DATA
    If SendCommand(Cmd, id, TIMEOUT_WAITREPLY) Then
        sLight = " "
        For i = 0 To 5
            If Cmd(5) Mod 2 = 1 Then
                sLight = sLight + "○"
            Else
                sLight = sLight + "●"
            End If
            Cmd(5) = Int(Cmd(5) / 2)
        Next i
        QueryDeviceData = "灯:" + sLight
        QueryDeviceData = QueryDeviceData + " 光强:" + CStr(Cmd(1))

        QueryDeviceData = QueryDeviceData + " 温度:" + CStr(Cmd(2)) + "." + CStr(Cmd(3)) + "℃"
        If Cmd(7) = 1 Then
            QueryDeviceData = QueryDeviceData + " 手动 "
        Else
            QueryDeviceData = QueryDeviceData + " 自动 "
        End If
        
        
        Select Case Cmd(4)
            Case 0
                QueryDeviceData = QueryDeviceData + " 区域1:无人 区域2:无人"
            Case 1
                QueryDeviceData = QueryDeviceData + " 区域1:有人 区域2:无人"
            Case 2
                QueryDeviceData = QueryDeviceData + " 区域1:无人 区域2:有人"
            Case 3
                QueryDeviceData = QueryDeviceData + " 区域1:有人 区域2:有人"
        End Select
        
        Exit Function
    End If
    QueryDeviceData = "Fail"
End Function



⌨️ 快捷键说明

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