VB上位机温度采集(含源程序)

合集下载

基于VB和Access的温度采集系统的设计与实现

基于VB和Access的温度采集系统的设计与实现
沈 斌 ,杨 秀清 ,占文杰
( 汉 工程 大 学 电 气信 息 学 院 , 北 武 汉 4 0 0 ) 武 湖 3 2 5
摘 要 :随 着现 代 信 - 术 的 高速 发 展 , 据 采 集 方 面 的技 术 也 在 不 断 地 向前 发 展 , 在 信 息技 术 中 占有 重 要 地 住 , g技 数 并 温
度 、 力等 参 数 在 智 能 家居 、 业控 制 、 能 农 业 等 方 面 都 得 到 很 高 的 重视 . 何 实 时直 观 地 采 集 到 温度 成 为 焦点 。 压 工 智 如 本
温度 采 集 系统 下 位 机 采 用 S C 9 5 T 8 C 2单 片 机 为 主 控 制 器 , 采 用 单 线 式 D 1 B 0温 度 传 感 器 采 集 温 度 , 通 过 串 口 S8 2 R 2 2将 其 传 送 到 上 住 机 ( C机 ) 上 位 机 使 用 V s3 P , B编 写 界 面和 后 台处 理 程 序 , 温度 显 示 出 来 并 存 入 A c s 数 据 将 c es 库 。最 终 测 试 结 果 显 示上 住 机 有 实时 接 收 数 据 , 将 实 时接 收 到 的数 据 存 入 A c s 数 据 库 里 , 能 够 实 时 的把 温 度 并 ces 并
第 1 9卷 第 4期
V0 .9 11
No4 .
电 子 设 计 工 程
Elc r n c De in En i e rn e to i sg g n e i g
2 1 年 2月 0 1
F b 2 1 e. l
基 亏 V 和 Aces的 温 度 采集 系统 的设 计 与实 现 B cs
Ab t a t sr c :W i h ih e d d v l p n f h r s n no main t c n lg ,t e d t a h rn c n l g n e sn l t t e h g  ̄p e e e o me t e p e e t f r t h oo y h aa g t e g t h oo u c a i gy h ot i o e i e y

基于VB和单片机的多点温度采集系统

基于VB和单片机的多点温度采集系统

基于VB和单片机的多点温度采集系统【摘要】:测温系统是以数据采集原理为主要理论依据,将传感器DS18B20所测的温度转换成为电信号,再由AT89C51单片机对其进行量化编码,转化为整型数据和浮点型数据;整型数据为了方便AT89C51单片机与PC之间的通讯,浮点型数据是用来显示在液晶显示器12864上面的。

根据串行通讯原理,设计了AT89C51单片机与PC机的接口电路,建立了AT89C51单片机与PC机之间的串行通讯协议,并利用VB6.0对测温系统实现了对象化操作——将采集到的温度信号编码进行接受和描述,将其直接显示在可视的界面当中,对信号进行分析和处理,并将其用曲线实时显示出来。

本设计在选择仪器方面的宗旨是使用起来方便快捷,成本低廉,而且大幅度提高了测量精度,最终目的能实现人机的对话且能及时知道系统的运行状况等功能。

【关键词】:AT89C51单片机,编码,温度,实时曲线,DS18B20,VB6.0Based on VB and MCU multipoint temperature collection systemFang Li(Grade08, Class4, Major Automation, Electrical Engineering Dept., Shaanxi University of Technology ,Hanzhong 723003, Shaanxi)Tutor:Hu Bo【Abstract】:Temperature measurement system to data collection principle as the main theoretical basis, the temperature sensor DS18B20 converted into electrical signals, again by A T89C51 single-chip microcomputer the quantitative coding, into the whole model data and floating point type data; Integer data in order to facilitate the A T89C51 single-chip microcomputer and of the communication between a PC, the floating-point data is used to display type in LCD monitor above 12864. According to the serial communication principle, design the A T89C51 single-chip microcomputer and PC interface circuit, established the AT89C51 single-chip microcomputer and PC of serial communication between agreement, and use of temperature measurement system through VB6.0 realized the objectivity operation-will the collected temperature signal encoding to accept and description, its directly display in visual interface of the signal analysis and processing, and use its curve real-time display.Purpose of this design choice of instrument is to use a convenient, low cost, and greatly improve the measurement accuracy, the ultimate aim to achieve the system of man-machine dialogue and can know in time to run status.【Keywords】: VB; database; temperature; monitoring目录1引言 (1)1.1 概述 (1)1.2 国内、外现状 (1)1.3 系统设计的任务要求 (2)1.4 系统方案论证 (2)1.5 系统设计原理框图及各部分功能简介 (3)1.6 系统设计进度安排 (3)2系统硬件设计 (4)2.1 控制器的设计 (4)2.1.1 控制器的选择 (4)2.1.2 AT89C52主要特性 (4)2.2液晶显示LCD设计 (9)2.2.1 HS12864-15C液晶显示介绍 (9)2.2.2 HS12864-15C液晶模块的硬件说明 (9)2.2.3 HS12864-15C液晶模块指令集 (10)2.2.4 LCD显示硬件电路设计 (14)2.3 温度采集模块设计 (14)2.3.1温度传感器的基本知识 (14)2.3.2 传感器的选用及系统中的应用 (14)2.3.3 温度传感器的选择 (16)2.3.4温度传感器DS18B20工作原理 (16)2.3.5 DS18B20的使用 (16)2.3.6温度采集模块硬件电路设计 (18)2.4 系统硬件电路设计 (18)2.4.1 主机控制部分 (18)2.4.2 温度采样与显示电路 (19)2.4.3 RS232通讯接口电路设计 (19)3 系统软件设计 (20)3.1 下位机软件设计 (20)3.1.1 液晶显示部分设计 (20)3.1.2 温度采集模块部分设计 (21)3.1.3 串口通讯(下位机部分)软件设计 (25)3.2 上位机软件设计 (27)3.2.1 系统主界面的设计 (28)3.2.2 串口设置界面 (28)3.2.3 串口通讯(上位机部分)设计 (29)4 系统的调试 (31)4.1软硬件综合调试 (31)4.1.1液晶显示模块的调试 (31)4.1.2 DS18B20 数据采集模块的调试 (31)4.1.3串口通讯部分的调试 (31)4.2系统综合调试 (32)4.2.1系统综合调试出现的问题及解决方法 (32)4.2.2系统综合调试结果 (32)5 总结与展望 (34)致谢 (35)参考文献 (36)附录A下位机部分程序 (37)附录B 上位机部分程序 (44)附录C 实物图 (46)附录D 元器件清单 (47)外文文献原文 (48)外文文献译文 (51)1引言1.1 概述随着科学技术的迅猛发展,电子技术的发展也越来越快,带动了大批相关产业的发展,其应用的范围也越来越广泛。

基于VB的多路数据采集系统上位机软件设计(精)

基于VB的多路数据采集系统上位机软件设计(精)

图1烘炉温度多路数据采集系统上位机软件界面基于VB 的多路数据采集系统上位机软件设计张瑜,韩玉杰,闵昆龙(东北林业大学机电工程学院,黑龙江哈尔滨150040摘要:采用Visual Basic 6.0设计多路数据采集系统的上位机软件,实现对由单片机组成的测量系统数据的采集、传输、保存、分析、绘制曲线图以及数据和曲线图的打印。

文中以烘炉内多点温度数据采集系统设计为例说明用于串口通信上、下位机的软件设计,以及VB 中mscomm ,msflexgrid 等控件的用法。

关键词:多路数据采集;上位机;mscomm 控件;msflexgrid 控件中图分类号:TP311文献标识码:A文章编号:1001-4462(200701-0029-02Software Design in Host Computer of Multi-data AcquisitionSystem Based on VBZHANG Yu,HAN Yu-jie,MIN Kun-long(College of Machinery and Electricity of Northeast ForestryUniversity ,Heilongjiang Harbin 150040,ChinaAbstract :This article mainly explained how to design software for host computer of multi-data acquisition system based on visual basic 6.0.Also it displaied that the whole single-chip system how to acquire,communicate,save and analyze the data,how to draw graph,and how to print data and graph.The test taked the oven ’s multi-temperature data acquisition system for example,expounded the design of software of host and slave computer that using for serial communication,and also explained the mscomm control and msflexgrid control of visual basic.Key words :multi-data acquisition;host computer;mscomm control;msflexgrid control微软公司的visual basic 6.0是windows 应用程序开发工具,是目前应用最为广泛、易学易用的面向对象的开发工具,并且为用户提供了大量的控件。

基于VB编程的微机温度采集系统设计

基于VB编程的微机温度采集系统设计

周 六 顺
( 陵 石 化 合 成 橡 胶 厂 ・ 阳 ・ 1( 4 巴 岳 4 4I ) O
摘 要 介 绍 了系 统 功 能 及 特点 , C 一5 单片 机 的 基 本 组 成和 基 本 原 理 。 M S 1
关 键 VB编 程 单片机 温度 采 集 系 统
控 制 应 用 软 件 十 分 方 便 , 其 软 件 界 面 设 计 非 常 尤
风格和 3 2位 面 向对 象 的程 序 设 计 等 特 点 , 已广 泛
地 应 用 于 各 个 领 域 , 很 多 计 算 机 软 件 开 发 人 员 是 采 用 的 开 发 工 具 。V B不 但 提 供 了 良 好 的 界 面 设
计 能 力 , 且 在 微 机 串 口通 信 方 面 也 有 很 强 的 功 而
业 控 制 等 软 件 的 开 发 也 上 升 到 Wid w n o s环 境 下 。 可 视 化 软 件 开 发 平 台 的 出 现 , 软 件 开 发 提 供 了 为
3 )片 内程 序 存 储 器 R M/ P O 4 B 8 B , O E R M( K /K ) 用 以存 放 程 序 、 些 原 始 数 据 和 表 格 。 一
3 基 本 原 理
现 场 温 度 采 集 点 共 有 8路 , 用 P 10铂 电 采 T0 阻 采 集 温 度 并 由具 有 8通 道 变 送 器 变 换 为 4 0 A 2m 电流 信 号 , 到单 片机 的 AD转换 器转 入 端 , 送 / 测
事 务 的 一 种 非 常 有 效 的 方 法 , 别 适 合 Wid w 特 no s 程 序 的 编 写 。在 串 口通 讯 过 程 中 , 当发 送 数 据 、 收
1 系 统 功 能 及 特 点

基于VB的计算机温度采集系统设计与实现.

基于VB的计算机温度采集系统设计与实现.

基于VB的计算机温度采集系统设计与实现本系统用单片机对整个测量电路进行管理和控制,使得整个系统智能化、体积小、功耗低、使用电子元件较少,内部配线少,成本低,制造、安装、调试及维修方便。

该系统中单片机作为下位机,完成测温任务,测量结果可在本地显示,也可通过下位机与上位机(PC机)通讯,给出结果和提示信息。

而上位机与下位机大多是通过PC机的RS-232串行接口实现通信。

VisualBasic是可视化面向对象的采用事件驱动技术的结构化程序设计语言,本系统上位机是在Windows本系统用单片机对整个测量电路进行管理和控制,使得整个系统智能化、体积小、功耗低、使用电子元件较少,内部配线少,成本低,制造、安装、调试及维修方便。

该系统中单片机作为下位机,完成测温任务,测量结果可在本地显示,也可通过下位机与上位机(PC机)通讯,给出结果和提示信息。

而上位机与下位机大多是通过PC机的RS-232串行接口实现通信。

Visual Bas ic是可视化面向对象的采用事件驱动技术的结构化程序设计语言,本系统上位机是在Windows环境下利用Visual basic开发微机通信程序。

2 系统基本原理系统结构如图1所示,其中,计算机要求能够运行Windows98或更高版本)操作系统和开发环境VB6.0,具有标准的RS232串口,主要功能为数据采集处理和系统控制,是人机交互的平台。

现场温度采集点共有4路,采用AD590采集温度送到单片机的A/D转换器转入端,测量范围最大值为50度,单片机定时采集温度信号,并按串行通信协议打包构成数据帧。

在微机中采用VB6.0编程,并选用MS COMM控件进行串行口通讯。

MSComm控件是Microsoft提供的扩展控件,用于支持VB程序对串口的访问,同时支持查询方法和事件驱动通讯的机制。

事件驱动通讯是交互方式处理串口事务的一种非常有效的方法,特别适合Windows程序的编写。

因此用其实现微机串口的数据通讯相当简单,以很少的程序代码就可以轻松实现串口的访问和数据通讯。

基于VB的温度实时监控系统的设计

基于VB的温度实时监控系统的设计

温度实时监控系统的设计2008年4月摘要本论文简要的阐述了温度监控系统的现状与发展趋势和各个模块实现的设计方案。

硬件部分,我们采用DS18B20芯片实现温度采集模块。

利用AT89S51的高密度、非易失性存储和兼容标准MCS-51指令系统及80C51引脚结构,使其作为单片机控制模块的核心。

在数据传输模块我们选择MAX232实现单片机与PC的过渡桥梁作用。

软件部分,用单片机汇编语言与VB相结合并利用PC机串口通信技术,编写了双方的通信协议方便数据交换,并且PC机与单片机通信比较稳定。

本系统的温度监控部分主要在PC上操作,它采用Click事件来实现通信指令的触发,利用MSComm控件里的OnComm事件来实现PC机通过串口与单片机通信功能。

本设计不仅可以在图形界面下方便的查看外设温度,而且能够进行多路选择查看或单路查看等功能。

关键词:温度实时监控;DS18B20;VB;MSComm;AbstractThe present paper brief elaboration temperature supervisory system's present situation and the trend of development and each module realized design proposal.The system hardware part,we use DS18B20 the chip to realize the temperature gathering module. Using AT89S51 high density,non-volatility memory and compatible standard MCS-51 command system and 80C51 pin structure,causes its achievement monolithic integrated circuit control module the core .We choose MAX232 in the data transmission module to realize the monolithic integrated circuit and the PC transition bridge role.Software aspect,unify and use the PC machine serial port communication with the monolithic integrated circuit assembly language and VB has as compiled the bilateral communication protocol convenient data exchange and PC machine and the monolithic integrated circuit correspondence are quite stable.This system's temperature monitoring part mainly operates on PC. It uses the Click event to realize correspondence order triggering and controls in using MSComm the OnComm event to realize PC machine through the serial port and the monolithic integrated circuit correspondence function. This design not only may the examination peripheral device temperature which facilitates under the graphical interface but also can carry on multi-channel functions and so on choice examinations or single-channel examination.Key words: Temperature real-time monitoring; DS18B20; VB; MSComm;目录1 引言 (1)2 总体设计 (2)2.1方案比较 (2)2.1.1温度传感器的选择 (2)2.1.2 控制器的选择 (3)2.1.3 数据串行通信的接口标准 (3)2.1.4 WINDOWS编程语言选择 (4)2.2系统设计方案简介 (4)3 硬件设计 (6)3.1温度采集模块 (6)3.1.1 DS18B20芯片介绍 (6)3.1.2 DS18B20芯片与AT89S51连接 (10)3.2单片机控制模块 (10)3.2.1 AT89S51芯片介绍 (11)3.2.2 芯片HD7279A简介 (11)3.2.3 HD7279A与AT89S51的连接 (11)3.3数据传输模块 (12)4 系统软件设计 (14)4.1单片机模块软件设计 (14)4.1.1 主程序设计 (14)4.1.2 温度采集子程序设计 (15)4.1.3 串口中断子程序设计 (15)4.2PC机人机交互模块设计 (16)4.2.1 系统工作流程 (17)4.2.2 系统界面设计 (17)4.2.3 全局变量和各控件的设置 (18)4.2.4 通讯程序设计 (19)4.2.5 接收信息设计 (21)4.2.6 发送信息设计 (23)4.2.7下拉列表初始化 (24)5 结束语 (26)致谢 (27)参考文献 (28)附录1 系统实物图 (29)附录2 实验原理图 (30)附录3 毕业设计作品说明书 (31)1 引言随着计算机技术的发展和成熟,计算机的应用也越来越广泛。

基于VB的温湿度数据采集

基于VB的温湿度数据采集
传感器。它应用专用的数字模块采集技术和温湿度传感技术,确保产品具 有极高的可靠性与卓越的长期稳定性。传感器包括一个电阻式感湿元件和 一个 NTC 测温元件,并与一个高性能 8 位单片机相连接。因此该产品具有 品质卓越、超快响应、抗干扰能力强、性价比极高等优点。每个 DHT11 传 感器都在极为精确的湿度校验室中进行校准。校准系数以程序的形式储存 在 OTP 内存中,传感器内部在检测信号的处理过程中要调用这些校准系数。 单线制串行接口,使系统集成变得简易快捷。超小的体积、极低的功耗, 信号传输距离可达 20 米以上,使其成为各类应用甚至最为苛刻的应用场合 的最佳选则。产品为 4 针单排引脚封装。连接方便,特殊封装形式可根据 用户需求而提供。
Private Sub Text4_KeyPress(KeyAscii As Integer) If (KeyAscii < 47 Or KeyAscii > 58) And KeyAscii <> 46 Then KeyAscii = 0 End If
Timer1.Enabled = True End Sub Private Sub Form_Load()
Timer1.Enabled = False Shape1.BackColor = RGB(255, 0, 0) Form1.Width = 15000 Form1.Height = 8500
End Sub
智能仪器实习报告
实习名称:基于 VB 的温湿度数据采集 班 级: 11 光电 A1 姓 名: 朱 冬 冬 指导老师: 王 素 娟 日 期: 2014 年 6 月 24 日
一、 实验名称: 基于 VB 的温湿度数据采集
二、 实验目的:
本设计主要是介绍了单片机控制下的温湿度检测系统,并通过串口将单 片机处理的数据实时传输到 VB 编写的上位机上。其主要功能和指标如下:

利用VB实现基于RS-485总线上位机的数据采集与控制

利用VB实现基于RS-485总线上位机的数据采集与控制

利用VB实现基于RS-485总线上位机的数据采集与控制
利用VB实现基于RS-485总线上位机的数据采集与控制
摘要:该文介绍了利用VB6.0中的MSCommunications控件及定时器,在基于RS-485总线的上位机中编程,以实现对模拟量、开关量数据的采集、显示、保存及控制。

关键词:VB RS-485 串口通信数据采集
随着计算机及通讯技术、集成电路技术的飞速发展,以全数字式现场(FIELDBUS)为代表的现场控制仪表,迅速成为工业控制的主流。

RS-485串行通信总线以构造简单、技术成熟、便于维护,已广泛应用于电力、化工的工业控制、仪器仪表等领域。

其传输距离最长达1.2KM,负载下位机可达256台,通过转换器可将RS-485转换为微机可识别RS-232信号并通过串口与上位机通讯,从而实现远程监测。

本文主要探讨在上位计算机中使用Visual Basic6.0语言编程,实现模拟量、开关量数据的采集、显示、保存及控制功能。

1 RS-485总线的硬件配置及系统结构
PC机:上位机及服务器工作站
转换器:将RS-485转换为微机可识别的RS-232信号
中继器:(根据需求增加)信号中断放大
下位仪表:(根据需求增加)采集数据。

基于51单片机的温度测试系统 VB上位机

基于51单片机的温度测试系统 VB上位机

简介:这是我学完51单片机的第一个作品,单片机型号为89c52,时钟芯片用的是DS1302,温度传感器用的是DS18B20,USB供电,掉电后时钟芯片继续工作,且已经设置好的温度上下限和闹钟数据不会丢失。

上位机是用VB语言写的,只是一个模型,从上位机上可以观察当前温度值以及温度上下限,以后会更加完善其功能。

下面是下位机程序和上位机程序,程序比较长,而且下位机程序的键盘部分写得有点麻烦。

下位机程序:/***************************************************************************************作者:江苏科技大学电子信息科学与技术二班吴亚迪注:此程序可以实现万年历闹钟温度测定温度超过上下限发出警报断电后时钟不停,且已设好的温度上下限和闹钟数据不会丢失****************************************************************************************/#include<reg52.h>#define uchar unsigned char#define uint unsigned intuchar code table[]="20 / / DAY- ";uchar code table1[]=" : : ";uchar code table2[]="0123456789";uchar code table3[]=" alarm clock ";sbit ds_clk=P3^6;sbit ds_io=P3^7;sbit ds_rst=P1^4;sbit lcdrs=P1^0;sbit lcdrw=P1^1;sbit lcden=P1^2;sbit scl=P3^2;sbit sda=P3^3;sbit ACC_7=ACC^7;sbit P34=P3^4;bit alarm=0;//闹钟标志位bit stop_alarm=0;//停止闹钟标志位uchar i,j;uchar th,tl; //温度上下限uint th1,th2,tl1,tl2;uchar min,hour,sec; //闹钟时分秒uint min1,min2,hour1,hour2,sec1,sec2;void delay(uint i){uint j;for(;i>0;i--)for(j=0;j<110;j++);}/***********************************************************************************************DS1302部分**************************************************************************************************/ char s,s1,s2; //时钟秒char m,m1,m2; //分char h,h1,h2; //时char day; //星期char date,date1,date2;//日期char mon,mon1,mon2; //月char year,year1,year2;//年void write_ds(uchar add,uchar date ) //向ds1302指定地址写数据{uchar i,temp;ds_rst=0;ds_clk=0;ds_rst= 1;for ( i=8; i>0; i-- ){ds_clk = 0;temp = add;ds_io= temp&0x01;add >>= 1;ds_clk = 1;}for ( i=8; i>0; i-- ){ds_clk = 0;temp = date;ds_io =temp&0x01;date >>= 1;ds_clk = 1;}ds_rst= 0;}uchar read_ds(uchar add ) //ds1302指定地址读数据{unsigned char i,temp,date1;ds_rst=0;ds_clk=0;ds_rst= 1;for ( i=8; i>0; i-- ){ds_clk = 0;temp = add;ds_io=temp&0x01;add >>= 1;ds_clk = 1;}for ( i=8; i>0; i-- ) //这里要注意{ACC_7=ds_io;ds_clk = 1;ACC>>=1;ds_clk = 0;}ds_rst=0;date1=ACC;return date1;}void init_ds() //初始化ds1302{write_ds(0x8e,0x00); //关闭写保护write_ds(0x80,0x22); //初始化秒write_ds(0x82,0x59); //分write_ds(0x84,0x23); //时write_ds(0x86,0x21); //日write_ds(0x88,0x05); //月write_ds(0x8a,0x06); //星期write_ds(0x8c,0x11); //年write_ds(0x8e,0x80); //开写保护}void read_all() //读s,m,h,date,mon,year,day{s=read_ds(0x81);s1=s/16;s2=s%16;m=read_ds(0x83);m1=m/16;m2=m%16;h=read_ds(0x85);h1=h/16;h2=h%16;date=read_ds(0x87);date1=date/16;date2=date%16;mon=read_ds(0x89);mon1=mon/16;mon2=mon%16;day=read_ds(0x8b);year=read_ds(0x8d);year1=year/16;year2=year%16;}/***********************************************************************************************1602部分**************************************************************************************************/ void write_com(uchar com) //写命令{lcdrs=0;lcden=0;P0=com;delay(5);lcden=1;delay(5);lcden=0;}void write_date(uchar date)//写数据{lcdrs=1;lcden=0;P0=date;delay(5);lcden=1;delay(5);lcden=0;}void init_1602() //初始化1602{lcdrw=0;write_com(0x01);write_com(0x38);write_com(0x0f);write_com(0x06);for(i=0;i<16;i++){write_date(table[i]);delay(10);}write_com(0x80+0x40);for(i=0;i<16;i++){write_date(table1[i]);delay(10);}write_com(0x80+0x40+0x0e);write_date(0xdf);delay(10);write_date('c');}/***********************************************************************************************EEPROM部分**************************************************************************************************/void delay1(){ ; ; }void init()//初始化总线{sda=1;delay1();scl=1;delay1();}void start()//开始函数{sda=1;delay1();scl=1;delay1();sda=0;delay1();}void stop()//停止函数{sda=0;delay1();scl=1;delay1();sda=1;delay1();}void respons()//应答{uchar i;sda=1;delay1();scl=1;while(sda==1&&i<250) i++;scl=0;delay1();}void write_byterom(uchar date)//向eeprom中写一字节数据{uchar i;for(i=0;i<8;i++){date=date<<1;scl=0;delay1();sda=CY;delay1();scl=1;delay1();}scl=0;delay1();}uchar read_byterom()//从eeprom中读一字节数据{uchar i,temp;scl=0;delay1();for(i=0;i<8;i++){scl=1;delay1();temp<<=1;temp|=sda;scl=0;delay1();}return temp;}void write_add(uchar add,uchar date)//指定地址写数据{start();write_byterom(0xa0);respons();write_byterom(add);respons();write_byterom(date);respons();stop();}uchar read_add(uchar add)//指定地址读数据{uchar temp;start();write_byterom(0xa0);respons();write_byterom(add);respons();start();write_byterom(0xa1);respons();temp=read_byterom();stop();return temp;}/***********************************************************************************************ds18b20部分**************************************************************************************************/ sbit DQ=P3^5;void delay2(uchar i){while(i--);}void init_ds18b20()//初始化ds18b20{uchar i;DQ=1;delay2(8);DQ=0;delay2(80);DQ=1;while(DQ==1&&i<255) i++;delay2(35);delay2(20);}void write_byte(uchar dat)//向ds18b20中写一字节{uchar i;for(i=0;i<8;i++){DQ=1;delay2(1);DQ=0;delay2(1);DQ=dat&0x01;delay2(5);DQ=1;dat>>=1;delay2(4);}}uchar read_byte()//从ds18b20中读一字节{uchar i,dat=0;for(i=0;i<8;i++){DQ=1;delay2(1);DQ=0;dat>>=1;DQ=1;if(DQ)dat=dat|0X80;delay2(4);}return dat;}uchar read_temp() //读温度函数{uchar a,b,c;init_ds18b20();write_byte(0xcc);write_byte(0x44);init_ds18b20();write_byte(0xcc);write_byte(0xbe);a=read_byte();b=read_byte();c=(b<<4)|(a>>4);return c;}uchar read_th()//读上限函数{uchar a,b,c;init_ds18b20();write_byte(0xcc);write_byte(0x44);init_ds18b20();write_byte(0xcc);write_byte(0xbe);a=read_byte();b=read_byte();c=read_byte();return c;}uchar read_tl()//读下限函数{uchar a,b,c;init_ds18b20();write_byte(0xcc);write_byte(0x44);init_ds18b20();write_byte(0xcc);write_byte(0xbe);a=read_byte();b=read_byte();a=read_byte();c=read_byte();return c;}/***********************************************************************************************键盘部分(P2^0~P2^3)**************************************************************************************************/void keyscan(){uchar temp,num1,num2;temp=P2;temp&=0x0f;if(temp!=0x0f) //消抖{delay(5);if(temp!=0x0f){temp=P2;temp&=0x0f;if(temp==0x0e){num1=1;write_ds(0x8e,0x00);write_ds(0x80,s|0x80);//禁止写保护while(temp==0x0e)//松手检测{temp=P2;temp&=0x0f;}while(1){temp=P2;temp&=0x0f;if(temp==0x0e){delay(5);temp=P2;temp&=0x0f;if(temp==0x0e){num1++;}}while(temp==0x0e)//松手检测{temp=P2;temp&=0x0f;}if(num1==1){write_com(0x80+0x40+0x08); write_com(0x0f);//光标闪烁temp=P2;temp&=0x0f;if(temp==0x0d){delay(5);if(temp==0x0d){while(temp==0x0d)//松手检测 {temp=P2;temp&=0x0f;}s=read_ds(0x81);s1=s/16;s2=s%16;s2+=1;if(s2==10){s1+=1;}if(s1==6) s1=0;write_com(0x80+0x40+0x07);write_date(table2[s1]);write_date(table2[s2]);write_ds(0x80,s1*16+s2);//向ds1302中写入秒 }}else if(temp==0x0b){delay(5);if(temp==0x0b){while(temp==0x0b)//松手检测{temp=P2;temp&=0x0f;}s=read_ds(0x81);//读ds1302秒s1=s/16;s2=s%16;s2-=1;if(s2==-1){s2=9;s1-=1;}if(s1==-1) s1=5;write_com(0x80+0x40+0x07);write_date(table2[s1]);write_date(table2[s2]);write_ds(0x80,s1*16+s2);}}}if(num1==2){write_com(0x80+0x40+0x05);write_com(0x0f);temp&=0x0f;if(temp==0x0d){delay(5);if(temp==0x0d){while(temp==0x0d)//松手检测{temp=P2;temp&=0x0f;}m=read_ds(0x83);//从ds1302中读分m1=m/16;m2=m%16;m2+=1;if(m2==10){m2=0;m1+=1;}if(m1==6) m1=0;write_com(0x80+0x40+0x04);write_date(table2[m1]);write_date(table2[m2]);write_ds(0x82,m1*16+m2);//向ds1302中写入分 }}else if(temp==0x0b){delay(5);if(temp==0x0b){while(temp==0x0b)//松手检测{temp=P2;temp&=0x0f;}m=read_ds(0x83);m1=m/16;m2=m%16;m2-=1;{m2=9;m1-=1;}if(m1==-1) m1=5;write_com(0x80+0x40+0x04);write_date(table2[m1]);write_date(table2[m2]);write_ds(0x82,m1*16+m2);}}}if(num1==3){write_com(0x80+0x40+0x02);write_com(0x0f);temp=P2;temp&=0x0f;if(temp==0x0d){delay(5);if(temp==0x0d){while(temp==0x0d)//松手检测{temp=P2;temp&=0x0f;}h=read_ds(0x85);//从ds1302中读时 h1=h/16;h2=h%16;h2+=1;if(h2==10){h2=0;h1+=1;}if(h2==4&&h1==2){h2=0;h1=0;}write_com(0x80+0x40+0x01);write_date(table2[h1]);write_date(table2[h2]);write_ds(0x84,h1*16+h2);//向ds1302中写入时 }}else if(temp==0x0b){delay(5);if(temp==0x0b){while(temp==0x0b)//松手检测{temp=P2;temp&=0x0f;}h=read_ds(0x85);h1=h/16;h2=h%16;h2-=1;if(h2==-1){h2=9;h1-=1;}if(h2==9&&h1==-1){h2=3;h1=2;}write_com(0x80+0x40+0x01);write_date(table2[h1]);write_date(table2[h2]);write_ds(0x84,h1*16+h2);}}}if(num1==4){write_com(0x80+0x0f);write_com(0x0f);temp=P2;temp&=0x0f;if(temp==0x0d){delay(5);if(temp==0x0d){while(temp==0x0d)//松手检测{temp=P2;temp&=0x0f;}day=read_ds(0x8b);//从ds1302中读星期day+=1;if(day==8){day=1;}write_com(0x80+0x0f);write_date(table2[day]);write_ds(0x8a,day);//向ds1302中写入星期 }}else if(temp==0x0b){delay(5);if(temp==0x0b){while(temp==0x0b)//松手检测{temp=P2;temp&=0x0f;}day=read_ds(0x8b);day-=1;if(day==0){day=7;}write_com(0x80+0x0f);write_date(table2[day]);write_ds(0x8a,day);}}}if(num1==5){write_com(0x80+0x09);write_com(0x0f);temp=P2;temp&=0x0f;if(temp==0x0d){delay(5);if(temp==0x0d){while(temp==0x0d)//松手检测{temp=P2;temp&=0x0f;}date=read_ds(0x87);//从ds1302中读日期date1=date/16;date2=date%16;date2+=1;if(date2==10){date2=0;date1+=1;}if(date2==2&&date1==3){date2=0;date1=0;}if(date1==0&&date2==0){date1=0;date2=1;}write_com(0x80+0x08);write_date(table2[date1]);write_date(table2[date2]);write_ds(0x86,date1*16+date2);//向ds1302中写入日期 }}else if(temp==0x0b){delay(5);if(temp==0x0b){while(temp==0x0b)//松手检测{temp=P2;temp&=0x0f;}date=read_ds(0x87);date1=date/16;date2=date%16;date2-=1;if(date2==-1){date2=9;date1-=1;}if(date2==9&&date1==-1){date2=1;date1=3;}if(date1==0&&date2==0){date1=3;date2=1;}write_com(0x80+0x08);write_date(table2[date1]);write_date(table2[date2]);write_ds(0x86,date1*16+date2); }}}if(num1==6){write_com(0x80+0x06);write_com(0x0f);temp=P2;temp&=0x0f;if(temp==0x0d){delay(5);if(temp==0x0d){while(temp==0x0d)//松手检测{temp=P2;temp&=0x0f;}mon=read_ds(0x89);//从ds1302中读月mon1=mon/16;mon2=mon%16;mon2+=1;if(mon2==10){mon2=0;mon1+=1;}if(mon2==3&&mon1==1){mon2=0;mon1=0;}if(mon1==0&&mon2==0){mon1=0;mon2=1;}write_com(0x80+0x05);write_date(table2[mon1]);write_date(table2[mon2]);write_ds(0x88,mon1*16+mon2);//向ds1302中写入月 }}else if(temp==0x0b){delay(5);if(temp==0x0b){while(temp==0x0b)//松手检测{temp=P2;temp&=0x0f;}mon=read_ds(0x89);mon1=mon/16;mon2=mon%16;mon2-=1;if(mon2==-1){mon2=9;mon1-=1;}if(mon2==9&&mon1==-1){mon2=2;mon1=1;}if(mon1==0&&mon2==0){mon1=1;mon2=2;}write_com(0x80+0x05);write_date(table2[mon1]);write_date(table2[mon2]);write_ds(0x88,mon1*16+mon2); }}}if(num1==7){write_com(0x80+0x03);write_com(0x0f);temp=P2;temp&=0x0f;if(temp==0x0d){delay(5);if(temp==0x0d){while(temp==0x0d)//松手检测{temp=P2;temp&=0x0f;}year=read_ds(0x8d);//从ds1302中读年year1=year/16;year2=year%16;year2+=1;if(year2==10){year2=0;year1+=1;}if(year1==9){year1=0;}write_com(0x80+0x02);write_date(table2[year1]);write_date(table2[year2]);write_ds(0x8c,year1*16+year2);//向ds1302中写入年 }}else if(temp==0x0b){delay(5);if(temp==0x0b){while(temp==0x0b)//松手检测{temp=P2;temp&=0x0f;}year=read_ds(0x8d);year1=year/16;year2=year%16;year2-=1;if(year2==-1){year2=9;year1-=1;}if(year1==-1){year1=7;}write_com(0x80+0x02);write_date(table2[year1]);write_date(table2[year2]);write_ds(0x8c,year1*16+year2); }}}if(num1==8) //修改上限{write_com(0x80+0x40+0x0d); write_com(0x0f);delay(10);write_com(0x80+0x40+0x09); write_com(0x0e);write_date('T');write_date('H');write_com(0x80+0x40+0x0d); write_com(0x0f);th=read_th();write_com(0x80+0x40+0x0b);if(th>=100){write_date('-');th=~th+1;}else write_date(' ');th1=th/10;th2=th%10;write_date(table2[th1]);write_date(table2[th2]);temp=P2;temp&=0x0f;if(temp==0x0d){delay(5);if(temp==0x0d){while(temp==0x0d)//松手检测{temp=P2;temp&=0x0f;}tl=read_tl();th=read_th();th+=1;if(th==100){th=157;}if(th==256){th=0;}init_ds18b20(); //写上下限 write_byte(0xcc);write_byte(0x4e);write_byte(th);write_byte(tl);}}else if(temp==0x0b){delay(5);if(temp==0x0b){while(temp==0x0b)//松手检测 {temp=P2;temp&=0x0f;}th=read_th();tl=read_tl();th-=1;if(th==256){th=255;}if(th==156){th=99;}init_ds18b20(); //写上下限write_byte(0xcc);write_byte(0x4e);write_byte(th);write_byte(tl);}}}if(num1==9) //修改下限{write_com(0x80+0x40+0x0d); write_com(0x0f);delay(10);write_com(0x80+0x40+0x09); write_com(0x0e);write_date('T');write_date('L');write_com(0x80+0x40+0x0d); write_com(0x0f);tl=read_tl();write_com(0x80+0x40+0x0b); if(tl>=100){write_date('-');tl=~tl+1;}else write_date(' ');tl1=tl/10;tl2=tl%10;write_date(table2[tl1]);write_date(table2[tl2]);temp=P2;temp&=0x0f;if(temp==0x0d){delay(5);if(temp==0x0d){while(temp==0x0d)//松手检测 {temp=P2;temp&=0x0f;}tl=read_tl();th=read_th();tl+=1;if(tl==100){tl=157;}if(tl==256){tl=0;}init_ds18b20(); //写上下限 write_byte(0xcc);write_byte(0x4e);write_byte(th);write_byte(tl);}}else if(temp==0x0b){delay(5);if(temp==0x0b){while(temp==0x0b)//松手检测 {temp=P2;temp&=0x0f;}th=read_th();tl=read_tl();tl-=1;if(tl==256){tl=255;}if(tl==156){tl=99;}init_ds18b20(); //写上下限write_byte(0xcc);write_byte(0x4e);write_byte(th);write_byte(tl);}}}if(num1==10){write_com(0x80+0x40+0x09); write_com(0x0e);write_date(' ');write_date(' ');write_date(' ');init_ds18b20(); //拷贝上下限write_byte(0xcc);write_byte(0x48);num1=0;write_ds(0x80,s&0x7f);write_ds(0x8e,0x80);//开启写保护 break;}}}if(temp==0x07)//闹钟设定{delay(5);if(temp==0x07){while(temp==0x07){temp=P2;temp&=0x0f;}if(alarm==1){P34=1;alarm=0;stop_alarm=1;}else{num2=1;while(1){temp=P2;temp&=0x0f;if(temp==0x07){delay(5);temp=P2;temp&=0x0f;if(temp==0x07){num2++;}}while(temp==0x07)//松手检测{temp=P2;temp&=0x0f;}if(num2==1)//按下第一次显示上次设定的时间 {write_com(0x80);for(i=0;i<16;i++){write_date(table3[i]);delay(10);}write_com(0x80+0x40+0x0c);write_date(' ');write_date(' ');write_date(' ');write_date(' ');hour=read_add(1);hour1=hour/10;hour2=hour%10;min=read_add(7);min1=min/10;min2=min%10;sec=read_add(4);sec1=sec/10;sec2=sec%10;write_com(0x80+0x40+0x01); write_date(table2[hour1]);write_date(table2[hour2]);write_com(0x80+0x40+0x04); write_date(table2[min1]);write_date(table2[min2]);write_com(0x80+0x40+0x07); write_date(table2[sec1]);write_date(table2[sec2]);}if(num2==2)//按下第二次设定秒 {write_com(0x80+0x40+0x08); write_com(0x0f);delay(100);temp=P2;temp&=0x0f;if(temp==0x0d){delay(5);if(temp==0x0d){while(temp==0x0d)//松手检测 {temp=P2;temp&=0x0f;}sec++;if(sec==60) sec=0;}}else if(temp==0x0b){delay(5);if(temp==0x0b){while(temp==0x0b)//松手检测 {temp=P2;temp&=0x0f;}sec--;if(sec==255) sec=59;}}}sec1=sec/10;sec2=sec%10;write_com(0x80+0x40+0x07); write_date(table2[sec1]);write_date(table2[sec2]);if(num2==3)//按下第三次设定分 {write_com(0x80+0x40+0x05); write_com(0x0f);delay(100);temp=P2;temp&=0x0f;if(temp==0x0d){delay(5);if(temp==0x0d){while(temp==0x0d)//松手检测 {temp=P2;temp&=0x0f;}min++;if(min==60) min=0;}}else if(temp==0x0b){delay(5);if(temp==0x0b){while(temp==0x0b)//松手检测 {temp=P2;temp&=0x0f;}min--;if(min==255) min=59;}}}min1=min/10;min2=min%10;write_com(0x80+0x40+0x04); write_date(table2[min1]);write_date(table2[min2]);if(num2==4)//按下第四次设定时 {write_com(0x80+0x40+0x02); write_com(0x0f);delay(100);temp=P2;temp&=0x0f;if(temp==0x0d){delay(5);if(temp==0x0d){while(temp==0x0d)//松手检测 {temp=P2;temp&=0x0f;}hour++;if(hour==24) hour=0;}}else if(temp==0x0b){delay(5);if(temp==0x0b){while(temp==0x0b)//松手检测{temp=P2;temp&=0x0f;}hour--;if(hour==255) hour=23;}}}hour1=hour/10;hour2=hour%10;write_com(0x80+0x40+0x01);write_date(table2[hour1]);write_date(table2[hour2]);if(num2==5) //按下第五次向eeprom中写入时分(秒省略),并退出循环 {write_add(7,min);delay(10);write_add(1,hour);write_com(0x80);for(i=0;i<16;i++){write_date(table[i]);delay(10);}write_com(0x80+0x40+0x0e);write_date(0xdf);write_date('c');break;}}}}}}}}/***********************************************************************************************主函数部分**************************************************************************************************/ void main(){uchar temp;init();init_1602();init_ds();temp=read_temp();delay(100);while(1)//循环检测{read_all();keyscan();write_com(0x80+0x40+0x01);write_date(table2[h1]);write_date(table2[h2]);write_com(0x80+0x40+0x04);write_date(table2[m1]);write_date(table2[m2]);write_com(0x80+0x40+0x07);write_date(table2[s1]);write_date(table2[s2]);write_com(0x80+0x02);write_date(table2[year1]);write_date(table2[year2]);write_com(0x80+0x05);write_date(table2[mon1]);write_date(table2[mon2]);write_com(0x80+0x08);write_date(table2[date1]);write_date(table2[date2]);write_com(0x80+0x0f);write_date(table2[day]);temp=read_temp();th=read_th();tl=read_tl();//*********************************************************************************温度上限先检测及报警write_com(0x80+0x40+0x0b);if(temp<128) //查看温度是否超过上下限{if((th>128)||(th<128&&temp>=th)||(tl<128&&temp<=tl)){P34=0;delay(1000);P34=1;}}if(temp>128) //temp>128时温度取反后加一,查看温度是否超过上下限{if((th>128&&temp>=th)||(tl>128&&temp<=tl)||(tl<128)){P34=0;delay(1000);P34=1;}write_date('-');temp=~temp+1;}else write_date(' ');write_date(table2[temp/10]);write_date(table2[temp%10]);min=read_add(7);delay(5);hour=read_add(1);delay(5);//***********************************************************************************闹钟检测及报警if((min==m1*10+m2)&&stop_alarm){}else if((min==m1*10+m2)&&(hour==h1*10+h2)&&(!stop_alarm)) //闹钟{alarm=1;}if((min!=m1*10+m2)&&stop_alarm){stop_alarm=0;}if(alarm==1){P34=0;delay(30);P34=1;delay(100);P34=0;delay(30);P34=1;delay(100);P34=0;delay(30);P34=1;delay(100);P34=0;delay(30);P34=1;delay(100);}//*************************************************************************************************** }}上位机程序(VB语言):Option ExplicitDim i%Dim buf$Private Sub Form_Load()mPort = 2MSComm1.PortOpen = TrueMSComm1.RThreshold = 1MSComm1.InBufferCount = 0MSComm1.InputMode = comInputModeTextText1.FontSize = 10End SubPrivate Sub MSComm1_OnComm() Select Case mEvent Case comEvReceivebuf = Trim(Str(Asc(MSComm1.Input))) i = i + 1If i = 1 ThenText1.Text = bufEnd IfIf i = 2 ThenText2.Text = bufEnd IfIf i = 3 Theni = 0Text3.Text = bufEnd IfEnd SelectEnd Sub上位机运行图片:。

基于VB的计算机温度采集系统设计与实现.

基于VB的计算机温度采集系统设计与实现.

基于VB的计算机温度采集系统设计与实现本系统用单片机对整个测量电路进行管理和控制,使得整个系统智能化、体积小、功耗低、使用电子元件较少,内部配线少,成本低,制造、安装、调试及维修方便。

该系统中单片机作为下位机,完成测温任务,测量结果可在本地显示,也可通过下位机与上位机(PC机)通讯,给出结果和提示信息。

而上位机与下位机大多是通过PC机的RS-232串行接口实现通信。

VisualBasic是可视化面向对象的采用事件驱动技术的结构化程序设计语言,本系统上位机是在Windows本系统用单片机对整个测量电路进行管理和控制,使得整个系统智能化、体积小、功耗低、使用电子元件较少,内部配线少,成本低,制造、安装、调试及维修方便。

该系统中单片机作为下位机,完成测温任务,测量结果可在本地显示,也可通过下位机与上位机(PC机)通讯,给出结果和提示信息。

而上位机与下位机大多是通过PC机的RS-232串行接口实现通信。

Visual Bas ic是可视化面向对象的采用事件驱动技术的结构化程序设计语言,本系统上位机是在Windows环境下利用Visual basic开发微机通信程序。

2 系统基本原理系统结构如图1所示,其中,计算机要求能够运行Windows98或更高版本)操作系统和开发环境VB6.0,具有标准的RS232串口,主要功能为数据采集处理和系统控制,是人机交互的平台。

现场温度采集点共有4路,采用AD590采集温度送到单片机的A/D转换器转入端,测量范围最大值为50度,单片机定时采集温度信号,并按串行通信协议打包构成数据帧。

在微机中采用VB6.0编程,并选用MS COMM控件进行串行口通讯。

MSComm控件是Microsoft提供的扩展控件,用于支持VB程序对串口的访问,同时支持查询方法和事件驱动通讯的机制。

事件驱动通讯是交互方式处理串口事务的一种非常有效的方法,特别适合Windows程序的编写。

因此用其实现微机串口的数据通讯相当简单,以很少的程序代码就可以轻松实现串口的访问和数据通讯。

VB上位机温度采集(含源程序)

VB上位机温度采集(含源程序)

VB程序Option ExplicitDim NowX As IntegerDim MaxPlotNo As LongDim PreV alue As SinglePrivate Sub cmbCOM_Click()If cmbCOM.ListIndex + 1 = mPort Then Exit SubTimer1.Enabled = FalseTimeDelay 100If MSComm1.PortOpen ThenMSComm1.PortOpen = FalseEnd IflblMsg.Caption = "已停止检测并关闭通讯端口"cmdOpenCOM.Enabled = TrueEnd SubPrivate Sub cmdEnd_Click()EndEnd SubPrivate Sub cmdOpenCOM_Click()If cmbCOM.ListIndex >= 0 And cmbCOM.ListIndex <= 16 ThenmPort = cmbCOM.ListIndex + 1ElseMsgBox "指定通信端口时发生错误!", vbCritical + vbOKOnly, "系统信息"Exit SubEnd IfOn Error GoTo comErrMSComm1.Settings = "9600,n,8,1"MSComm1.PortOpen = TruecmdOpenCOM.Enabled = FalsecmdStart.Enabled = TruelblMsg.Caption = "可单击【开始检测】按钮,执行检测的工作。

"Exit SubcomErr:MsgBox "打开通信端口时发生错误!请确定通信端口存在且正常。

", vbCritical + vbOKOnly, "系统信息"End SubPrivate Sub cmdStart_Click()Timer1.Enabled = Not Timer1.EnabledIf Timer1.Enabled ThencmdStart.Caption = "停止检测"ElsecmdStart.Caption = "开始检测"lblMsg.Caption = "已停止检测"End IfEnd SubPrivate Sub Form_Load()Dim i%MaxPlotNo = 100cmbCOM.ClearcmbCOM.AddItem "COM1"cmbCOM.AddItem "COM2"cmbCOM.AddItem "COM3(USB)"cmbCOM.AddItem "COM4(USB)"cmbCOM.AddItem "COM5"cmbCOM.AddItem "COM6"cmbCOM.AddItem "COM7"cmbCOM.AddItem "COM8"cmbCOM.AddItem "COM9"cmbCOM.AddItem "COM10"cmbCOM.AddItem "COM11"cmbCOM.AddItem "COM12"cmbCOM.AddItem "COM12"cmbCOM.AddItem "COM14"cmbCOM.AddItem "COM15"cmbCOM.AddItem "COM16"cmbCOM.ListIndex = 0cmdStart.Enabled = False'以下设定绘图范围,(Xmin,YMax)-(XMax,YMin) picV oltage.Scale (0, 50)-(MaxPlotNo, 0)picV oltage.DrawWidth = 2 '使用两个像素宽度的画笔End SubPrivate Sub Label2_Click()End SubPrivate Sub lblValue_Click()End SubPrivate Sub MSComm1_OnComm()End SubPrivate Sub Timer1_Timer()Dim Buf$, ValueStr As Single, Pos1%Buf$ = Buf$ + MSComm1.InputTimeDelay 2150ValueStr = Val(Mid(Buf, Pos1 + 1, 7))lblValue.Caption = Format(ValueStr, "00.0000") & "℃" If NowX = 0 ThenpicVoltage.ClspicVoltage.PSet (0, ValueStr)ElseIf ValueStr > PreV alue + 0.01 ThenpicVoltage.Line -(NowX, ValueStr), RGB(255, 0, 0) ElsepicVoltage.Line -(NowX, ValueStr), RGB(0, 0, 255) End IfEnd IfPreV alue = ValueStrNowX = NowX + 1If NowX > MaxPlotNo Then NowX = 0End Sub。

VB编写的上位机程序

VB编写的上位机程序

VB编写的上位机程序Dim state As Integer '电机状态Dim addr As Integer '从机地址变量Dim speed As Integer '速度变量'Dim num1 As StringPublic wholechar As StringDim RTUcrc As StringDim Inbyte() As BytePublic Buffer As String 'Private Sub Combo1_Click()'Dim temp1 As Single'temp1 = Val(Combo1.Text) '取角度值'num1 = Str(temp1 / 0.9)End SubPrivate Sub Combo2_Click()num2 = Val(Combo2.Text)num2 = num2 * 2End SubPrivate Sub Combo3_Click()speed = Val(Combo3.Text)End SubPrivate Sub Combo4_Click()addr = V al(Combo4.Text)End SubPrivate Sub Command1_Click()MSComm1.Settings = "9600,n,8,1"MSComm1.InBufferSize = 12 '设置MSComm1接收缓冲区为4字节MSComm1.OutBufferSize = 20 '设置MSComm1发送缓冲区为2字节MSComm1.InputMode = comInputModeBinary '设置接收数据模式为二进制形式MSComm1.InputLen = 6 '设置Input 一次从接收缓冲读取字节数为6 MSComm1.RThreshold = 1MSComm1.SThreshold = 0MSComm1.InBufferCount = 0 '清除接收缓冲区MSComm1.OutBufferCount = 0 '清除发送缓冲区If MSComm1.PortOpen = False ThenMSComm1.PortOpen = TrueCommand1.Enabled = FalseCommand2.Enabled = FalseCommand3.Enabled = TrueIf Err ThenMsgBox "串口通信无效"End IfEnd IfEnd SubPrivate Sub Command2_Click()Dim hexchrlen%, Hexchr As String, hexcyc As Integer, hexmid As Byte, hexmiddle As String Dim hexchrgroup() As Byte, i As IntegerShape1(0).FillStyle = 1Shape1(1).FillStyle = 1Shape1(2).FillStyle = 1Shape1(3).FillStyle = 1hexchrlen = Len(wholechar)For hexcyc = 1 To hexchrlen '检查Text1文本框内数值是否合适Hexchr = Mid(wholechar, hexcyc, 1)If InStr("0123456789ABCDEFabcdef", Hexchr) = 0 ThenMsgBox "无效的数值,请重新输入", , "错误信息"Exit SubEnd IfNextReDim hexchrgroup(1 To hexchrlen) As ByteFor hexcyc = 1 T o hexchrlen Step 2 '将文本框内数值分成两个、两个i = i + 1Hexchr = Mid(wholechar, hexcyc, 2)hexmid = Val("&H" & CStr(Hexchr))hexchrgroup(i) = hexmid'MSComm1.Output = CStr(hexmid)NextMSComm1.Output = hexchrgroupTimer1.Enabled = TrueEnd SubPrivate Sub Command3_Click()MSComm1.PortOpen = FalseEndEnd SubPrivate Sub Form_Load()For i% = 0 To 20Combo2.AddItem Str(i)Next iCombo2.T ext = "0"For j# = 0.9 To 180.9 Step 0.9Combo1.AddItem Left(CStr(j), 5)Next jCombo1.T ext = "0"For k% = 80 To 255Combo3.AddItem Str(k)Next kCombo3.T ext = "0"Combo4.AddItem "00"Combo4.AddItem "01"Combo4.AddItem "02"Combo4.AddItem "03"Combo4.AddItem "04"Combo4.AddItem "05"Combo4.AddItem "06"Combo4.AddItem "07"Combo4.AddItem "08"Text1.Text = Space(5) + "欢迎使用该控制软件" + Chr(13) + Chr(10) _ + Space(9) + "请打开串口!" + Chr(13) + Chr(10) + Space(9) + _"作者:戚金毅" + Chr(13) + Chr(10) + Space(9) + "班级:电子301班"Option1(0).Value = FalseOption1(1).Value = FalseOption1(2).Value = FalseOption1(3).Value = FalseOption2(0).Value = TrueOption2(1).Value = FalseFor i% = 0 To 3Shape1(i).FillStyle = 1Shape1(i).FillColor = QBColor(4)Next iCommand1.Enabled = TrueCommand2.Enabled = FalseCommand3.Enabled = True/doc/fe10044893.html,mPort = 1Timer1.Enabled = FalseTimer1.Interval = 40 '25End SubPrivate Sub MSComm1_OnComm()Dim Hexchr As String, i As IntegerDim j As Integer, string2 As StringDim k As IntegerDim e(6) As Byte, string3 As StringInbyte = MSComm1.Input '十六进制显示For k = LBound(Inbyte) T o UBound(Inbyte)e(k) = Val(Hex(Inbyte(k)))Next kIf Val(e(1)) = 6 ThenText1.Text = " 成功发送!"Select Case stateCase 1Shape1(0).FillStyle = 0Shape1(1).FillStyle = 1Shape1(2).FillStyle = 1Shape1(3).FillStyle = 1Case 2Shape1(0).FillStyle = 1Shape1(1).FillStyle = 0Shape1(2).FillStyle = 1Shape1(3).FillStyle = 1Case 4Shape1(0).FillStyle = 1Shape1(1).FillStyle = 1Shape1(2).FillStyle = 0Shape1(3).FillStyle = 1Case 8Shape1(0).FillStyle = 1Shape1(1).FillStyle = 1Shape1(2).FillStyle = 1Shape1(3).FillStyle = 0End SelectFor j = 1 To 4If e(j) < 16 ThenText2.Text = Text2.Text & "0" & e(j) & " " ElseText2.Text = Text2.Text & e(j) & " "End IfNext jTimer1.Enabled = FalseElseFor m% = 0 To 3Shape1(m).FillStyle = 1Next mText1.Text = "未成功发送,请再次发送!" Command2.Enabled = TrueEnd IfEnd SubPrivate Sub Option1_Click(Index As Integer) Select Case IndexCase 0state = 1Call incorporateCall checkCommand2.Enabled = TrueCase 1state = 2Call incorporateCall checkCommand2.Enabled = TrueCase 2state = 4Call incorporateCall checkCommand2.Enabled = TrueCase 3state = 8Call incorporateCall checkCommand2.Enabled = TrueEnd SelectEnd SubPrivate Sub Option2_Click(Index As Integer) Select Case IndexCase 0/doc/fe10044893.html,mPort = 1Case 1/doc/fe10044893.html,mPort = 2End SelectEnd SubPrivate Sub incorporate()Dim fcode As String, datalen As StringDim raddr As String, state1 As StringDim speed1 As String, addr1 As StringDim num1 As String '角度变量Dim num2 As String '圈数变量Dim anglenum1%, anglenum2%temp! = Val(Combo1.Text)temp2% = temp / 0.9anglenum1 = Len(CStr(Hex(Val(temp2))))'anglenum1 = Len(num1)Select Case anglenum1Case 0Exit SubCase 1num1 = "0" & CStr(Hex(Val(temp2)))Case 2num1 = CStr(Hex(Val(temp2)))End Selectanglenum2 = Len(CStr(Hex(Val(Combo2.Text)))) Select Case anglenum2Case 0Exit SubCase 1num2 = "0" & CStr(Hex(Val(Combo2.T ext))) Case 2num2 = CStr(Hex(Val(Combo2.Text)))End Selectfcode = "0" & Hex(6)datalen = "0" & Hex(5)raddr = Hex(48)state1 = "0" & Hex(state)speed1 = Hex(speed)addr1 = "0" & Hex(addr)Text1.Text = addr1 & fcode & datalen _& raddr & state1 & speed1 & num1 & num2wholechar = Text1.TextEnd SubPrivate Sub check()Dim CRC() As ByteDim d(9) As ByteDim string1 As StringDim j As Integer, chrlength As Integer, temp As Stringstring1 = wholecharchrlength = Len(string1)For j = 0 To chrlength / 2temp = Mid(string1, j * 2 + 1, 2)d(j) = Val("&H" & temp)Next jRTUcrc = CRC16(d) '调用CRC16计算函数,CRC(0)为高位,CRC(1)为低位wholechar = wholechar & RTUcrcEnd SubPrivate Function CRC16(data() As Byte) As StringDim CRC16Lo As Byte, CRC16Hi As ByteDim CL As Byte, CH As ByteDim CRCLo As String, CRCHi As StringDim SaveHi As Byte, SaveLo As ByteDim i As IntegerDim Flag As IntegerCRC16Lo = &HFFCRC16Hi = &HFFCL = &H1CH = &HA0For i = 0 To UBound(data)CRC16Lo = CRC16Lo Xor data(i)For Flag = 0 To 7SaveHi = CRC16HiSaveLo = CRC16LoCRC16Hi = CRC16Hi \ 2CRC16Lo = CRC16Lo \ 2If ((SaveHi And &H1) = &H1) Then CRC16Lo = CRC16Lo Or &H80End IfIf ((SaveLo And &H1) = &H1) Then CRC16Hi = CRC16Hi Xor CHCRC16Lo = CRC16Lo Xor CLEnd IfNext FlagNext iIf Len(Hex(CRC16Hi)) = 1 Then CRCHi = "0" + Hex(CRC16Hi) Else CRCHi = Hex(CRC16Hi)End IfIf Len(Hex(CRC16Lo)) = 1 Then CRCLo = "0" + Hex(CRC16Lo) Else CRCLo = Hex(CRC16Lo)End IfCRC16 = CRCLo + CRCHi End Function Private Sub Timer1_Timer()Text1.Text = "该从机不存在!"For j% = 0 To 3Shape1(j).FillStyle = 1Next jTimer1.Enabled = FalseEnd Sub。

用VB编写上位机

用VB编写上位机

VB编写上位机实例用VB编写上位机实例16:14:22 UTC+0800Sun Apr 1 2007用VB6.0编写第一个串口通信上位机程序Visual Basic6.0是一个可视化窗口环境的编程软件,目前使用Visual Basic6.0可以快速简单编写单片机中的串口通信上位机程序。

电子制作HPOO下面我们以一个完整的通信试验为例子完成如何用Visual Basic6.0编写单片机串口通信程序。

打开安装好后的Visual Basic6.0主程序界面。

选择“标准EXE”。

如图1显示,建立Visual Basic 的编程环境。

图1在菜单的[工程]选项中选择[部件],如图2。

把Visual Basic的串口通信控件Microsoft Comm control 6.0调入工作菜单。

图2在打开[部件]对话框中,选择Microsoft Comm control 6.0的选项框,点击[确定]。

图3图3可以在图示3中可以看通信控件Microsoft Comm control 6.0的文件是在C:\WINNT\system32\MSCOMM32.OCX文件。

如果大家在首次调用通信控件Microsoft Comm control 6.0控件时无法在控件对话框中找到,请直接在系统目录中搜索名为MSCOMM32.OCX文件。

然后通过浏览加入VB的工作界面中。

添加完控件回到编程界面。

如下图4。

图4通过右边的菜单把一些必要的控件放在窗体中。

然后点击窗体中的Timer控件按F4弹出属性窗口进行设置。

其具体设置如下:Timer定时器控件设置属性,(通过按F4键可弹出此窗口)Mscomm通信控件参数属性设置(通过单击控件的右键属性可弹出此窗口)本文用到的其他控件:CommandButton控件和TextBox控件按默认属性设置不变。

单片机编程器HPOO以上设置完成,回到编程窗体区中,任意双击。

会显示Visual Basic的程序窗体的Load事件程序。

基于vb的温度控制系统

基于vb的温度控制系统

程序界面说明系统登录界面双击软件“中药熏蒸上位机温度控制软件.exe”,出现用户权限登录界面,经过用户登录界面后就进入了患者信息统计界面,紧接着进入主程序界面。

用户登录界面如图5-3或5-4所示。

图5-3 用户登录界面(中文版)图5-4 用户登录界面(英文版)用户登录界面由用户名输入框、用户密码输入框、登录按钮、注销按钮等组成。

为了保障系统内部患者信息的安全性,特地设有登录权限,首先输入登录的用户名,用户密码,二者皆输入正确后即可完成登录。

继而进入患者信息统计界面统计和查询相关数据,进入主界面进行监视和控制。

如果用户不输入用户名而直接登录则会弹出如图5-5或图5-6所示的提示信息,告知用户使用步骤。

本系统用户名不为空即可,用户密码为“1234”。

如果当用户名输入有误时,系统就会自动弹出“请输入正确的用户名!”或“Please enter the right administrator name”警告对话框,如图5-7或图5-8所示。

同样,如果当用户密码输入有误时,系统同样会弹出“密码错误,请重试!”或“Password is incorrect,please try again!”的警告对话框,如图5-9或5-10所示。

当用户在用户名或用户密码输入错误的情况下连续登录次数达3次以上,系统将弹出如图5-11或图5-12所示的“您登录的次数已超上限值,系统将自动退出”提示对话框或“The number has exceeded the upper limit of your login, the system will automatically exit”提示对话框自动退出系统。

考虑到用户密码的保密,用户在输入登录密码时,密码输入框使用“*”代替密码字符显示。

当用户成功登录后,系统自动弹出如图5-13或图5-14所示的“登录成功,欢迎您的使用!”提示窗口或“Login Successfully! Welcome to use this system”提示窗口,点击确定后进入患者信息统计界面。

利用VB实现采空区无线自组网温度数据采集

利用VB实现采空区无线自组网温度数据采集

设 置 通 信 端 口为 C M1 O
MS mm1. e t g = ” 1 0 Co S ti s n 2 0, n, 8, 1 ”
设置通信波特率为 10 p s 20 b ,无奇偶校验位 ,8个数据位ቤተ መጻሕፍቲ ባይዱ,1个停
止 位
MS o C mm1 Ou Bu e C u t = 0 . t f ro n
作者简介 :李林娟 ( 93 ) 女 , 1 8 一 , 湖北宜城人 , 助理工程师 , 硕士, 主要从事 自动化工程设 计工作 。
21 0 1年第 5期
李林娟 , : 等 利用 V B实现采空 区无线 自组 网温度数据 采集
En l d l
‘1 3 ・ 6
O C m 事件来 追踪 、处理 通信 以及 错误 事件 的发 no m 生 。本 文上 位 机 程 序 设 计 采 用 M C m 通 信 控 件 来 Som 完成 ,此控件应用方便和灵活 ,完全能满足系统通信 的要 求 。
无 线 自组 网温度 采集 系统 的工 作过 程如 下 :首先 由操作员通过 P c上位机发出温度采集命令 ,该命令 通过 以太 网发 送 到 R 45转 以太 网控 制 台 ,通 过 该 S8 控制台将 以太网信号转化为 4 5 8 信号 以方便温度采集 主节 点收 到上 位机 发 出的指令 ;温 度采集 主 节点通 过 自带 的单 片机 芯片 和无线 发 收器处 理该 指令 ,并将 指 令转 发给 子节 点 ,温度采 集子 节点 收到 指令 后 ,判断 该指令 是 否是发 送 给 自己的 ,如果 是则 将采 集到 的温 度信息通过原路返回到 P C上位机 ,否则将指令信息
中 图分 类 号 :T 7 Ⅱ 4 D 6: 文 献标 识 码 :A

基于VB的计算机温度采集系统设计与实现

基于VB的计算机温度采集系统设计与实现

基于VB的计算机温度采集系统设计与实现
孙延维;房晓东
【期刊名称】《微计算机信息》
【年(卷),期】2007(023)023
【摘要】本文介绍了一种实用的利用计算机来集温度的系统实现方法,包括硬件的组织结构和软件的编制,采用AD590作温度传感器,ADC0809作模数转换器,单片机89C51作为下位机,PC机作为上位机.上位机与下位机通过PC机的RS-232串行接口实现通信.
【总页数】3页(P122-123,151)
【作者】孙延维;房晓东
【作者单位】430205,湖北省,湖北教育学院;525000,广东省,广东茂名广播电视大学
【正文语种】中文
【中图分类】TP311
【相关文献】
1.基于VB的计算机等级考试辅助学习系统设计与实现 [J], 张凡;于茂春;李艾青;刘秀
2.基于DVB信号的实时采集编码系统设计与实现 [J], 陈华凌;张仁政
3.基于VB与PCI-1712采集卡的电流监视系统设计与实现 [J], 张桂平;丁求启;贾云翔
4.基于VB的DQC-Ⅱ型流速仪数据采集系统设计与实现 [J], 邹蓉;梁岚珍;李靖
5.基于VB的实时数据采集系统设计与实现 [J], 黄文聪; 常雨芳
因版权原因,仅展示原文概要,查看原文内容请购买。

基于VB的上位机程序设计,用来实时监测温度变化

基于VB的上位机程序设计,用来实时监测温度变化

基于VB的上位机程序设计,用来实时监测温度变化用来连接Arduino的传感器很多,但是都没办法直观观测传感器数据值,本文设计的是一个简单的温度检测系统,上位机程序用来检测和显示Arduino串口发送的温度数据,并通过曲线的形式描绘出温度的变化过程。

上位机程序采用VB6.0设计。

上位机程序两次接收的温度数据间隔控制在1秒钟,能够显示的温度曲线的总时间在3分钟左右。

一、VB介绍VB是Visual Basic的简称,是美国微软公司于1991年开发的一种可视化的、面向对象和采用事件驱动方式的结构化高级程序设计语言,类似于浏览器中JAVAScript操作HTML一样、安卓APP开发等。

可用于开发Windows 环境下的各类应用程序。

今天我们以VB6.0为基础,简单的认识一下VB。

二、VB基本操作安装Visual Basic成功之后,安装程序自动在【开始】菜单中建立Visual Basic 6.0的程序组和程序项。

点击启动,在VB启动后,屏幕上将出现如图2-1所示的启动界面,在启动界面中会出现一个【新建工程】对话框。

图2-1 启动界面2.1、创建工程在VB启动界面中的【新建工程】对话框中选择一个合适的工程类型,然后单击【打开】按钮,就可以新建一个工程,新工程打开后的用户界面如图2-2所示。

图2-2 用户界面2.2、控件设置和控件属性设置在用户界面的左侧是VB的【工具箱】,在【工具箱】中有我们常用的各类控件,在设计窗体时我们可以直接从工具箱中选择控件,然后在中间的【对象窗口】中按住鼠标左键拖出一个矩形后,相应的控件就放置到了用户的编辑窗口中,对于控件的各个属性,我们可以通过VB界面右面的【属性窗口】设置各个控件的各种属性,放置并调整好控件的各个属性的,如图2-3所示。

图2-3 添加控件后的对象窗口2.3、添加代码双击【对象窗口】的空白处或者某个控件,就会出现【代码窗口】,如图2-4所示。

图2-4 代码窗口在代码窗口中为各个事件添加相应的代码,在程序运行的时候一旦某个事件发生,就会执行相应的代码段,这里以Form_Load()事件为例,简单的设计一个实例程序。

基于VB和Access的温度采集系统的设计与实现

基于VB和Access的温度采集系统的设计与实现

基于VB和Access的温度采集系统的设计与实现摘要:随着现代信息技术的高速发展,数据采集方面的技术也在不断地向前发展,并在信息技术中占有重要地位,温度、压力等参数在智能家居、工业控制、智能农业等方面都得到很高的重视,如何实时直观地采集到温度成为焦点。

本温度采集系统下位机采用STC89C52 单片机为主控制器,采用单线式DS18B20 温度传感器采集温度,通过串口RS232 将其传送到上位机(PC 机),上位机使用VB 编写界面和后台处理程序,将温度显示出来并存入Access 数据库。

最终测试结果显示上位机有实时接收数据,并将实时接收到的数据存入Access 数据库里,并能够实时的把温度曲线显示到界面上。

关键词:温度采集;下位机;上位机;Access 随着现代信息技术的高速发展,数据采集方面的技术也在不断地向前发展,并在信息技术中占有重要地位,是否及时准确采集数据以及数据是何方式采集都成为关注的焦点。

随着嵌入式技术的不断发展,各种数据采集系统不断应用于各个领域。

温度采集在智能家居、工业控制、智能农业等方面都应用。

本温度采集系统下位机采用STC89C52 单片机为主控制器,采用DS18B20 温度传感器采集温度,上位机使用VB 编写程序,通过串口采集数据,存入Access 数据库,并实时在界面上显示温度变化曲线。

1 系统的整体设计本温度采集系统的总体框图如图1 所示,系统下位机即单片机系统采用的是现成的开发板,开发板上自带了DS18B20 的温度传感器,开发板也自带了能够维持单片机正常工作的外围电路;上位机用的Microsoft Visual Basic 6.0 中文版集成开发环境和Microsoft Office Access 2003 数据库开发软件。

2 上位机的设计与实现上位机设计的主要重难点在于串口从下位机接收到数据和把数据送到数据库里并把数据实时用曲线显示出来。

上位机总体设计流。

基于RS485和VB的远程温度采集系统

基于RS485和VB的远程温度采集系统

基于RS485和VB的远程温度采集系统信息工程学院生医0701摘要:本系统以RS485总线和VB上位机控制台为核心,构成了一个可远达1200M范围内的远程温度采集网络。

系统通过双绞线作为信号传输媒介,引入RS485总线信号传输的一些处理措施,具有良好的信息传输准确性和系统抗干扰性。

另外,本系统可以在RS485总线上挂接最多由51单片机和DS18B20构成的32个温度采集节点,并且系统密切与RS485总线的“轮询”思想和VB 上位机控制台相结合,因此可以说是构成了真正意义上的远程智能温度采集网络!该系统可以广泛应用在需要对温度进行实时和全天候观察的各种场合,具有较高的实际应用价值!关键词:RS485总线轮询VB上位机51单片机DS18B20正文RS485总线接口做为多点、差分数据传输的规范,现已成为业界应用较为广泛的标准通信接口之一。

RS485标准只对接口的电气特性做出了规定,而不涉及接插件、电缆或协议,因此,用户可在此基础上建立自己的高层通信协议。

在工业自动控制中,计算机通过串口与单片机系统之间进行通信的应用越来越广泛。

一般情况下,控制系统需要一个高级语言开发的相当于控制台的用户界面,用来进行参数设置,发送指令和系统检测,VB在这一领域用着很强的优势。

从控制台发出的指令经过计算机串口传送给单片机系统,此时VB携带的通信控件MSComm起到了桥梁作用,给编程者带来了极大的方便。

DALLAS公司生产的DS18B20可组网数字温度传感器具有“一线总线”接口、测温范围-55℃~+125℃、固有测温分辨率0.5℃、体积小、耐磨耐碰等特点,非常适合与传统的51单片机构成温度采集节点。

将RS485总线及“轮询思想”、VB上位机控制台、51单片机和DS18B20构成的温度采集节点有机的结合起来就可以构成一个远程的智能温度采集系统。

1RS485总线1.1 RS485总线介绍电子工业协会(EIA)于1983年制订并发布RS-485 标准,并经通讯工业协会(TIA)修订后命名为TIA/EIA-485-A,习惯地称之为RS-485标准。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

VB程序
Option Explicit
Dim NowX As Integer
Dim MaxPlotNo As Long
Dim PreV alue As Single
Private Sub cmbCOM_Click()
If cmbCOM.ListIndex + 1 = mPort Then Exit Sub
Timer1.Enabled = False
TimeDelay 100
If MSComm1.PortOpen Then
MSComm1.PortOpen = False
End If
lblMsg.Caption = "已停止检测并关闭通讯端口"
cmdOpenCOM.Enabled = True
End Sub
Private Sub cmdEnd_Click()
End
End Sub
Private Sub cmdOpenCOM_Click()
If cmbCOM.ListIndex >= 0 And cmbCOM.ListIndex <= 16 Then
mPort = cmbCOM.ListIndex + 1
Else
MsgBox "指定通信端口时发生错误!", vbCritical + vbOKOnly, "系统信息"
Exit Sub
End If
On Error GoTo comErr
MSComm1.Settings = "9600,n,8,1"
MSComm1.PortOpen = True
cmdOpenCOM.Enabled = False
cmdStart.Enabled = True
lblMsg.Caption = "可单击【开始检测】按钮,执行检测的工作。

"
Exit Sub
comErr:
MsgBox "打开通信端口时发生错误!请确定通信端口存在且正常。

", vbCritical + vbOKOnly, "系统信息"
End Sub
Private Sub cmdStart_Click()
Timer1.Enabled = Not Timer1.Enabled
If Timer1.Enabled Then
cmdStart.Caption = "停止检测"
Else
cmdStart.Caption = "开始检测"
lblMsg.Caption = "已停止检测"
End If
End Sub
Private Sub Form_Load()
Dim i%
MaxPlotNo = 100
cmbCOM.Clear
cmbCOM.AddItem "COM1"
cmbCOM.AddItem "COM2"
cmbCOM.AddItem "COM3(USB)"
cmbCOM.AddItem "COM4(USB)"
cmbCOM.AddItem "COM5"
cmbCOM.AddItem "COM6"
cmbCOM.AddItem "COM7"
cmbCOM.AddItem "COM8"
cmbCOM.AddItem "COM9"
cmbCOM.AddItem "COM10"
cmbCOM.AddItem "COM11"
cmbCOM.AddItem "COM12"
cmbCOM.AddItem "COM12"
cmbCOM.AddItem "COM14"
cmbCOM.AddItem "COM15"
cmbCOM.AddItem "COM16"
cmbCOM.ListIndex = 0
cmdStart.Enabled = False
'以下设定绘图范围,(Xmin,YMax)-(XMax,YMin) picV oltage.Scale (0, 50)-(MaxPlotNo, 0)
picV oltage.DrawWidth = 2 '使用两个像素宽度的画笔End Sub
Private Sub Label2_Click()
End Sub
Private Sub lblValue_Click()
End Sub
Private Sub MSComm1_OnComm()
End Sub
Private Sub Timer1_Timer()
Dim Buf$, ValueStr As Single, Pos1%
Buf$ = Buf$ + MSComm1.Input
TimeDelay 2150
ValueStr = Val(Mid(Buf, Pos1 + 1, 7))
lblValue.Caption = Format(ValueStr, "00.0000") & "℃" If NowX = 0 Then
picVoltage.Cls
picVoltage.PSet (0, ValueStr)
Else
If ValueStr > PreV alue + 0.01 Then
picVoltage.Line -(NowX, ValueStr), RGB(255, 0, 0) Else
picVoltage.Line -(NowX, ValueStr), RGB(0, 0, 255) End If
End If
PreV alue = ValueStr
NowX = NowX + 1
If NowX > MaxPlotNo Then NowX = 0
End Sub。

相关文档
最新文档