vb6.0开发的单片机串口温度采集系统(单片机测温、串口传输、温度曲线显示)

本篇文章主要用于介绍该系统是如何实现的。

程序中含有超多注释,用最直观的大白话解释清楚代码的意思,极利于学习。

首先来看一下界面:

采集的温度可以数值显示,也可绘制成温度曲线。

介绍一下本程序最重要的几部分,也是较难的几部分

一、串口连接部分

可自动识别电脑上的可用端口

 和设备管理器中的端口号一一对应而不是单纯的罗列出来,电脑上那个端口可用就显示那个端口。

'函数功能:查询电脑可用的串口号,将其显示在串口选择组合框中
Private Sub Uart_Init()

Dim a As Integer
Dim temp As Integer
temp = 0
For a = 1 To 16                                              '循环检查可能存在的16个串口
      MSComm1.CommPort = a
      On Error Resume Next                                   '出现错误时,不会被打断(假如电脑上可用端口为COM1、COM2、COM4,若没有这行代码 当a=3时会报错)
      MSComm1.PortOpen = True                                '打开串口
      If MSComm1.PortOpen = True Then
            Combo1_select.AddItem ("COM" & a), temp          '将检测可用的端口添加到组合框中
            temp = temp + 1
            MSComm1.PortOpen = False
      End If
Next

End Sub

此外串口的相关配置可用直接控件属性中添加不需要用代码程序添加了,(如波特率列表框中的各种波特率)

 直接在Combo控件中的 list属性 中输入添加即可,输入一个数据,按一次回车,在输入第二个数据。

二、连接端口子程序(与电脑端口连接)

'连接端口子程序
Private Sub initial_com(com_num As Integer)

MSComm1.CommPort = com_num
MSComm1.OutBufferSize = 1024
MSComm1.InBufferSize = 1024            '整个接受缓冲区的大小,1024个字节
MSComm1.InputMode = 0                  '初始化读取数据时格式 0--文本  1--二进制
MSComm1.InputLen = 0                   '当有输入时,告诉控件读取缓冲区中的全部内容
MSComm1.InBufferCount = 0
MSComm1.SThreshold = 1                 '若设置 Sthreshold 属性为 1,当传输缓冲区完全空时,MSComm 控件产生 OnComm 事件。
MSComm1.RThreshold = 1                 '当接收字符后,若 Rthreshold 属性设置为 0(缺省值)则不产生 OnComm
MSComm1.Settings = com_setting

MSComm1.PortOpen = True

End Sub

三、串口接收到的温度数据处理


'比较当前采集的温度与最大、最小温度的大小,并判断采集的温度是否超出预先设定的上下限
Private Sub examine_temperature()

  Dim Buf As String                  '所有的温度数据组成的字符串
  Dim Pos1 As Integer                '这次采集的数据在总字符串中的位置

  Buf$ = Buf$ + MSComm1.Input
  'TimeDelay 1000
  ValueStr = Val(Mid(Buf, Pos1 + 1, 4))       '分离出正号以后的数值
  sum_tem = sum_tem + ValueStr
  If number_tem = 0 Then
    maxtem = ValueStr
    mintem = ValueStr
  Else
    If ValueStr > maxtem Then
      maxtem = ValueStr
      If ValueStr > set_maxtem Then           '进一步判断是否超过温度上限
        Timer1.Enabled = False
        Shape2.FillColor = RGB(251, 132, 158)
        Label_sign.Caption = "目前温度已超过上限,温度采集结束"
      End If
    ElseIf ValueStr < mintem Then
      mintem = ValueStr
      If ValueStr < mintem Then                '进一步判断是否低于温度下限
        Timer1.Enabled = False
        Shape3.FillColor = RGB(251, 132, 158)
        Label_sign.Caption = "目前温度已低于下限,温度采集结束"
      End If
    End If
  End If

End Sub

四、根据数据画曲线及相关显示

'下面这段程序是画曲线
  If NowX = 0 Then
    picVoltage.Cls '清除图形
    picVoltage.PSet (0, ValueStr)  '设定起点    PSet画图
  Else
    '以下判断现在的读值是否大于前一次的读值。若是,则以红色绘线;若否,则以蓝色绘线
    If ValueStr > PreValue + 0.01 Then
      picVoltage.Line -(NowX, ValueStr), RGB(255, 0, 0) '由上一次的位置画至此点
    Else
      picVoltage.Line -(NowX, ValueStr), RGB(0, 0, 255) '由上一次的位置画至此点
    End If
  End If
  PreValue = ValueStr         '上一次读取到的数值
  NowX = NowX + 1 '位置加1    ’往右进一位
  If NowX > MaxPlotNo Then NowX = 0  '超过范围则数值归零
 

  number_tem = number_tem + 1
  average_tem = sum_tem / number_tem          '求平均温度
  If number_tem = Val(Text5.Text) Then        '到达所设定的采集次数
    Timer1.Enabled = False
    Label_sign.Caption = "已达到采集次数,温度采集结束"
  End If
  
  Text1_tem.Text = Format(ValueStr, "00.00") & "℃"  'Format(,)将数据按照指定格式输出
  Text2_maxtem.Text = Format(maxtem, "00.00") & "℃"
  Text3_avetem.Text = Format(average_tem, "00.00") & "℃"
  Text4_mintem.Text = Format(mintem, "00.00") & "℃"

开源工程:https://download.csdn.net/download/m0_59113542/77321854?spm=1001.2014.3001.5503

下面这个也是用vb6.0做的串口助手,与单片机进行交互,和日常所用的串口助手差不多。

串口助手链接:vb6.0开发的上位机串口助手(自动识别电脑端口号、支持文本、十六进制发送)_霄耀在努力的博客-CSDN博客_vb 上位机

欢迎大家提出宝贵的意见。

有机会一起讨论代码,嘿嘿嘿!
 

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值