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

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

广告3号位
百宝日历
载入中...

百宝专栏

说明:请先返回首页,再点击下列专栏即可进入。
  • 首页 相册 标签
  • 匠人公告(87)
  • 匠人笔记(144)
  • 匠人文集(167)
  • 写书近况(189)
  • 团队撰写(96)
  • 与非门专栏(566)
  • 比尔熊专栏(12)
  • 网络酷文(492)
  • 程序宝典(477)
  • 程序算法(28)
  • 编程技巧(482)
  • 资料宝藏(280)
  • 硬件技术(178)
  • 汽车电子(52)
  • 藏经宝阁(47)
  • 项目管理(15)
  • 趣味设计(6)
  • 社区热贴(5)
  • 开发工具(19)
  • 电脑应用(66)
  • 供需信息(24)
  • 最新货色

    载入中...

    粉丝评论

    载入中...

    载入中...



    百宝信息

    载入中...

    百宝流量

    (2006-07-01开始)


    匠人手记

    购书攻略勘误表

    ARM9开发板+3.5寸屏 只售520元

     编程技巧: 优质代码的十诫

    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号位 [投放]

     

    推荐阅读

     

    友情连接

     [更多酷站连接]

     

     

     

     

    [欢迎交换连接]

    [百宝箱之与非门分舵]

    [电脑圈圈的家当]

    [IC921的博客]

    [hotpower 的水潭]

    [八楼的呼吸]

    [柔月阁]

    [PIC论坛]

    [SMARTCODE电子书斋]

    [阿摆手记]

    [电子伙伴]

    [xwj的文君阁]

    [所长的BLOG]

    [海边淘沙]

    [单片机开发联盟]

    [数字电视之家]

    [软件开发之窗]

    [unaided的笔记]

    [小飞的笔记]

    [ICC AVR开发网]

    [我爱研发网]

    [infernal的笔记]

    [网址之家]

    [好东西网址大全]

    [美萍中文精选]

    [水牛的仓库]

    [逍遥电子]

    [ningpanda的博客]

    [雄鹰的空中加油站]

    [一网见天下]

    [Armoric]

    [股剩是怎样炼成的]

    [嵌入式365]

    [C-Design]

    [AVR猎手的地盘]

    [中国高校自动化网]

    [SunK]

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    大学生电子网 

     

     

     

     

     

     

     

     《匠人的百宝箱》