《匠人手记》推荐网上购书渠道:
互动出版网(china-pub)购书入口   >>>
当当网(dangdang)购书入口   >>>
卓越亚马逊网 购书入口   >>>
淘宝网(taobao)购书入口   >>>
更多购书渠道……   >>> 

设为首页加入收藏联系匠人管理入口21IC首页21IC博客21IC社区侃单片机回复的贴参与的贴

天气预报
百宝日历
载入中...

百宝专栏

载入中...
最新货色

载入中...

粉丝评论

载入中...

载入中...



百宝信息

载入中...

百宝流量

(2006-07-01开始)


匠人手记

 匠人观点: 好记性不如烂笔头  
 黑色幽默:三鹿门——后世畅想

VB串口通讯实例
程序匠人 发表于 2005-9-22 14:23:00  阅读全文 | 回复(0) | 引用通告 | 编辑

VB串口通讯实例
作者:liwenzhao
高精度电压表(24bit)  VB源程序
Dim PortValue As Integer    '端口号选择1-4
Dim value As Double         '当前一次取值
Dim value2 As Double        '要显示的值
Dim valueSum As Double        '和
Dim numCount As Double      '算平均值是的计数个数
Dim func As Integer         '功能号标志1-4
Dim valueFlag As Integer
Private Sub Check1_Click()
'自动刷新 被选中则 刷新按钮无效
If Check1.value Then
    Command1.Enabled = False
Else
    Command1.Enabled = True
   
    Command1.SetFocus
End If
End Sub
Private Sub Command1_Click()
    '显示
    Call display
End Sub
Private Sub Command2_Click()
    valueSum = 0 '清计数和
    numCount = 1 '清计数个数
    Label6.Caption = Str(numCount - 1) '显示复位
    value = 0
    value2 = 0
    valueFlag = 0
    Call display
End Sub
Private Sub Form_Activate()
    numCount = 1
    value = 0
    valueSum = 0
    PortValue = 1
    Text1.Visible = False
    Label6.Caption = "0"
    Option1(0).value = True
    Option2(0).value = True
    Command1.SetFocus
    Label1.Caption = Format(value2, "0.000,000")
    For i = 0 To 3
        If Option2(i).value = True Then
            func = i + 1
        End If
    Next i
    Check1.value = 1
    'Call ComPortOpen
End Sub
Public Sub ComPortOpen() '开串口
    With MSComm1
        .CommPort = PortValue              '使用COM1
        .Settings = "9600,N,8,1"       '设置通信口参数
        .InBufferSize = 40
        '设置MSComm1接收缓冲区为40字节
        '.OutBufferSize = 2
        '设置MSComm1发送缓冲区为2字节
        .InputMode = comInputModeBinary
        '设置接收数据模式为二进制形式
        .InputLen = 1
        '设置Input 一次从接收缓冲读取字节数为1
        '.SThreshold = 1
        '设置Output 一次从发送缓冲读取字节数为1
        .InBufferCount = 0  '清除接收缓冲区
        '.OutBufferCount = 0     '清除发送缓冲区
        'MaxW = -99
        '最大值赋初值
        'MinW = 99             '最小值赋初值
        'w = 0
        '数据个数计数器清零
        .RThreshold = 1
        On Error Resume Next
        '设置接收一个字节产生OnComm事件
        If .PortOpen = False Then
            '判断通信口是否打开
            .PortOpen = True       '打开通信口
            If Err Then        '错误处理
                msg = MsgBox(" 串口 COM" & PortValue & " 无效! ", vbOKOnly, "警告")
                Exit Sub
            End If
        End If
    End With
    'MsgBox "端口已打开"
End Sub
Public Sub ComPortClose() '关串口
    MSComm1.PortOpen = False
    '   MsgBox "端口已关闭"
End Sub
Private Sub MSComm1_OnComm()
    Call recive
End Sub
Private Sub Option1_Click(Index As Integer)
    If MSComm1.PortOpen = True Then
        Call ComPortClose
    End If
    PortValue = Index + 1
    Call ComPortOpen
End Sub
Private Sub recive() '检测起始位并接收数据
    Dim Buffer As Variant
    Dim Arr() As Byte
    Dim inData(5) As Byte
    Dim count  As Integer
    Dim temp As Byte
   
   
    '  MsgBox "OnComm"
    With MSComm1
   
            Select Case .CommEvent
            '判断MSComm1通信事件
                Case comEvReceive
                    '收到Rthreshold个字节产生的接收事件
                    Buffer = .Input
                    Arr = Buffer
                   
                    '读取一个接收字节
                    ' Text1.Text = Arr(0)
                    If Arr(0) = &H1B Then
                        .RThreshold = 0
                        Do
                            DoEvents
                        Loop Until .InBufferCount >= 4
                       
                        For i = 1 To 4
                            'count = .InBufferCount
                            Buffer = .Input
                            Arr = Buffer
                            inData(i) = Arr(0)
                        Next i
                        If inData(4) = &HA Then
                            If (inData(1) Mod 64) >= 32 Then
                                .RThreshold = 1
                                Exit Sub
                            End If
                            valueFlag = 1
                            '0.000003814697265625
                            temp = inData(1) Mod 16
                            If temp <= 7 Then
                                value = inData(1) Mod 8
                                value = value * 256 * 256
                                value = value + Val(inData(2)) * 256
                                value = value + Val(inData(3))
                                value = value * 3.814697265625E-06
                                'Text1.Text = Format(value, "0.000,000")
                            Else
                                value = inData(1) Mod 8
                                value = value * 256 * 256
                                value = value + Val(inData(2)) * 256
                                value = value + Val(inData(3))
                                value = value * 3.814697265625E-06
                                value = 0 - value
                            End If
                            temp = inData(1) Mod 128
                            ' test OF
                            If temp >= 64 Then
                                If value < 0 Then
                                    value = value - 0.000004
                                Else
                                    value = value + 0.000004
                                End If
                            End If
                            '检测自动刷新
                            If Check1.value Then
                                 'valueFlag = 1
                                 Call display
                            End If
                        Else
                            .RThreshold = 1
                            Exit Sub
                        End If
                        .InBufferCount = 0
                        .RThreshold = 1
                    End If
            Case Else
        End Select
    End With
    'Text1.Text = Text1.Text + 1
End Sub
Private Sub Option2_Click(Index As Integer)
    func = Index + 1
End Sub
Public Sub display() '判断功能并显示
   
    '功能选择
    Select Case func
        Case 1 '当前值
            value2 = value
           
        Case 2 '平均值
            If numCount > 100000 Then
                numCount = 1
                valueSum = 0
            End If
            If valueFlag = 1 Then
                valueSum = valueSum + value
                value2 = valueSum / numCount
                numCount = numCount + 1
                valueFlag = 0
                Label6.Caption = Str(numCount - 1)
            End If
        Case 3 '最大值
            If value > value2 Then
                value2 = value
            End If
        Case 4 '最小值
            If value < value2 Then
                value2 = value
            End If
        Case Else
    End Select
    'Text1.Text = Str(valueSum)
    Label1.Caption = Format(value2, "0.000,000")
   
End Sub
Private Sub Timer1_Timer()'清缓冲区
    ' Text1.Text = MSComm1.InBufferCount
    If MSComm1.InBufferCount >= 80 Then
        MSComm1.InBufferCount = 0
    End If
End Sub

看《匠人手记》,与匠人同行!北航出版,正在热卖!

发表评论:
载入中...

芯片专题

器件专题

软件专题

硬件专题

综合专题

项目专题

原创专题

器件检测
LCD LED
按键 触摸键
E2PROM
电池 电机
电阻 电容 电感

指令系统
软件算法
编程规范
滤波算法
串行通讯

PCB设计
I2C PWM
红外遥控
充电技术
中断 ADC 

匠人手记
匠人夜话
网络心路
一周热点串烧
从零开始玩PIC
DIY旋转时钟

广告5号位 [投放]


学习板、开发板、编程器、下载器、仿真器(查看详情……)

广告3号位 [投放]

站内搜索


站外搜索


百度  google
mp3  歌词 
图片  FLASH 
知道  文档
新闻  词典 
地图  mp3 
软件  天网 
雅虎  爱问 
搜狗  讯雷 
网讯  华军 
天空 

21IC器件搜索
百宝箱分站
  • 《匠人的百宝箱》21IC站
  • 《匠人的百宝箱》21IC笔记团队
  • 《匠人手记》21IC书友会
  • 《匠人的百宝箱》MCUBLOG站
  • 《匠人的百宝箱》MCUBLOG笔记团队
  • 《匠人的百宝箱》EDN站
  • 《匠人手记》EDN书友会
  • 《匠人的百宝箱》与非网站
  • 《匠人的百宝箱》新浪站
  • 《匠人的百宝箱》百度站
  • 《匠人的百宝箱》网易126站
  • 《匠人的百宝箱》网易163站
  • 《匠人的百宝箱》互动出版网站
  • 广告4号位 [投放]

     
     

    匠人原创

    往日酷贴

     
     
     

    大千八卦

    友情连接

    新浪新闻:
    新浪财经:
    AK58新闻:
    新浪股票:
    新浪股票:
    证券之星:

     [更多酷站连接]

     

     

    [欢迎交换连接]

    [百宝箱之与非门分舵]

    [电脑圈圈的家当]

    [IC921的博客]

    [柔月阁]

    [八楼的呼吸]

    [hotpower 的水潭]

    [xwj的文君阁]

    [所长的BLOG]

    [阿摆手记]

    [电子伙伴]

    [unaided的笔记]

    [小飞的笔记]

    [单片机开发联盟]

    [网址之家]

    [好东西网址大全]

    [美萍中文精选]

    [数字电视之家]

    [SMARTCODE电子书斋]

    [软件开发之窗]

    [Armoric]

    [我爱研发网]

    [infernal的笔记]

    [雄鹰的空中加油站]

    [SunK]

    [逍遥电子]

    [ningpanda的博客]

    [C-Design]

    [一网见天下]

    [海边淘沙]

    [嵌入式365]

    [水牛的仓库]

    [股剩是怎样炼成的]

    [PIC论坛]

    [ICC AVR开发网]

    [中国高校自动化网]

     

     

     

    MCU博客-中国电子工程师博客网 

    大学生电子网 

     

     

     

     

     

    !!! 《匠人的百宝箱》 !!!