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

📄 form1.frm

📁 用MSComm控件收发串口数据,此为我做项目时的一个测试例程
💻 FRM
字号:
VERSION 5.00
Object = "{648A5603-2C6E-101B-82B6-000000000014}#1.1#0"; "MSCOMM32.OCX"
Begin VB.Form Form1 
   Caption         =   "Form1"
   ClientHeight    =   8265
   ClientLeft      =   60
   ClientTop       =   450
   ClientWidth     =   7170
   LinkTopic       =   "Form1"
   ScaleHeight     =   8265
   ScaleWidth      =   7170
   StartUpPosition =   3  '窗口缺省
   Begin VB.CheckBox Check1 
      Caption         =   "Check1"
      Height          =   375
      Left            =   6000
      TabIndex        =   12
      Top             =   240
      Width           =   1095
   End
   Begin VB.CommandButton Command4 
      Caption         =   "Command4"
      Height          =   495
      Left            =   5160
      TabIndex        =   11
      Top             =   7200
      Width           =   1215
   End
   Begin VB.CommandButton Command3 
      Caption         =   "Command3"
      Height          =   495
      Left            =   2280
      TabIndex        =   10
      Top             =   240
      Width           =   1095
   End
   Begin VB.ListBox List1 
      Height          =   5460
      Left            =   5040
      TabIndex        =   9
      Top             =   840
      Width           =   1455
   End
   Begin VB.Timer Timer1 
      Interval        =   1000
      Left            =   1200
      Top             =   5640
   End
   Begin VB.CommandButton Command2 
      Caption         =   "Command2"
      Height          =   495
      Left            =   480
      TabIndex        =   8
      Top             =   1920
      Width           =   2415
   End
   Begin VB.TextBox Text1 
      Height          =   3975
      Left            =   120
      MultiLine       =   -1  'True
      ScrollBars      =   2  'Vertical
      TabIndex        =   7
      Top             =   2760
      Width           =   2655
   End
   Begin VB.CommandButton Command1 
      Caption         =   "显示"
      Height          =   495
      Left            =   120
      TabIndex        =   6
      Top             =   2280
      Width           =   1215
   End
   Begin VB.CommandButton btn接收2 
      Caption         =   "接收2"
      Height          =   495
      Left            =   4800
      TabIndex        =   5
      Top             =   240
      Width           =   855
   End
   Begin VB.CommandButton btn发送2 
      Caption         =   "发送2"
      Height          =   495
      Left            =   1320
      TabIndex        =   4
      Top             =   240
      Width           =   855
   End
   Begin VB.TextBox txt接收 
      Height          =   7335
      Left            =   2880
      MultiLine       =   -1  'True
      ScrollBars      =   2  'Vertical
      TabIndex        =   3
      Top             =   840
      Width           =   1695
   End
   Begin VB.TextBox txt发送 
      Height          =   1215
      Left            =   120
      TabIndex        =   2
      Text            =   "1"
      Top             =   840
      Width           =   2535
   End
   Begin VB.CommandButton btn接收1 
      Caption         =   "接收1"
      Height          =   495
      Left            =   3720
      TabIndex        =   1
      Top             =   240
      Width           =   855
   End
   Begin VB.CommandButton btn发送1 
      Caption         =   "发送1"
      Height          =   495
      Left            =   240
      TabIndex        =   0
      Top             =   240
      Width           =   855
   End
   Begin MSCommLib.MSComm MSComm1 
      Left            =   1560
      Top             =   2280
      _ExtentX        =   1005
      _ExtentY        =   1005
      _Version        =   393216
      DTREnable       =   -1  'True
      ParityReplace   =   0
      RThreshold      =   34
   End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Dim byteInputBuffer() As Byte
Dim byteInputI As Integer
Dim strInputBuffer As String
Dim flag As Boolean     '是文本方式(true)还是二进制方式(false)
Dim ComWork As Integer  '串口是否在5次内采集过

Private Function jisuan(ii As Byte, jj As Byte, kk As Byte) As Single
Dim sum As Single       '值
Dim n As Integer        '指数
Dim flag As Boolean     'true正数,false负数
Dim sTmp As String       '二三位的16位字符串
If ii >= 128 Then       '1为负数
    flag = False
    n = 128 - ii
Else                    '0为正数
    flag = True
    n = ii
End If

Dim i As Integer
sTmp = dec2bin(jj, 8) + dec2bin(kk, 8)
sum = 0
For i = 1 To 16
    If Mid(sTmp, i, 1) = "1" Then
        sum = sum + (2 ^ (n - i))
    End If
Next i

If flag < 0 Then
    sum = sum
Else
    sum = -sum
End If

jisuan = sum
End Function
Private Function dec2bin(number As Byte, lenth As Byte) As String
Dim sTmp As String
sTmp = ""

If number = 0 Then
    sTmp = "0"
Else
    Do Until number = 0
        If number Mod 2 = 1 Then
            sTmp = "1" + sTmp
        Else
            sTmp = "0" + sTmp
        End If
        number = number \ 2    '整除
    Loop
End If

Dim i As Integer
Dim stmpl As Integer
stmpl = Len(sTmp)
If lenth > 1 Then
    For i = 1 To lenth - stmpl
        sTmp = "0" + sTmp
    Next i
End If

dec2bin = sTmp
End Function
Private Sub btn发送1_Click()
'文本方式
flag = True
MSComm1.InputMode = comInputModeText
MSComm1.Output = txt发送.Text
End Sub

Private Sub btn发送2_Click()
'二进制方式
flag = False
Dim send(0 To 0) As Byte

MSComm1.InputMode = comInputModeBinary
'send(0) = 1: MSComm1.Output = send: Sleep (20)
'send(0) = 2: MSComm1.Output = send: Sleep (20)
'send(0) = 3: MSComm1.Output = send: Sleep (20)
'send(0) = 4: MSComm1.Output = send: Sleep (20)
'send(0) = 5: MSComm1.Output = send: Sleep (20)
'send(0) = 6: MSComm1.Output = send: Sleep (20)
'        send(0) = &H0: MSComm1.Output = send: Sleep (20)  '发送前3个  头  全为0
'        send(0) = &H0: MSComm1.Output = send: Sleep (20)  '发送前3个  头  全为0
'        send(0) = &H0: MSComm1.Output = send: Sleep (20)  '发送前3个  头  全为0
'
'        MSComm1.Settings = "1200,m,8,1" 'm
'
'        send(0) = &H12: MSComm1.Output = send: Sleep (20) '发送第4个  分站地址
'        send(0) = &HED: MSComm1.Output = send: Sleep (20) '发送第5个  分站地址反码
'        send(0) = &H3: MSComm1.Output = send: Sleep (20)  '发送第6个  数据个数    3个
'        send(0) = &H43: MSComm1.Output = send: Sleep (20) '发送第7个  C的ASCII码  43
'        send(0) = &H1: MSComm1.Output = send: Sleep (20)  '发送第8个  断电数据    ??
'        send(0) = &HFE: MSComm1.Output = send: Sleep (20) '发送第9个  断电数据反码
'        send(0) = &H1: MSComm1.Output = send: Sleep (20) '发送第10个 数据和高位  0
'        send(0) = &H45: MSComm1.Output = send: Sleep (20) '发送第11个 数据和地位 42
        MSComm1.Settings = "1200,s,8,1"
        send(0) = &H0: MSComm1.Output = send: Sleep (20)  '发送前5个  头  全为0
        send(0) = &H0: MSComm1.Output = send: Sleep (20)  '发送前5个  头  全为0
        send(0) = &H0: MSComm1.Output = send: Sleep (20)  '发送前5个  头  全为0
        send(0) = &H0: MSComm1.Output = send: Sleep (20)  '发送前5个  头  全为0
        send(0) = &H0: MSComm1.Output = send: Sleep (20)  '发送前5个  头  全为0
        
        MSComm1.Settings = "1200,m,8,1" 'm
        
        send(0) = &H1: MSComm1.Output = send: Sleep (20) '发送第6个  分站地址
        send(0) = &HFE: MSComm1.Output = send: Sleep (20) '发送第7个  分站地址反码
        send(0) = &H1: MSComm1.Output = send: Sleep (20)  '发送第8个  数据个数    1个
        send(0) = &H41: MSComm1.Output = send: Sleep (20) '发送第9个  A的ASCII码  41
        send(0) = &H0: MSComm1.Output = send: Sleep (20) '发送第10个 数据和高位  0
        send(0) = &H42: MSComm1.Output = send: Sleep (20) '发送第11个 数据和地位 42
End Sub

Private Sub btn接收1_Click()
txt接收.Text = Str(MSComm1.InBufferCount)
txt接收.Text = txt接收.Text + " * " + MSComm1.Input
End Sub

Private Sub btn接收2_Click()
Dim arrays() As Byte
Dim i As Integer

i = MSComm1.InBufferCount
ReDim arrays(i) As Byte
arrays = MSComm1.Input
txt接收.Text = Str(i)
'txt接收.Text = txt接收.Text + " * " + Str(arrays(0)) + " * " + Str(arrays(1))
For i = 0 To i - 1
    txt接收.Text = txt接收.Text + Chr(13) + Chr(10) + Hex(arrays(i)) + "   :" + Str(arrays(i))
Next i
''''''''List1.AddItem (Str(arrays(0)))
End Sub

Private Sub Command1_Click()
On Error GoTo aa
If (UBound(byteInputBuffer) - LBound(byteInputBuffer) + 1) = 34 Then
    Dim i As Integer
    If (flag) Then
        txt接收.Text = "*" + strInputBuffer
    Else
        txt接收.Text = "字节数:" + Str(byteInputI)
        For i = 0 To byteInputI - 1
            txt接收.Text = txt接收.Text + Chr(13) + Chr(10) + Hex(byteInputBuffer(i)) + "   :" + Str(byteInputBuffer(i))
        Next i
    
        Text1.Text = "一号:" + Hex(byteInputBuffer(6)) + " : " + Hex(byteInputBuffer(7)) + " : " + Hex(byteInputBuffer(8)) + Chr(13) + Chr(10)
        Text1.Text = Text1.Text + "二号:" + Hex(byteInputBuffer(9)) + " : " + Hex(byteInputBuffer(10)) + " : " + Hex(byteInputBuffer(11)) + Chr(13) + Chr(10)
        Text1.Text = Text1.Text + "三号:" + Hex(byteInputBuffer(12)) + " : " + Hex(byteInputBuffer(13)) + " : " + Hex(byteInputBuffer(14)) + Chr(13) + Chr(10)
        Text1.Text = Text1.Text + "四号:" + Hex(byteInputBuffer(15)) + " : " + Hex(byteInputBuffer(16)) + " : " + Hex(byteInputBuffer(17)) + Chr(13) + Chr(10)
        Text1.Text = Text1.Text + "五号:" + Hex(byteInputBuffer(18)) + " : " + Hex(byteInputBuffer(19)) + " : " + Hex(byteInputBuffer(20)) + Chr(13) + Chr(10)
        Text1.Text = Text1.Text + "六号:" + Hex(byteInputBuffer(21)) + " : " + Hex(byteInputBuffer(22)) + " : " + Hex(byteInputBuffer(23)) + Chr(13) + Chr(10)
        Text1.Text = Text1.Text + "七号:" + Hex(byteInputBuffer(24)) + " : " + Hex(byteInputBuffer(25)) + " : " + Hex(byteInputBuffer(26)) + Chr(13) + Chr(10)
        Text1.Text = Text1.Text + "八号:" + Hex(byteInputBuffer(27)) + " : " + Hex(byteInputBuffer(28)) + " : " + Hex(byteInputBuffer(29)) + Chr(13) + Chr(10)
        Text1.Text = Text1.Text + Str(jisuan(byteInputBuffer(6), byteInputBuffer(7), byteInputBuffer(8))) + Chr(13) + Chr(10)
        Text1.Text = Text1.Text + "*" + Chr(13) + Chr(10)
        Text1.Text = Text1.Text + "*" + Chr(13) + Chr(10)
        Text1.Text = Text1.Text + "*" + Chr(13) + Chr(10)
        Text1.Text = Text1.Text + "*" + Chr(13) + Chr(10)
        Text1.Text = Text1.Text + "*" + Chr(13) + Chr(10)
        Text1.Text = Text1.Text + "*" + Chr(13) + Chr(10)
        Text1.Text = Text1.Text + "*" + Chr(13) + Chr(10)
        Text1.Text = Text1.Text + "*" + Chr(13) + Chr(10)
        Text1.Text = Text1.Text + "*" + Chr(13) + Chr(10)
        Text1.Text = Text1.Text + "*" + Chr(13) + Chr(10)
        Text1.Text = Text1.Text + "*" + Chr(13) + Chr(10)
        Text1.Text = Text1.Text + "*" + Chr(13) + Chr(10)
        Text1.Text = Text1.Text + "*" + Chr(13) + Chr(10)
    End If
Else
    Text1.Text = "**"
End If
Exit Sub
aa:
    Text1.Text = "??"
End Sub

Private Sub Command2_Click()
'Text1.Text = jisuan(5, 216, 255)
Dim ss(0 To 1) As Byte
Text1.Text = (UBound(byteInputBuffer) - LBound(byteInputBuffer) + 1)
End Sub

Private Sub Command3_Click()
'二进制方式

Dim send1(1 To 11) As Byte
Dim send() As Byte



MSComm1.InputMode = comInputModeBinary
        MSComm1.Settings = "1200,m,8,1"
        
    If flag Then
        flag = False
        ReDim send(11)
        send(1) = &H0  '发送前5个  头  全为0
        send(2) = &H0  '发送前5个  头  全为0
        send(3) = &H0  '发送前5个  头  全为0
        send(4) = &H0  '发送前5个  头  全为0
        send(5) = &H0  '发送前5个  头  全为0


        send(6) = &H1 '发送第6个  分站地址
        send(7) = &HFE '发送第7个  分站地址反码
        send(8) = &H1  '发送第8个  数据个数    1个
        send(9) = &H41 '发送第9个  A的ASCII码  41
        send(10) = &H0 '发送第10个 数据和高位  0
        send(11) = &H42 '发送第11个 数据和地位 42
    Else
        flag = True
        ReDim send(9)
        send(1) = &H0  '发送前3个  头  全为0
        send(2) = &H0  '发送前3个  头  全为0
        send(3) = &H1  '发送前3个  头  全为0



        send(4) = &H0 '发送第6个  分站地址
        send(5) = &HFF '发送第7个  分站地址反码
        send(6) = &H1  '发送第8个  数据个数    1个
        send(7) = &H41 '发送第9个  A的ASCII码  41
        send(8) = &H0 '发送第10个 数据和高位  0
        send(9) = &H42 '发送第11个 数据和地位 42
    End If
        
        
        
        
        
        MSComm1.Output = send

End Sub

Private Sub Command4_Click()
MSComm1.Settings = "1200,s,8,1"
If Check1.Value Then
    Check1.Value = False
Else
    Check1.Value = True
End If
End Sub

Private Sub Form_Load()
MSComm1.CommPort = 1
'MSComm1.Settings = "1200,s,8,1"
MSComm1.PortOpen = True
ComWork = 0     '
End Sub

Private Sub Form_Unload(Cancel As Integer)
MSComm1.PortOpen = False
End Sub

Private Sub MSComm1_OnComm()
''If (flag) Then
''    strInputBuffer = MSComm1.Input     '文本方式
''Else
''    byteInputI = MSComm1.InBufferCount
''    ReDim byteInputBuffer(byteInputI) As Byte
''    byteInputBuffer = MSComm1.Input
''    ComWork = -1
''End If
End Sub

Private Sub Timer1_Timer()
''btn发送2_Click
''If ComWork < 0 Then
''    ComWork = 0
''    Command1_Click
''End If
''ComWork = ComWork + 1
End Sub

Private Sub Timer2_Timer()
'Command1_Click
End Sub

⌨️ 快捷键说明

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