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

📄 modulecom.bas

📁 完整的VB和单片机系统连接的源代码
💻 BAS
字号:
Attribute VB_Name = "ModuleCom"
Option Explicit

Dim CmdQueue(0 To ComCmdMax) As String


'串口起止标志
Public Enum enum_ComFlag
    comStartflag = 64        '@
    comEndflag = 33        '!
End Enum


'串口状态
Public Enum enum_Comstate
        Free
        Busy
End Enum

Public Type type_Com
    
    State As enum_Comstate
    port As Boolean
    
    RCmdLen As Integer
    SCmdLen As Integer
    
    RByteNum As Integer
    SByteNum As Integer
    
    ReceiveWaitTime As Integer
    ReceiveWaitTimeConst As Integer
End Type

Public com As type_Com





Sub InitComStatus()
    com.State = Free
    com.RCmdLen = 11
    com.SCmdLen = 11
    com.ReceiveWaitTimeConst = 3
End Sub



Public Sub ComConnect()                        '连接串口
    ComSendAnalize SendIs_Connect, 0, 0
End Sub


Public Sub ComReceiveOneByte(Val As String)      '处理一个确定的ascii字符
    Static CmdBuf As String
    Static Index As Integer
    If Len(Val) <> 1 Then MsgBox "串口字串" & Val & "长度=" & Str(Len(Val))
    If Index = 0 Then '没有开始接收
        If Asc(Val) = comStartflag Then '收到起始标志
            Index = 1
        End If
    ElseIf Index > com.RCmdLen Then '溢出放弃
        Index = 0
        CmdBuf = ""
    ElseIf Asc(Val) = comEndflag Then '收到结束标志
        Index = 0
        PushReceiveCommand CmdBuf
        'frmDebug.ComReceive CmdBuf
        CmdBuf = ""
    Else                                '正常接收
        Index = Index + 1
        CmdBuf = CmdBuf & Val
    End If
End Sub

Private Sub PushReceiveCommand(s As String)     '命令队列覆盖刷新
    Dim i As Integer
    If s = "" Then Exit Sub
    i = Asc(Left(s, 1)) - Asc("A")
    If i < 0 Or i > ComCmdMax Then Exit Sub
    CmdQueue(i) = s
    frmMain.TimerComR.Interval = 1
    frmMain.shpTest.FillColor = vbRed '
End Sub
Public Sub myComReceiveAnalize()     '定时调用以刷新显示
    Dim i As Integer
    Dim s As String
    Static b As Boolean
    If b = True Then
        MsgBox "重入"
        b = False
        Exit Sub
    End If
    b = True
    frmMain.TimerComR.Interval = 0
    frmMain.TimerComR.Enabled = False
    For i = 0 To ComCmdMax
        s = CmdQueue(i)
        If s <> "" Then
            CmdQueue(i) = ""
            ComReceiveAnalize s
            frmDebug.ComReceive0 s
        End If
    Next
    frmMain.TimerComR.Enabled = True
    frmMain.shpTest.FillColor = vbBlack '
    b = False
End Sub

⌨️ 快捷键说明

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