900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > vb6.0开发的单片机串口温度采集系统(单片机测温 串口传输 温度曲线显示)

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

时间:2020-10-26 18:45:22

相关推荐

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

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

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

首先来看一下界面:

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

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

一、串口连接部分

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

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

'函数功能:查询电脑可用的串口号,将其显示在串口选择组合框中Private Sub Uart_Init()Dim a As IntegerDim temp As Integertemp = 0For a = 1 To 16'循环检查可能存在的16个串口mPort = aOn Error Resume Next'出现错误时,不会被打断(假如电脑上可用端口为COM1、COM2、COM4,若没有这行代码 当a=3时会报错)MSComm1.PortOpen = True '打开串口If MSComm1.PortOpen = True ThenCombo1_select.AddItem ("COM" & a), temp'将检测可用的端口添加到组合框中temp = temp + 1MSComm1.PortOpen = FalseEnd IfNextEnd Sub

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

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

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

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

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

'比较当前采集的温度与最大、最小温度的大小,并判断采集的温度是否超出预先设定的上下限Private Sub examine_temperature()Dim Buf As String '所有的温度数据组成的字符串Dim Pos1 As Integer'这次采集的数据在总字符串中的位置Buf$ = Buf$ + MSComm1.Input'TimeDelay 1000ValueStr = Val(Mid(Buf, Pos1 + 1, 4)) '分离出正号以后的数值sum_tem = sum_tem + ValueStrIf number_tem = 0 Thenmaxtem = ValueStrmintem = ValueStrElseIf ValueStr > maxtem Thenmaxtem = ValueStrIf ValueStr > set_maxtem Then '进一步判断是否超过温度上限Timer1.Enabled = FalseShape2.FillColor = RGB(251, 132, 158)Label_sign.Caption = "目前温度已超过上限,温度采集结束"End IfElseIf ValueStr < mintem Thenmintem = ValueStrIf ValueStr < mintem Then'进一步判断是否低于温度下限Timer1.Enabled = FalseShape3.FillColor = RGB(251, 132, 158)Label_sign.Caption = "目前温度已低于下限,温度采集结束"End IfEnd IfEnd IfEnd Sub

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

'下面这段程序是画曲线If NowX = 0 ThenpicVoltage.Cls '清除图形picVoltage.PSet (0, ValueStr) '设定起点 PSet画图Else'以下判断现在的读值是否大于前一次的读值。若是,则以红色绘线;若否,则以蓝色绘线If ValueStr > PreValue + 0.01 ThenpicVoltage.Line -(NowX, ValueStr), RGB(255, 0, 0) '由上一次的位置画至此点ElsepicVoltage.Line -(NowX, ValueStr), RGB(0, 0, 255) '由上一次的位置画至此点End IfEnd IfPreValue = ValueStr '上一次读取到的数值NowX = NowX + 1 '位置加1 ’往右进一位If NowX > MaxPlotNo Then NowX = 0 '超过范围则数值归零number_tem = number_tem + 1average_tem = sum_tem / number_tem'求平均温度If number_tem = Val(Text5.Text) Then '到达所设定的采集次数Timer1.Enabled = FalseLabel_sign.Caption = "已达到采集次数,温度采集结束"End IfText1_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") & "℃"

开源工程:/download/m0_59113542/77321854?spm=1001..3001.5503​​​​​​​

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

完整开源工程:/download/m0_59113542/76680304

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

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。