基于温度采集的单片机和visual--c--串口通信1带电脑端程序--课程设计报告--学士学位论文.doc
单片机课程设计报告题目:基于温度采集的单片机和VISUAL C+串口通信1.摘要单片机的应用正在不断地走向深入,同时带动传统控制检测日新月益更新。在实时检测和自动控制的单片机应用系统中,单片机往往是作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构,以及针对具体应用对象特点的软件结合,加以完善。DS18B20是美国DALLAS公司生产的数字温度传感器芯片,具有结构简单、体积小、功耗小、抗干扰能力强、使用方便等优点。本文设计的一种温度控制系统,用STC89C51单片机作为温控器,选用DS18B20数字温度传感器,可任意设置上下限报警温度,采用数码管实时显示温度,通过串口利用单片机与上位机的通信,对环境温度采集并进行控制。关键词:STC89C51单片机、串口通信、上下限报警、数码管显示温度、2. 引论随着时代的进步和发展,单片机技术已经普及到我们生活、工作、科研、各个领域,已经成为一种比较成熟的技术。温度是工业生产中主要的被控参数之一,与之相关的跟中温度控制是工业生产过程中经常遇到的过过程控制,有些工艺过程对其温度的控制效果直接影响着产品的质量。用单片机做成的产品外围元件很少,能实现的功能却很广,广泛应用于工业,农业等。兼于此,特用单片机设计此电路。温度控制在实际生产中有着广泛的应用。例如:在冶金工业、化工生产、电力工程、造纸行业、机械制造和食品加工等诸多领域中,人们都需要对各类加热炉、热处理炉、反应炉和锅炉中的温度进行检测和控制。因而设计一种较为理想的温度控制系统是非常有价值的。在国内外温度控制成了一科广泛应用于很多领域的技术。具体如空调、冰箱、茶叶烘烤、粮仓温度控制、等等。粮食温度检测是储备库中防止粮食霉烂、保质存放的重要环节。对于一个农业大国来讲,粮食生产、需求与储备量都很大。大量粮食在储备的过程中常因粮食湿度过大而升温发热,导致粮食大量腐烂变质,给郭建带来巨大损失。本论文正是以此为出发点,对单片机控制的远程温度控制作了较详尽的介绍。单片机的应用正在不断地走向深入,同时带动传统控制检测日新月益更新。在实时检测和自动控制的单片机应用系统中,单片机往往是作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构,以及针对具体应用对象特点的软件结合,加以完善。DS18B20是美国DALLAS公司生产的数字温度传感器芯片,具有结构简单、体积小、功耗小、抗干扰能力强、使用方便等优点。本文设计的一种温度控制系统,用STC89C52单片机作为温控器,选用DS18B20数字温度传感器,可任意设置上下限报警温度,采用数码管实时显示温度,通过串口利用单片机与上位机的通信,对温度进行采集、数据处理和控制。3、目录1、摘要2、引论3、目录4、正文 4.1、设计目的 4.2、具体内容及要求 4.3、系统总体方案设计 4.3.1、设计方案论证 4.3.2、系统总体构成图 4.3.3、硬件设计 4.3.4、软件设计 4.4、系统各个模块设计 4.4.1、单片机最小系统 4.4.2、显示部分 4.4.3、报警电路 4.4.4、测温电路 4.4.5、单片机与上位机串 4.5、系统软件设计 4.5.1、单片机软件设计口电路 4.5.2、上位机软件设计5、结论 6、总结心得7、 参考文献附录 4、正文 4.1. 设计目的 (1)了解电子系统的设计方法,巩固和提高学过的基础理论和专业知识; (2)学习DS18B20数字温度传感器的测温原理,提高运用所学专业知识进行独立思考和综合分析、解决实际问题的能力; (3) 掌握串口通信协议及其编程方法,掌握正确的思维方法和利用软件和硬件解决实际问题的基本技能; (4)增强对单片机的认识,掌握分析处理问题的方法,进行调试、计算等基本技能的训练,达到具有一定程度的实际工作能力。(5) 学会用PROTEL99SE进行电路原理图和PCB图的绘制。 (6) 学习用PSPICE、 MULTISIM 10.0等仿真软件进行电路设计和仿真。 (7)通过参与实际工作,能够了解单片机行业的具体工作。 4.2. 具体内容及要求1. 内容及要求:研究基于单片机的远程温度监控系统,可以在PC机端实时监控系统温度,并根据当前的温度值对单片机系统进行控制。利用VC编制PC示例程序。2. 主要技术指标:(1)、温度测量范围20-35;(2)、可以设置温度报警的上、下限;(3)、提供PC机通讯接口;(4)、PC机软件实现对温度数据分析、统计和处理; 4.3、系统总体方案设计4.3.1设计方案论证方案一由于本设计是测温电路,可以使用热敏电阻之类的器件利用其感温效应,在将随被测温度变化的电压或电流采集过来,进行A/D转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来,这种设计需要用到A/D转换电路,其中还涉及到电阻与温度的对应值的计算,感温电路比较麻烦。而且在对采集的信号进行放大时容易受温度的影响出现较大的偏差。方案二 进而考虑到用温度传感器,在单片机电路设计中,大多都是使用传感器,所以这是非常容易想到的,所以可以采用一只温度传感器DS18B20,此传感器,可以很容易直接读取被测温度值,进行转换,电路简单,精度高,软硬件都以实现,而且使用单片机的接口便于系统的再扩展,满足设计要求。从以上两种方案,很容易看出,采用方案二,电路比较简单,费用较低,可靠性高,软件设计也比较简单,故采用了方案二。4.3.2、系统总体构成图如下:4.3.3、硬件设计:现在PC机提供的COM口是采用RS-232接口标准的。而RS-232是用正负电压来表示逻辑状态,与TTL以高低电平来表示逻辑状态的规定不同。因此,为了能够同计算机借口或终端的TTL器件(如单片机)连接,必须在RS-232与TTL电路之间进行电平和逻辑关系的变换,变换电路选用芯片MAX232.该器件包含2个驱动器、2个接收器和一个电压发生器电路提供TIA/EIA-232-F电平转换成5V TTL/CMOS电平。每一个发送器将TTL/CMOS电平转换成TIA/EIA-232-F电平。4.3.4、软件设计单片机软件设计单片机程序由主程序和中断子程序组成的。主程序负责对来自上位机的命令进行解析并执行读温度值、存储温度值、输出控制等等,中断服务程序只负责单片机和上位机之间的数据发送与接收。上位机程序设计由单片机采集的实时温度,经过处理后通过MAX232传输到上位机PC,利用在VISUAL C+ 6.0的通信控件MSCOMM 属性设置和事件响应的基础上,实现与单片机串行通信,在上位机中,完成报警温度设置、实时温度数据显示、曲线绘制,实时报警等功能。4.4、系统各个模块设计:4.4.1单片机最小系统1、STC89C51单片机管脚图如下:2、各引脚功能:(1) XTAL1(19脚);XTAL2(18脚)-外接时钟引脚。XTAL1为片内振荡电路的输入电源和时钟引脚.VCC(40脚)GND(20脚)常压为+5V,低压为+3.3V。(2) 端。 XTAL2为片内振荡电路的输出端,80C51的时钟有两种方式,一种是片内振荡方式,需要在这两个引脚接石英晶体和振荡电容, 振荡电容的值一般选择为10P30P。另一种外部时钟方式即XTAL1接地,外部时钟信号从XTAL2脚输入。(3) RST(9脚)-单片机的复位引脚。P0口(39脚32脚)双向8位I/O口,每个口可以独立控制。51单片机PO口内部没有上拉电阻,为高阻状态,所以不能正常的输出高低电平,因此该组I/O口在使用的时候务必要接上拉电阻,一般我们采用接入10K的上拉电阻。P1口(1脚8脚)-准双向8位I/O口。每个口可以独立操作控制,内带上拉电阻,这种接口输出没有高阻状态,输入也不能锁存,固然不是真正的双向I/O口,之所以称它为” 准双向”是因为该口在作为输入使用前要先向该口进行写一操作,然后单片机内部才可以正确读出外部信号,也就是要使其先要有个准备过程,所以才称准双向口。对52单片机的P1.0引脚的第二功能为T2定时器的外部输入,P1.1引脚的第二功能为T2EX捕捉,重装触发,即T2的外部控制器。P2口(21脚28脚)-准双向8位I/O口,每个口都可以独立操作控制,内带上拉电阻,与P1口相似。P3口(10脚17脚)-准双向8位I/O口,每个口可以独立操作控制,内带上拉电阻,作为第一功能使用时就当作普通I/O口,与P1口相似。作为第二功能使用时,各引脚的定义如表:值得强调的是,P3口的每一个引脚均可以独立定义为第一功能的输入/输出或第二功能P3口引脚第二功能定义标号引脚第二功能说明P3.010RXD串行输入口P3.111TXD串行输出口P3.212/INTO外部中断0P3.313/INT1外部中断1P3.414T0定时器/计数器0外部输入口P3.515T1定时器/计数器1外部输入口P3.616/WE外部数据存储器写脉冲P3.717/RD外部数据存储器读脉冲3、单片机最小系统其中:A、复位电路单片机上电时,当振荡器正在运行时,只要持续给出RST引脚连个机器周期的高电平,便可完成系统复位。外部复位电路是为内部复位电路提供两个机器周期以上的电平而设计的。系统采用上电自动复位,上电瞬间电容器上的电压不能突变,RST上的电压是VCC上的电压与电容器上的电压之差,因而RST上的电压与VCC上的电压相同。随着充电的进行,电容器上的电压不断上升,RST上的 电压就随着下降,RST脚上只要保持10MS以上高电平,系统就会有效复位。电容C可取1033UF,电阻R可取1.210K。在本系统设计中,C取10UF,R取10K。B、振荡电路XTAL1脚和XTAL2脚分别构成片内振荡器的反相放大器的输入和输出端,外接石英晶振或陶瓷晶振以及补偿电容C1、C2选47UF构成并联谐振电路。当外接石英晶振时,电容C1、C2选30PF±10PF;当外接陶瓷振荡器时,电容C1、C2选47UF±10UF。系统中,外接电C1、C2的大小会影响振荡器频率的稳定度、起振时间及温度稳定性。在设计电路板时,晶振和电容应靠近单片机芯片,以便减少寄生电容,保证振荡器稳定可靠工作。在本硬件系统设计中,为保证串行通行波特率的误差,选择了11.0592MHZ的标准石英晶振,电容C1、C2为30PF。C、接高电平,选用片内程序存储器。4.4.2、显示部分:本系统采用三极管驱动四位一体共阳数码管显示温度,数码管有两种显示方式,即静态显示和动态显示。静态显示的特点是每个数码管的段选必须接一个8位数据线来保持显示的字形码。当送入一次字形码后,显示字形可一直保持,直到送入新字形码为止。这种方法的优点是占用CPU时间少,显示便于监测和控制。缺点是硬件电路比较复杂,成本较高;动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。选亮数码管采用动态扫描显示。所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。动态显示的亮度比静态显示要差一些,所以在选择限流电阻时应略小于静态显示电路中的。本设计数码管采用动态显示。如下图:4.4.3、报警电路本设计中采用三极管驱动蜂鸣器报警,其中,分别模拟制热器和制冷器。当温度高于上限温度时,蜂鸣器报警,灯亮,模拟启动制冷器;当温度低于下限温度时,蜂鸣器报警,灯亮,模拟启动制热器。当按复位键时,数据清除。其中,与蜂鸣器相连的轻触开关断开时,蜂鸣器停止报警,实现手动解除报警。如图:.4、测温电路本设计采用温度传感器测量温度。DS18B20简介其两种封装如图:温度传感器的种类众多,在应用与高精度、高可靠性的场合时DALLAS(达拉斯)公司生产的DS18B20温度传感器当仁不让。超小的体积,超低的硬件开消,抗干扰能力强,精度高,附加功能强,使得DS18B20更受欢迎。对于我们普通的电子爱好者来说,DS18B20的优势更是我们学习单片机技术和开发温度相关的小产品的不二选择。了解其工作原理和应用可以拓宽我们对单片机开发的思路。DS18B20的主要特征:1. 全数字温度转换及输出。2. 先进的单总线数据通信。3. 最高12位分辨率,精度可达土0.5摄氏度。4. 12位分辨率时的最大工作周期为750毫秒。5. 可选择寄生工作方式。6. 检测温度范围为55°C +125°C (67°F +257°F)7. 内置EEPROM,限温报警功能。8. 64位光刻ROM,内置产品序列号,方便多机挂接。9. 多样封装形式,适应不同硬件系统。DS18B20芯片封装结构:DS18B20引脚功能:·GND 电压地 ·DQ 单数据总线 ·VDD 电源电压 ·NC 空引脚DS18B20工作原理及应用:DS18B20的温度检测与数字数据输出全集成于一个芯片之上,从而抗干扰力更强。其一个工作周期可分为两个部分,即温度检测和数据处理。在讲解其工作流程之前我们有必要了解18B20的内部存储器资源。18B20共有三种形态的存储器资源,它们分别是:ROM 只读存储器,用于存放DS18B20ID编码,其前8位是单线系列编码(DS18B20的编码是19H),后面48位是芯片唯一的序列号,最后8位是以上56的位的CRC码(冗余校验)。数据在出产时设置不由用户更改。DS18B20共64位ROM。RAM 数据暂存器,用于内部计算和数据存取,数据在掉电后丢失,DS18B20共9个字节RAM,每个字节为8位。第1、2个字节是温度转换后的数据值信息,第3、4个字节是用户EEPROM(常用于温度报警值储存)的镜像。在上电复位时其值将被刷新。第5个字节则是用户第3个EEPROM的镜像。第6、7、8个字节为计数寄存器,是为了让用户得到更高的温度分辨率而设计的,同样也是内部温度转换、计算的暂存单元。第9个字节为前8个字节的CRC码。EEPROM 非易失性记忆体,用于存放长期需要保存的数据,上下限温度报警值和校验数据,DS18B20共3位EEPROM,并在RAM都存在镜像,以方便用户操作。电路图如下:.5、单片机与上位机串口电路在现代业控制中,串口通信的应用越来越广泛。单片机和PC机之间的串口通信在进行数据交换时经常被使用。在串行通信时,要求通信双方都采用一个标准接口,RS232C接口是单片机利PC机进行通信最常用的一种接口。单片机与PC机进行串口通信最简单的二线制法,即接收数据针脚(RXD)与发送数据针脚(TXD)相连,彼此交叉,信号地(GND)对应相接。但是,串口还不能直接和单片机相连,可以选用MAX232和MAX485进行电平转换。MAX232用于RS232C标准;MAX485用于RS485标准。RS232C标准规定在码元畸变小于4的情况下,传输电缆长度最大约为L5米,最高传输速率为20KBITS。RS485标准最人传输距离约为1219米,最大传输速率约为L0MBITS。MAX232芯片简介MAX232芯片是美信公司专门为电脑的RS-232标准串口设计的单电源电平转换芯片,使用+5V单电源供电。 引脚介绍:第一部分是电荷泵电路。由1、2、3、4、5、6脚和4只电容构成。功能是产生+12V和-12V两个电源,提供给RS-232串口电平的需要。 第二部分是数据转换通道。由7、8、9、10、11、12、13、14脚构成两个数据通道。 其中13脚(R1IN)、12脚(R1OUT)、11脚(T1IN)、14脚(T1OUT)为第一数据通道。 8脚(R2IN)、9脚(R2OUT)、10脚(T2IN)、7脚(T2OUT)为第二数据通道。 TTL/CMOS数据从T1IN、T2IN输入转换成RS-232数据从T1OUT、T2OUT送到电脑DB9插头;DB9插头的RS-232数据从R1IN、R2IN输入转换成TTL/CMOS数据后从R1OUT、R2OUT输出。 第三部分是供电。15脚GND、16脚VCC(+5V)。由于串口用的是TTL电平,和RS232电平不同,因此,单片机和PC通信时需要进行电平转换,常用的IC是MAX232,连接图如下图所示,其中MAX232供电脚为5V。采用了三线制连接串口,也就是说和计算机的9针串口只连接其中的3根线:第5脚的GND、第2脚的RXD、第3脚的TXD。这是最简单的连接方法,但是对我们来说已经足够使用了。RS232引脚图串口电路连接图如下:收、发端的数据信号是相对于信号地,如从DTE设备发出的数据在使用DB25连接器时是2脚相对7脚(信号地)的电平,DB25各引脚定义参见图2-9。典型的RS-232信号在正负电平之间摆动,在发送数据时,发送端驱动器输出正电平在+5+15V,负电平在-5-15V电平。当无数据传输时,线上为TTL,从开始传送数据到结束,线上电平从TTL电平到RS-232电平再返回TTL电平。接收器典型的工作电平在+3+12V与-3-12V。由于发送电平与接收电平的差仅为2V至3V左右,所以其共模抑制能力差,再加上双绞线上的分布电容,其传送距离最大为约15米,最高速率为20KB/S。RS-232是为点对点(即只用一对收、发设备)通讯而设计的,其驱动器负载为37KÙ。所以RS-232适合本地设备之间的通信。上位机和下位机的接线方法如图上位机和下位机的接线方法MCS-51内部含有一个可编程全双工串行通信接口,具有UART的全部功能。该接口电路不仅能同时进行数据的发送和接收,也可作为一个同步移位寄存器使用。 在进行异步通信时,数据的发送和接收分别在各自的时钟(TCLK和RCLK)控制下进行的,但都必须与字符位数的波特率保持一致。MCS-51串行口的发送和接收时钟可由两种方式产生,一种是由主机频率FOSC经分频后产生,另一种方式是由内部定时器T1或T2的溢出率经16分频后提供。发送和接收的过程如下:串行口的发送过程由指令MOV SBUF,A启动,即CPU由一条写发送缓冲器的指令把数据(字符)写入串行口的发送缓冲器SBUF(发)中,再由硬件电路自动在字符的始、末加上起始位(低电平)、停止位(高电平)及其它控制位(如奇偶位等),然后在移位脉冲SHIFT的控制下,低位在前,高位在后,从TXD端(方式0除外)一位位地向外发送。串行口的接收与否受制于允许接收位REN的状态,当REN被软件置“1”后,允许接收器接收。接收端RXD一位位地接收数据,直到收到一个完整的字符数据后,控制电路进行最后一次移位,自动去掉启始位,使接收中断标志RI置“1”,并向CPU申请中断。CPU响应中断,用一条指令(MOV A,SBUF)把接收缓冲器SBUF(收)的内容读入累加器。TI和RI是由硬件置位的,但需要用软件复位。.、系统软件设计.、单片机软件设计:(1)主程序:主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量的当前温度值,温度测量每1S进行一次。这样可以在一秒之内测量一次被测温度,其程序流程如下所示: 主程序流程图(2)读温度子程序:先让DS18B20复位,然后发跳过ROM匹配命令,再发出温度转换命令,让DS18B20进行温度转换,延时等待转换完毕后,再将已转换的温度值一一地从各个DS18B20取出,转换成ASCALL码后再发送到PC机上,如此循环。程序框图如下:读温度程序框图(3)温度比较报警子程序此程序是将实际温度与设置的报警上下限比较,决定是否发出报警信号。由于T为实际温度的绝对值,TH、TL也是温度的绝对值,因此判断大小关系时要通过其正负符号来确定。温度比较报警子程序4.5.2.上位机软件设计PC机程序中包括串口通信模块,绘图模块,命令按钮模块,温度显示模块等。一、串口通信模块在本设计中,采用MSCOMM控件进行串口的通讯,MSCOMM控件串口具有完善的串口数据的发送和接收功能。通过此控件,PC机可以利用串行口与其它设备实现轻松连接,简单高效地实现设备之间的通讯。此控件的事件响应有两种处理方式,事件驱动方式:由MSCOMM控件的ONCOMM事件捕获并处理通讯错误及事件;查询方式:通过检查COMMEVENT属性的值来判断事件和错误。 二、绘图模块在VC中,绘图可以利用LINE和CIRCLE方法绘制几何图形11,还可以利用BOTTON控件绘制各种图表。而本设计就采用BOTTON控件进形绘制温度变化曲线图。BOTTON控件在绘制直方图(条形图)、折线图、饼图、标记图、填充区域图等各种常用的数据分析图形方面有很大的优势,我们只要将需按图形表示的数据装入数组中,然后将数组数据赋值给BOTTON控件,再进行一些简单的图形标题、背景、图例、注脚方面的定义,就可以得到所期望的数据分析图形。由于BOTTON控件不是VC内建的基本控件,因此在使用前必须用工程菜单中的“部件”,添加BOTTON控件。添加BOTTON控件的选项是“MICROSOFT CHART CONTROL 6.0(OLEDB)”。三、命令按钮11模块大多数应用程序中都有命令按钮COMMANDBUTTON控件,用户可以单击按钮执行某项操作。在本设计统中要让下位机执行相应操作,就是通过命令按钮给下位机下发命令实现该功能。命令按钮是VB应用程序中经常使用的对象,程序运行中要执行一条或一组命令,通常通过用鼠标单击命令按钮来实现,当然具体产生何种动作要通过执行相应的事件过程中的程序代码来决定。四、温度显示模块在本设计中显示由文本框和标签控件完成。完成后的VC界面如下:5.结论 本温控系统通过STC89C51单片机采集从DS18B20温度传感器所测得的温度数据,并通过串口实时传送到上位机。单片机系统完成对温度信号的采集、设定上下限报警等功能,并通过串口通信与PC机进行通信,在PC机上进行显示及一些操作,从而使系统更加直观,使用更加方便。本设计主要解决了以下几个问题:1.系统的硬件采用以单片机为核心的硬件电路,所用元器件也很少,体积小,重量轻,抗干扰能力强,对环境要求不高,价格低廉。2.实现单片机与PC机的通信功能,实现远距离的进行监控.当然本设讲也存在着一些不足:(1)电路设计技术还不够成熟(2)本设计通信采用RS232,如果采用RS485通信距离将会大大增加这个系统本身或通过扩展可应用于智能家居、工业控制、智能农业、环境监测等各个领域的温度采集以及数据分析控制。相信,随着单片机与PC应用的不断推广和不断成熟,基于单片机与PC机的温度控制系统将会得到广泛的应用。 (3)本设计在绘图的时候,定位范围不是很好,图线会伸出绘图区间。6、总结心得7、 参考文献 单片机应用系统设计技术基于C51的PROTEUS仿真(第2版) 张齐 电子工业出版社 C+程序设计(第四版) 谭浩强 清华大学出版社 C/C+串口通信典型应用实例编程实践 曹卫斌 电子工业出版社 VISUAL C+数据采集与串口通信测控应用实战 田敏 人民邮电出版社 C语言常见问题集 STEVE SUMMIT(原著) 翻译:朱群英 孙云 单片机C语言程序设计实训100例基于80C51+PROTEUS仿真 彭伟 北京航空航天大学出版社附录1、 总体电路图:电脑端程序:DIM N AS INTEGERDIM T AS INTEGER 定义全局变量PRIVATE SUB COMMAND2_CLICK() 单击按钮执行数据采集或停止采集 IF COMMAND2.CAPTION = "采集数据" THEN COMMAND2.CAPTION = "停止采集" TIMER1.ENABLED = TRUE MSCOMM1.OUTPUT = "A" ELSE COMMAND2.CAPTION = "采集数据" TIMER1.ENABLED = FALSE MSCOMM1.OUTPUT = "B" MSCOMM1.OUTPUT = "B" END IFEND SUBPRIVATE SUB COMMAND4_CLICK() 单击按钮清空数据TEXT1.TEXT = ""TEXT4.TEXT = ""END SUBPRIVATE SUB COMMAND5_CLICK() 单击按钮开关通信端口 IF COMMAND5.CAPTION = "开启通信" THEN COMMAND5.CAPTION = "关闭通信" COM.ENABLED = FALSE COMMAND2.ENABLED = TRUE COMMAND1.ENABLED = TRUE TEXT2.ENABLED = TRUE SELECT CASE COM.LISTINDEX '指定端口号(COM) CASE 0 MSCOMM1.COMMPORT = 1 CASE 1 MSCOMM1.COMMPORT = 2 CASE 2 MSCOMM1.COMMPORT = 3 CASE 3 MSCOMM1.COMMPORT = 4 END SELECT MSCOMM1.SETTINGS = "9600,N,8,1" '9600波特,无校验,8位数据位,1位停止位 MSCOMM1.INPUTMODE = COMINPUTMODETEXT '接收文本数据 MSCOMM1.INPUTLEN = 0 '读出接收缓冲区的所有内容 MSCOMM1.INBUFFERSIZE = 1024 MSCOMM1.OUTBUFFERSIZE = 1024 MSCOMM1.RTHRESHOLD = 1 '每接收到1个字符,发生1次事件 MSCOMM1.PORTOPEN = TRUE '打开串口 ELSE TIMER1.ENABLED = FALSE MSCOMM1.OUTPUT = "B" MSCOMM1.OUTPUT = "B" COMMAND5.CAPTION = "开启通信" COM.ENABLED = TRUE MSCOMM1.PORTOPEN = FALSE COMMAND2.CAPTION = "采集数据" COMMAND2.ENABLED = FALSE COMMAND1.ENABLED = FALSE TEXT2.ENABLED = FALSE END IFEND SUBPRIVATE SUB COMMAND7_CLICK() 单击按钮保存温度数据COMMONDIALOG1.ACTION = 2OPEN COMMONDIALOG1.FILENAME FOR APPEND AS #1 WRITE #1, NOW WRITE #1, TEXT4.TEXTCLOSE #1END SUBPRIVATE SUB FORM_LOAD() COM.ADDITEM "COM1" COM.ADDITEM "COM2" COM.ADDITEM "COM3" COM.ADDITEM "COM4"END SUBPRIVATE SUB MSCOMM1_ONCOMM() 串口接收到数据时读出数据 SELECT CASE MSCOMM1.COMMEVENT CASE COMEVRECEIVE TEXT1.TEXT = TEXT1.TEXT & MSCOMM1.INPUT CASE ELSE END SELECTEND SUBPRIVATE SUB TEXT1_CHANGE() 对读出的数据进行处理IF (LEN(TEXT1.TEXT) MOD 4 = 0) AND (LEN(TEXT1.TEXT) > 0) THENTEXT3.TEXT = RIGHT$(TEXT1.TEXT, 4) & ""TEXT4.TEXT = TIME & CHR$(6) & CHR$(6) & CHR$(6) & TEXT3.TEXT & " " & TEXT4.TEXTTEXT7.TEXT = TIME$N = N + 1END IFIF N = 100 THEN N = 0 TEXT1.TEXT = ""END IFEND SUBPRIVATE SUB TEXT5_CHANGE() 改变读数据的时间TIMER1.INTERVAL = VAL(TEXT5.TEXT) * 1000END SUBPRIVATE SUB TIMER1_TIMER() 采集数据后进行绘图MSCOMM1.OUTPUT = "A"DIM A AS SINGLEDIM A1 AS STRINGDIM A2 AS STRINGDIM A3 AS STRINGDIM K AS INTEGERSTATIC B(200) AS INTEGERTEXT7.TEXT = TIME FOR K = 1 TO 199 B(K) = B(K + 1) NEXT K B(200) = VAL(TEXT3.TEXT)WITH MSCHART1FOR I = 1 TO 200A = VAL(MID(TEXT7.TEXT, 1, 2) * 3600 + VAL(MID(TEXT7.TEXT, 4, 2) * 60 + VAL(MID(TEXT7.TEXT, 7, 2) - 200 * VAL(TEXT5.TEXT) + I * VAL(TEXT5.TEXT) + 1IF A < 0 THENA = A + 86400ELSEIF A > 86400 THENA = A - 86400END IFIF A 3600 < 10 THENA1 = "0" & (A 3600)ELSEA1 = STR(A 3600)END IFIF (A MOD 3600) 60 < 10 THENA2 = "0" & (A MOD 3600) 60)ELSEA2 = (A MOD 3600) 60END IFIF (A MOD 3600) MOD 60) < 10 THENA3 = "0" & (A MOD 3600) MOD 60)ELSEA3 = (A MOD 3600) MOD 60)END IF.ROW = I.DATA = B(I).ROWLABEL = A1 & ":" & A2 & ":" & A3NEXT IEND WITHEND SUBPRIVATE SUB TIMER2_TIMER() 设置温度时间隔开发送数据的时间,以使IF T = 0 THEN 单片机能正常处理 MSCOMM1.OUTPUT = MID(TEXT8.TEXT, 1, 1) T = T + 1 ELSEIF T = 1 THEN MSCOMM1.OUTPUT = MID(TEXT8.TEXT, 2, 1) T = T + 1 ELSEIF T = 2 THEN MSCOMM1.OUTPUT = MID(TEXT8.TEXT, 3, 1) T = T + 1 ELSEIF T = 3 THEN MSCOMM1.OUTPUT = MID(TEXT8.TEXT, 4, 1) T = T + 1 ELSEIF T = 4 THEN MSCOMM1.OUTPUT = MID(TEXT8.TEXT, 5, 1) T = 0 TIMER2.ENABLED = FALSEEND IFEND SUB