毕业设计基于gp32温度测试系统的设计_第1页
毕业设计基于gp32温度测试系统的设计_第2页
毕业设计基于gp32温度测试系统的设计_第3页
毕业设计基于gp32温度测试系统的设计_第4页
毕业设计基于gp32温度测试系统的设计_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PAGEPAGE3目录TOC\o"1-3"\h\z第一章前言21.1MCU与嵌入式系统 21.2传感器简介 31.3热敏电阻温度传感器 4第二章硬件测试52.1单片机系统 52.2单片机的选择 52.2.1MC68HC908GP32单片机的特点 52.2.2MC68HC908GP32内部结构 62.2.3GP32MCU的引脚功能 82.3测温系统的原理框图 92.3.1温度传感器电路 102.3.2信号放大电路 102.3.3A/D转换模块 112.3.4温度显示系统 11第三章软件设计123.1MCU方程序 123.1.1Main函数 123.1.2A/D转换模块的基本编程方法 133.1.3串行口初始化子程序 173.1.4串口通行模块 183.1.5WllDef.c程序 223.2PC机方(VB编程) 22第四章测试与总结274.1测试 274.1.1连接硬件电路 274.1.208C语言程序调试 274.2总结 284.3参考文献 30基于GP32温度测试系统的设计第一章前言1.1MCU与嵌入式系统MCU的基本含义:在一块芯片上集成了中央处理器单元(CPU)、存储器(RAM/ROM)、定时器/计数器及多种输入/输出(I/O)接口的比较完整的数字处理系统。MCU从体系结构到指令系统都是按照嵌入式系统的应用特点专门设计,能很好地满足应用系统的嵌入,面向测控对象和现场可靠运行等方面的要求。因此由MCU构成的系统是发展最快、品种最多、数量最大、应用最广的嵌入式系统。由于MCU有嵌入式应用的专用体系结构与指令系统,而且具有体积小、可靠性高等特点,同时具有各种各样的型号,可以满足不同的需求,实际应用时,开发者可根据具体要求选用最佳型号的MCU嵌入到所需的应用系统中[2]。一个以MCU为核心,比较复杂的嵌入式产品或实际嵌入式应用系统,包含模拟量的输入、模拟量的输出,开关量的输入、开关量的输出以及数据通信部分。如图1为一个典型的嵌入式应用系统框图。MCU工作支撑电路保障MCU能够正常运行,如电源提供、晶振电路及必要的滤波电路等。实际模拟信号一般来自相应的传感器。但是,一般传感器将实际模拟信号转成的电信号都比较弱,MCU无法直接获得该信号,需要将起放大,然后经过模/数(A/D)转换变为数字信号,进行处理。目前许多MCU内部包含A/D转换模块,实际应用时也可根据需要外接A/D转换芯片。常见的模拟量有:温度、湿度、压力、质量、气体浓度、液体浓度、流量等。对MCU来说,模拟信号通过A/D转换变成相应的数字序列进行处理。实际开关信号一般也来自相应的开关类传感器。如光电、电磁开关、干簧管、声控、红外开关等,在一些儿童电子玩具就有一些类似的开关。手动开关也可以作为开关信号送到MCU中。对MCU来说,开关信号就是只有“0”和“1”两种可能值的数字信号。其他输入信号通过通信方式与MCU沟通。常用的通信方式有:异步串行(SCI)通信方式、串行外设接口(SPI)通信方式、并行通信方式、USB通信方式、网络通信方式等。在执行机构中,有开关量执行机构,也有模拟量执行机构。开关量执行机构只有“开”、“关”两种状态。模拟量执行机构需要连续变换的模拟量控制。MCU一般不能直接控制这些执行机构,需要通过相应的驱动电路实现。还有一些执行机构,即不是通常的开关量控制,也不是通常的D/A转换量控制,而是“脉冲”量控制,如控制空调电动机,MCU则通过软件对其控制。MCUMCU放大器:将微弱电信号放大成MCU可接受的电信号传感器:将实际物理信号转换为微弱电信号模拟量驱动机构:将MCU送出的信号放大模拟量执行机构将实际开关信号转换成MCU可接受的电信号MCU与嵌入式系统开关量驱动机构:将MCU送出的信号放大开关量执行机构其他输入信号其他输出信号MCU工作支撑电路其他通信设备通信信号匹配电路A/D转换接口D/A转换接口I/O接口通信接口实际模拟信号实际开关信号图1一个典型的嵌入式应用系统框图1.2传感器简介传感器是一种把物理量或化学量转变成便于利用的电信号的器件,其实质是一种功能块,其作用是将来自外界的各种信号转变为电信号。它是实现测试与自动控制系统的首要环节。如电子计价秤中所安装的称重传感器,它是电子计价秤的重要部件,它担负着将重量转换成电信号的任务,它所输出的电信号被放大器放大并经A/D转换后由相关电路显示出称重信息。如果没有传感器对原始参数进行精确可靠的测量,哪么无论是信号转换或信息处理,或者最佳数据的显示和控制都将无法实现。在现代电子信息系统中,信息采集传感器技术、信息传感痛惜技术、信息处理微处理器技术是现在电子信息技术的3大核心技术。传感器的种类可分为力、热、湿、气,磁、光、电等。室温传感器用于测量室内和室外的环境温度,管温传感器用于测量蒸发器和冷凝器的管壁温度。室温传感器和管温传感器的形状不同,但温度特性基本一致。按温度特性划分,目前美的使用的室温管温传感器有二种类型:1、常数B值为4100K±3%,基准电阻为25℃对应电阻10KΩ±3%。温度越高,阻值越小;温度越低,阻值越大。离25℃越远,对应电阻公差范围越大;在0℃和55℃对应电阻公差约为±7%;而1.3热敏电阻温度传感器温度传感器利用一些金属、半导体等材料与温度有关的特性而制成的,这些特性包括热膨胀、电阻、电容、磁性、热电势、热噪声、弹性及光学特征。根据制造材料将其分为热敏电阻传感器、半导体热电偶传感器、PN结温度传感器和集成温度传感器等类型。热敏电阻传感器,其最基本电气特性是随着温度的变化自身阻值也随之变化。热电阻材料热电阻测温是基于金属导体的电阻值随温度的增加而增加这一特性。第二章硬件测试2.1单片机系统单片机选用的是Freescale公司的MC908GP32,主要完成对A/D转换电路的控制、对转换后的数字量的处理以及对显示模块的控制,并且为ADC0809提供工作时钟2.2单片机的选择嵌入式系统的核心就是各种不同类型的MCU,选择MCU时要考虑的因素有处理性能、功耗、价格、封装形式、软硬件开发工具、设计者的熟悉程度等。对于许多嵌入式系统设计来说,目标不在于挑选速度最快并且功能最强的MCU(这样的MCU往往价格较高),而是选择对于完成功能最合适的MCU。应遵循的原则有:MCU的总I/O口个数应略多于系统功能所需的个数,以备功能扩展和调试时使用;对于使用到的外设功能模块应尽可能集成在MCU的内部,以简化硬件系统,减少系统工作功耗,提高系统的可靠性;尽量选择设计者较为熟悉和开发工具完备的芯片型号,这样可以减少开发周期,提高开发效率。基于上述选型原则,本设计采用了MC68HC908GP32(42引脚)单片机,它稳定性高、开发周期短、成本低、兼容性好;按各种型号带有不同大小的片内闪速(FLASH)存储器,具有非常高的性价比;增加了增强型的串行通讯接口SCI和串行外围接口SPI。2.2.1MC68HC908GP32单片机的特点MC68HC908GP32单片机的主要特点概述如下:1)512B片内RAM;32K片内Flash程序存储器,具有在线编程能力和保密功能。2)时钟发生器模块,具有32KHz晶振PLL电路,可产生各种工作频率;8MHz内部总线频率。3)增强的HC05CPU结构;16种寻址方式(比HC05多8种);16位变址寄存器和堆栈指针;存储器至存储器数据传送;快速8×8乘法指令;快速16/8除法指令;扩展的循环控制功能;BCD功能.4)33根通用I/O脚,包括26根多功能I/O脚和5或7根专用I/O脚;PTA、PTC和PTD的输入口有可选择的上拉电阻;PTC0—PTC4有15mA吸流和放流能力,其他口有10mA吸流和放流能力(总体驱动电流应小于150mA);所有口有最高5mA输入电流保护功能。5)增强型串行通讯口SCI;串行外围接口SPI;两个16位双通道定时器接口模块(TIM1和TIM2),每个通道可选择为输入捕捉、输出比较和PWM,其时钟可分别选为内部时钟的1、2、4、8、6、32和64的分频值;带时钟预分频的定时基模块有8种周期性实时中断(1、4、16、256、512、1024、2048和4096Hz),可在STOP方式时使用外部32KHz晶振周期性唤醒CPU;8位键盘唤醒口。6)系统保护特性:计算机工作正常(COP)复位;低电压检测复位,可选为3V或5V操作;非法指令码检测复位;非法地址检测复位。7)具有PDIP40、SDIP42和QFP44封装形式。8)优化用于控制应用;优化支持C语言。2.2.2MC68HC908GP32内部结构MC68HC908GP32MCU(以下简称GP32MCU)的三种封装形式只有引脚数量和形式有所区别,其他方面是一致的。图4给出了GP32的内部结构框图。图4中I/O接口是按44引脚的GP32给出的,对于42引脚的GP32MCU则没有PTC5、PTC6两个引脚,对于40引脚的GP32MCU则没有PTC5、PTC6及PTD6/T2CH0、PTD7/T2H1四个引脚。从内部结构简图可以看出,GP32内部有以下主要部分:M68HC08CPU、存储器、定时接口模块、定时基模块、看门狗模块、并行I/O接口、串行通信接口SCI、串行外设接口SPI、断点模块、A/D转换模块、键盘中断模块、时钟发生模块及锁相环电路、低电压禁止模块、复位与中断模块、鉴控模块MON、系统设置模块。M68HC08CPUM68HC08CPUCPU寄存器算数逻辑单元64B控制和状态寄存器32KB片内Flash程序寄存器512B片内RAM307B监控ROM36B用户Flash矢量空间时钟发生模块32KHz振荡器锁相环PLL系统集成模块SIM矢量空间外中断模块IRQ8位A/D转换模块电源PORTADDRAPORTCDDRCPORTBDDRBPORTDDDRD监视模式入口模块加密模块PTA7/~KBD7……PTA0/~KBD0定时器模块TBM断点模块BRK低电压禁止模块LVI键盘中断控制模块KBI定时器接口模块TIM1定时器接口模块TIM2内存映像模块串行通信接口模块SCI串行外设接口模块SPI监控模块MON数据总线开关模块系统操作正常监视模块COP配置寄存器模块1配置寄存器模块1上电复位模块PTB7/AD7……PTB0/AD0PTC4……PTC0PTD7/T2CH1PTD6/T2CH0PTD5/T1CH1PTD4/TICH0PTD3/SPSCKPTD2/MISOPTD1/MOSIPTD0/~SSVDDVSSVDDAVSSAVDDAD/VREFHVSSAD/VREFLOSC1OSC2CGMXFC~RST~IRQ图4MC68HC908GP32结构框图2.2.3GP32MCU的引脚功能MC68HC908GP32的引脚图电源类引脚VDD、VSS(20引脚、19引脚):电源供给端。VDDAD/VREFH、VSSAD/VREFL(31引脚、32引脚):内部A/D转换模块的电源供给及参考电压输入端。VDDA、VSSA(1引脚、2引脚):时钟发生器模块(CGM)的电源供给端。控制类引脚(6引脚):外部低有效复位输入或输出引脚,有内部上拉电阻。(14引脚):外部中断输入引脚,有内部上拉电阻。I/O类引脚PTA7/KBD7-PTA0/KBD0(42-35引脚):8位通用双向I/O接口,每个可编程为键盘输入引脚。PTB7/AD7-PTBO/AD0(32-25引脚):8位通用双向I/O接口,也可作为8位A/D转换输入引脚。PTC4-PTC0(11-7引脚):5位通用双向I/O接口。PTD7/T2CH1-PTD0/SS(24-21引脚、18-15引脚):8种特殊功能、双向I/O接口,其中PTD4-PTD7用于定时器模块(TIM1和TIM2)。SPSCK、MOSI、MISO、SS用语串行外围接口(SPI)。PTE1/TxD、PTE0/RxD(12引脚、13引脚):2位双向I/O接口或串行通信。其他CGMXFC(3引脚):CGM的外部滤波电容连接引脚。OSC1、OSC2(5引脚、4引脚):芯片内振荡器引脚。2.3测温系统的原理框图温度传感器电路信号放大电路温度传感器电路信号放大电路A/D转换电路单片机系统温度显示系统图1测温系统的原理框图2.3.1温度传感器电路温度传感器采用的是NS公司生产的LM35,它具有很高的工作精度和较宽的线性工作范围,它的输出电压与摄氏温度线性成比例,且无需外部校准或微调,可以提供±1/4℃的常用的室温精度。LM35的输出电压与摄氏温度的线形关系可用下面公式表示,0℃时输出为0V,每升高1℃,输出电压增加10mV。其电源供应模式有单电源与正负双电源两种,其接法如图3与图4所示。正负双电源的供电模式可提供负温度的测量,单电源模式在25℃下电流约为50mA,非常省电。本系统采用的是单电源模式。2.3.2信号放大电路由于温度传感器LM35输出的电压范围为0~0.99V,虽然该电压范围在A/D转换器的输入允许电压范围内,但该电压信号较弱,如果不进行放大直接进行A/D转换则会导致转换成的数字量太小、精度低。系统中选用通用型放大器μA741对LM35输出的电压信号进行幅度放大,还可对其进行阻抗匹配、波形变换、噪声抑制等处理。系统采取同相输入,电压放大倍数为5倍,电路图如图5所示。2.3.3A/D转换A/D转换模块(AnalogToDigitalConvertModule),即模数转换,是将电压信号转换为对应的数字信号。进行A/D转换的基本问题:1)采样精度:数字量变化一个最小量时模拟信号的变化量,即采样位数。2)采样速率:完成一次A/D采样所要花费的时间。3)滤波:对采样的数据进行筛选去掉误差较大的毛刺。4)物理量回归:把A/D采样值与实际物理量对应起来。A/D转换数据寄存器ADR:ADR存放A/D转换的8位结果,每次A/D转换结束更新该寄存器。编程从该寄存器读取A/D转换结果。该寄存器地址为:$003D,为只读寄存器,复位时为$00。2.3.4温度显示系统该温度显示系统较为简单,由可编程并行输入输出芯片8255A的A,B,C端口外接3个8段LED显示器来实现。MC908GP32的P2.6为8255提供片选信号,74LS373的Q7,Q6接8255的A1,A0,可得到8255的A,B,C及控制口的地址为BF3FH,BF7FH,BFBFH,BFFFH。MC908GP32处理好的温度数据输出至8255,并由MC908GP32对8255编程控制其A,B,C端口输出高电平或低电平,以便从8段LED显示器显示实际温度。8段LED显示器选用共阳极,8255的A,B,C端口与8段LED显示器之间接限流电阻。第三章软件设计在MCU上的程序包括头文件定义、温度驱动子程序、系统初始化子程序、串口通信子程序等,通过专用编译器和写入工具写到MCU中。系统的软件部分用C语言编程,采用模块化结构,主要由A/D转换模块、单片机内部数据处理模块、温度显示模块等3部分构成,便于修改和维护。系统的所有程序文件,见下表:温度测量系统工程文件文件类型文件名功能简介头文件GP32C.hGP32MCU映像寄存名定义头文件EnDisInt.h开放或禁止MCU各模块中断头文件Type.h类型别名定义头文件Includes.h总头文件AD.h"A/D转换头文件SCI.h串行通信头文件C语言子函数文件Setup.c芯片初始化文件SCI.c串口通信文件AD.cA/D转换文件C语言主函数Main.c主函数文件3.1MCU方程序该模块是系统的核心模块3.1.1Main函数#include"Includes.h"//总头文件//主函数voidmain(void){DisableMCUInt();//禁止总中断MCUInit();//芯片初始化//在此处添加用户程序SCIinit();ADCinit();while(1){SCIsend1(ADCave(0,200));}}3.1.2A/D转换模块的基本编程方法根据测量系统要求不同以及单片机的忙闲程度,通常可采用3种软件编程方式:程序查询方式,延时方式和中断方式。本系统采用延时方式。延时程序实际上是无条件传送I/O方式,当向A/D转换器发出启动命令后,即进行软件延时,延时时间稍大于进行一次A/D转换所需要的时间,之后打开A/D转换器的输出缓冲器读数即为转换好的数字量。A/D转换时间为64个时钟周期,因为系统中ADC0809的工作时钟为500kHz,故A/D转换时间为128μs,延时时间可大致选择160μs。程序段如下:1)A/D转换初始化对ADCLK写入控制字节,决定时钟输入源是内部总线还是外部晶振,决定分频系数等。2)启动A/D转换对ADSCR写入控制字节,选取要转换的通道、决定转换结束数据获取的方式、设置是连续转换还是一次转换等。3)获A/D转换结果若是中断方式,在A/D中断程序中取得,若是查询方式,通过ADSCR的第7位(COCO位)取得,当COCO=1时可从ADR中取数。//[ADC.h]A/D转换头文件*#include"GP32C.h"//GP32MCU映像寄存器名定义#include"Type.h"//类型别名定义#defineCOCOBit7voidADCinit(void);//A/D转换初始化INT8UADCvalue(INT8Uchannel);//1路A/D转换函数INT8UADCmid(INT8Uchannel);//1路A/D转换函数(中值滤波)INT8UADCave(INT8Uchannel,INT8Un);//1路A/D转换函数(均值滤波)//[ADC.c]A/D转换*//硬件连接://PTB0/AD0接模拟量输入端//*#include"ADC.h"//ADCinit:A/D转换初始化*//功能:设置A/D转换时钟频率为1MHz//*voidADCinit(void){ADCLK=0b00110000;//||||||||_______不用//||||___________选择内部总线时钟//|||____________分频系数为2}//ADCave:1路A/D转换函数(均值滤波)*//功能:通道channel进行n次中值滤波,求和再作均值,得出均值滤波结果//*INT8UADCave(INT8Uchannel,INT8Un){INT8Ui;INT16Uj;j=0;for(i=0;i<n;i++)j+=ADCmid(channel);j=j/n;return(INT8U)j;}//ADCmid:1路A/D转换函数(中值滤波)*//功能:获取通道channel中值滤波后的A/D转换结果//*INT8UADCmid(INT8Uchannel){INT8Ui,j,k,tmp;//1.取三次A/D转换结果i=ADCvalue(channel);j=ADCvalue(channel);k=ADCvalue(channel);if(i>j){tmp=i;i=j;j=tmp;}if(k>i){if(k>j){tmp=j;}else{tmp=k;}}else{tmp=i;}returntmp;}//ADCvalue:1路A/D转换函数*//功能:获取通道channel的A/D转换结果//*INT8UADCvalue(INT8Uchannel){INT8Utmp;//1.选取通道号ADch4-ADch0=00000-00111:AD0引脚~AD7引脚channel&=0b00011111;//取通道号变量的低五位(实际通道号)tmp=ADSCR&0b11100000;//取ADSCR的高三位(取上电复位默认值000)ADSCR=tmp|channel;//合并上述8位//2.取A/D转换结果while((ADSCR&(1<<COCOBit))==0);returnADR;}//总头文件#include"Includes.h"//主程序voidmain(void){DisableMCUint();//禁止总中断//1.芯片初始化MCUinit();//2.模块初始化SCIinit();//(1)串行口初始化ADCinit();//(2)A/D转换初始化while(1){//在通道0做A/D转换,200次中值滤波,串口发送均值滤波结果SCIsend1(ADCave(0,200));}}3.1.3串行口初始化子程序该模块是对串行通信接口(SerialCommunicationInterface,SCI)的比特率寄存器(SCBR)、控制寄存器1(SCC1)、控制寄存器2(SCC2)进行设置。//[SCI.h]串行通信头文件//头文件#include"GP32C.h"//GP32MCU映像寄存器名定义#include"Type.h"//类型别名定义//与SCI模块相关的MCU寄存器及有关标志位的宏定义#defineReSendStatusRSCS1//SCI状态寄存器#defineReTestBit5//接收缓冲区满标志位#defineSendTestBit7//发送缓冲区空标志位#defineReSendDataRSCDR//数据寄存器//串行通信函数声明voidSCIInit(void);//串行口初始化voidSCISend1(INT8Uo);//发送1字节voidSCISendN(INT8Un,INT8Uch[]);//发送n字节INT8USCIRe1(INT8U*p);//接收1字节INT8USCIReN(INT8Un,INT8Uch[]);//接收n字节//SCIInit:串行口初始化*//功能:对串行口进行初始化,默认为允许SCI,正常码输出,8位数据,无校验,允许发送器,允许接收器.查询方式收发,波特率为9600(设fBUS=2.4576MHz)//参数:无//返回:无//*voidSCIInit(void){//1.总线频率fBUS=2.4576MHz,定义波特率Bt=9600SCBR=0b00000010;//2.设置允许SCI,正常码输出、8位数据、无校验SCC1=0b01000000;//3.设置允许发送、允许接收,查询方式收发SCC2=0b00001100;}3.1.4串口通行模块串口通信的主要功能是:接收时,把外部单线输入的数据变成一个字节的并行数据送入MCU内部;发送时,把需要发送的一个字节的并行数据转为单线输出。图20给出了普遍意义上的SCI的编程模型。在比特寄存器中可设置比特率,在控制寄存器中设置通信格式、是否效验、是否中断等。SCI数据寄存器既做接收数据寄存器,也可做发送数据寄存器,这并不冲突,因为发送与接收的实际工作是通过“发送移位寄存器”和“接收移位寄存器”完成。发送移位寄存器接收移位寄存器发送移位寄存器接收移位寄存器SCI数据寄存器SCI数据寄存器MCU内部总线(InternalBus)MCU内部总线(InternalBus)SCI比特率寄存器SCI状态寄存器SCI控制寄存器SCI比特率寄存器SCI状态寄存器SCI控制寄存器图20SCI编程模型该模块包括:单字节接收、多字节接收、单字节发送、多字节发送等子程序,结构图如图21。串口通信模块串口通信模块单字节接收单字节发送多字节接收多字节发送单字节接收单字节发送多字节接收多字节发送图21串口通信/***文件描述:本文件包含了串行通信的4子程序,分别为:**(1)SCISend1:串行发送1字节**(2)SCISendN:串行发送n字节**(3)SCIRe1:串行接收1字节**(4)SCIReN:串行接收n字节***///[以下为子程序源代码]//[包含头文件]#include"SCI.h"/*SCISend1:串行发送1个字节**功能:串行发送1个字节**参数:要发送的数据**返回:无***/voidSCISend1(unsignedcharo){//判断ReStatusR的第SendTestBit位是否为1,是1可以发送while(1)if((ReSendStatusR&(1<<SendTestBit))!=0){ReSendDataR=o;break;}}/*SCISendN:串行发送N个字节**功能:发送数组中的N个字节数据**参数:待发送的数据字节数及其要存放的数组首地址**返回:无***/voidSCISendN(unsignedcharn,unsignedcharch[]){inti;for(i=0;i<n;i++) SCISend1(ch[i]);}/*SCIRe1:串行收一个字节数据**功能:从串行口接收1个字节的数据**参数:标志指针p**返回:接收到的数据(若接收失败,返回0xff)**说明:参数*p带回接收标志=0收到数据,=1未收到数据***/unsignedcharSCIRe1(unsignedchar*p){unsignedintk;unsignedchari;//ReStatusR第ReTestBit位为1表示可接收数据 for(k=0;k<0xfbbb;k++) if((ReSendStatusR&(1<<ReTestBit))!=0) {i=ReSendDataR; *p=0x00; break;} if(k>=0xfbbb) {i=0xff; *p=0x01;}returni;//返回接收到的数据}/*SCIReN:HC08串行接收N个字节**功能:接收N个字节数据,并存放在ch数组中**参数:待接收的数据字节数及其存放的数组首地址**返回:接收标志=0收到数据,=1未收到数据***/unsignedcharSCIReN(unsignedcharn,unsignedcharch[]){intm;unsignedcharfp;m=0;while(m<n) { ch[m]=SCIRe1(&fp); if(fp==1)return1; m++; }return0; }3.1.5WllDef.c程序#include"wllDef.h"constINT8Uhg[]={0x79,30,0x4f,29,0x4e,28,0x4d,27,0x4c,26,0x4b,25,0x4a,24,0x49,23,0x48,22,0x47,21,0x46,20,0x45,19,0x15,18,0x00};INT8UwllDef(INT8Uvalve){INT8Uwll;INT8Ui;i=0;wll=0xff;while(hg[i]!=0x00){if(hg[i]==valve){wll=hg[i+1];break;}i+=2;}returnwll;}建立此程序用于查找经A/D转换后所得到的数值与之对应的实际的温度值,进而通过串口输出到显示界面。3.2PC机方(VB编程)程序描述:1)把发送窗口中的数据从COM1发送出去2)把接收到的数据显示在接收窗口中//*OptionExplicit//检查未经声明的变量DimSendData()AsByte//发送数据数组DimRecvData()AsByte//接收数据数组PrivateSubCmd_stop_Click()IfCmd_stop.Caption="停止"//停止发送Cmd_stop.Caption="继续"MSComm1.PortOpen=False//关闭串口ElseCmd_stop.Caption="停止"//继续发送MSComm1.PortOpen=True//打开串口EndIfEndSubPrivateSubCombo_bps_Click()//改变发送数据格式MSComm1.Settings=Str(Combo_bps.List(Combo_bps.ListIndex))&","&"N"&","_&"8"&","&"1"EndSubPrivateSubForm_Load()//串行口初始化默认串口1,波特率9600CallSCIinit(MSComm1,1,"9600,N,8,1")//清空有关文本框TxtSEND.Text=""TxtRECV.Text="":TxtRecvHex.Text="":TxtRecvOct.Text=""//开放串行中断MSComm1.RThreshold=1EndSubPrivateSubCmdSEND_Click()//单击"发送"按钮DimiAsIntegerIfTxtSEND.Text=""ThenTxtRECV.Text="":TxtRecvHex.Text="":TxtRecvOct.Text=""GoToCmdSEND_Click_ExitEndIfReDimSendData(Len(TxtSEND.Text)-1)Fori=0ToLen(TxtSEND.Text)-1SendData(i)=Asc(Mid$(TxtSEND.Text,i+1,1))NextiMSComm1.Output=SendDataCmdSEND_Click_Exit:EndSubPublicSubMSComm1_OnComm()//串行接收中断DimiAsIntegerDimStempAsStringStaticS1AsStringStaticS2AsStringStaticS3AsStringIfLen(Trim(TxtRECV.Text))=0ThenS1="":S2="":S3=""MSComm1.RThreshold=0//关闭串行中断RecvData=MSComm1.InputFori=LBound(RecvData)ToUBound(RecvData)If(RecvData(i)>=127OrRecvData(i)=0)ThenStemp=Chr$(1)ElseStemp=Trim(Chr$(RecvData(i)))EndIfS1=S1&Stemp&""S2=S2&Hex$(RecvData(i))&""S3=S3&RecvData(i)&""NextiTxtRECV.Text=S1:TxtRecvHex.Text=S2:TxtRecvOct.Text=S3IfLen(S1)>=160ThenS1="":S2="":S3=""//让文本框光标紧跟最后TxtRECV.SelStart=Len(TxtRECV.Text)TxtRecvHex.SelStart=Len(TxtRecvHex.Text)TxtRecvOct.SelStart=Len(TxtRecvOct.Text)MSComm1.RThreshold=1//开放串行中断EndSubPrivateSubCmdCLR_Click()//单击"清空"按钮TxtSEND.Text=""TxtRECV.Text="":TxtRecvHex.Text="":TxtRecvOct.Text=""EndSubPrivateSubCmdEXIT_Click()//单击"退出"按钮IfMSComm1.PortOpen=TrueThenMSComm1.PortOpen=FalseEndEndSubPrivateSubMSOption1_Click()//改变串口号为1MSComm1.PortOpen=FalseMSComm1.CommPort=1MSComm1.PortOpen=True//打开串行口1OnErrorGoToMSOption1_Click_ErrorGoToMSOption1_Click_ExitMSOption1_Click_Error:MsgBox("这台机器没有COM1,请选择COM2!")EndMSOption1_Click_Exit:EndSubPrivateSubMSOption2_Click()//改变串口号为2MSComm1.PortOpen=FalseMSComm1.CommPort=2OnErrorGoToMSOption2_Click_ErrorMSCo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论