基于PT100的温度测试仪_第1页
基于PT100的温度测试仪_第2页
基于PT100的温度测试仪_第3页
基于PT100的温度测试仪_第4页
基于PT100的温度测试仪_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

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

文档简介

文档从互联网中收集,已重新修正排版,文档从互联网中收集,已重新修正排版,word格式支持编辑,如有帮助欢迎下载支持。10word10word格式支持编辑,如有帮助欢迎下载支持。部分项目得分设计报告设计方案与论证5分理论分析与软件说明5分主要电路说明、测试方法6分数据、结果分析4分合计20分基本部分完成1项:25分完成2项:25分完成3项:10分合计60分发挥部分其他扩展功能20分第一章概述第二章设计方案与论证单片机器、模拟本设计设计的温度测量系统是把热电阻信号通过传感器检测转变为电压信号,经过信号采集电路转换成A/D输入的标准信号。之后A/D将模拟电压信号变转换成数字信号,然后送入单片机(MCU)进行处理和运算,单片机将处理的数据通过LED单片机器、模拟显示模集成传感器以及新兴的方案一:采用模拟分立元件如电容、电感或晶体管等非线形元件,该方案设计电路简单易懂,操作简单,且价格便宜,但采用分立元件分散性大,不便于集成数字化,而且测量误差大。方案二:采用温度传感器通过温度传感器采集温度信号,经信号放大器放大后,送到A/D转换芯片,将模拟量转化为数字量,传送给单片机控制系统,最后经过LED显示温度。热电阻也是最常用的一种温度传感器。它的主要特点是测量精度高,性能稳定,使用方便,测量范围为-200℃~850℃,完全满足要求,考虑到铂电阻的测量精确度是最高的,所以我们设计最终选择箱电阻Pt100作为传感器。该方案采用热电阻Pt100做为温度传感器、OP07作为信号放大器,对于温度信号的采集具有大范围、高精度的特点。相对与方案一,在功能、性能、可操作性等方面都有较大的提升。在这里我选用方案二完成本次设计。放大器选择Op07是一种低噪声,非斩波稳零的双极性运算放大器。由于OP07具有非常低的输入失调电压(对于OP07A最大为25口V),所以OP07在很多应用场合不需要额外的调零措施。OP07同时具有输入偏置电流低(OP07A为±2nA)和开环增益高(对于OP07A为300V/mV)的特点,这种低失调、高开环增益的特性使得OP07特别适用于高增益的测量设备和放大传感器的微弱信号等方面。宽的输入电压范围(最少±13V)与高达110dB(OP07A)的共模抑制比和高输入阻抗的结合,在同相电路阻态中提供了很高的精度,即使在很高的闭环增益下,也能保持极好的线性和增益精度。失调和增益对时间或温度变化的稳定性也是极好的。不加外调零措施的OP07的精度和稳定性,即使在高增益下也能使OP07成为一种新的仪器用和军用的工业标准。OP07A和OP07适用于在-55℃到+125℃的整个军用范围内。热电阻(PT100)接法热电阻是把温度变化转换为电阻值变化的一次元件,通常需要把电阻信号通过引线传递到计算机控制装置或者其它一次仪表上。工业用热电阻安装在生产现场,与控制室之间存在一定的距离,因此热电阻的引线对测量结果会有较大的影响。目前热电阻的引线主要有三种方式:1、二线制:在热电阻的两端各连接一根导线来引出电阻信号的方式叫二线制:这种引线方法很简单,但由于连接导线必然存在引线电阻r,r大小与导线的材质和长度的因素有关,因此这种引线方式只适用于测量精度较低的场合。2、三线制:在热电阻的根部的一端连接一根引线,另一端连接两根引线的方式称为三线制,这种方式通常与电桥配套使用,可以较好的消除引线电阻的影响,是工业过程控制中的最常用的引线电阻。3、四线制:在热电阻的根部两端各连接两根导线的方式称为四线制,其中两根引线为热电阻提供恒定电流I,把R转换成电压信号U,再通过另两根引线把U引至二次仪表。可见这种引线方式可完全消除引线的电阻影响,主要用于高精度的温度检测。在本设计中热电阻采用三线制接法。采用三线制是为了消除连接导线电阻引起的测量误差。这是因为测量热电阻的电路一般是不平衡电桥。热电阻作为电桥的一个桥臂电阻,其连接导线(从热电阻到中控室)也成为桥臂电阻的一部分,这一部分电阻是未知的且随环境温度变化,造成测量误差。采用三线制,将导线一根接到电桥的电源端,其余两根分别接到热电阻所在的桥臂及与其相邻的桥臂上,这样消除了导线线路电阻带来的测量误差。第三章理论分析与主要电路说明电源模块电子技术课程中所介绍的直流稳压电源一般是线性稳压电源,它的特点是起电压调整功能的器件始终工作在线性放大区,由50Hz工频变压器、整流器、滤波器和串联调整稳压器组成。它的基本工作原理为:工频交流电源经过变压器降压、整流、滤波、再次滤波后成为一稳定的直流电。图中其余部分是起电压调节,实现稳压作用的控制部分。电源接上负载后,通过采样电路获得输出电压,将此输出电压与基准电压进行比较。如果输出电压小于基准电压,则将误差值经过放大电路放大后送入调节器的输入端,通过调节器调节使输出电压增加,直到与基准值相等;如果输出电压大于基准电压,则通过调节器使输出减小。这种稳压电源具有优良的纹波及动态响应特性。本设计采用固定集成输出集成稳压电路,它主要由变压器(双6V,5W)、集成整流桥、集成稳压器LM7805(+5V)和LM7905(-5V)、极性电容(100uF和1000uF)构成。如图5-1所示。图5-1稳压电源1)二极管(4个):组成全波整流桥电路,正半周期时右上和左下两个二极管导通,负半周期左上和右下两个二极管导通,使电压信号都位于3t轴上方;图5-2电压输入波形 图5-3整流之后波形(i和u)2)极性电容(4个):滤波作用,当电压信号逐渐增大时候向电容里充电,当电容里电荷达到一定时,停止充电,当电压信号低于电容存储的电荷的电压时,电容开始放电,放到一定程度又开始充电,周而复始,形成周期;图5-3电容滤波电路3)7805/7905:稳压块,7805稳压输出+5V电压,7905稳压输出-5V电压。采集模块热电阻的阻值随温度的变化而变化,所以我们可以把热电阻的阻值变化转换成相应的电压信号,然后经过后续的放大电路将采集到的电压放大到一定倍数,被A/D采集并输入到单片机内部。由于在实验室中恒流发生电路比较简单常用,而且电压信号采集简单、测量方便,所以本设计采用恒流源测电压方法实现热电阻和电压信号的对应关系。恒流源电路可以产生1mA恒定电流,把热电阻Rt的阻值转换为电压信号Uo(Uo=Rt*1mA),如图3-1所示。电压放大电路主要是把电压信号放大一定的倍数,能被A/D比较精确地采集到。图3-1温度采集及信号处理电路第一部分恒流源发生电路如图3-1(a)所示:图3-1(a)恒流源发生电路1)LM336-2.5稳压管:稳压作用,将放大器3脚电压钳制到2.5V左右;2)R12(2.4K)电阻:根据“虚断”原理,U3=U2,I=2.5V/2.4K=1mA;9012复合三极管:又叫达林顿管,将B系数放大,即P=供,使达林顿管集电极和发射极电流相等,即Ic=Plb=I,从而大大减小Ib的值;R14(10K)电阻:保护前端放大器作用,防止1b过大,进入运放6脚;第二部分三线制处理及输出放大如图3-2(b)所示;图3-13)三线制处理及输出放大电路1)200Q电位器代替Pt100,实验时将电位器调整至100Q阻值;2)R17、R20、R23:理论上代替三根传输导线,令R17后面的电压为U1,R20后面的电压为U2,R17=R20=R23=R';所以U1=I*(R17+Rt+R23)=I*Rt+2*R'(U2=U3=TOC\o"1-5"\h\zI*R' ……(根据方程(2*( U1-2*U=I*Rt ……(从而推出放大器输入端信号与导线电阻无关(三线制最终目的)3)后端运放:根据“虚短”原理可以得出U+=U-=U1*R13/(R16+R13)=U1/3 ……((Uo/(R19+R24)-U-)/R22=(U--U2)/R21 ……(经(Uo=11(U1-2*U2) ……(从而实现信号电压放大十倍的作用A/D模数转换模块ICL7135功能介绍ICL7135是一种四位半的双积分A/D转换器,可以转换出±20000个数字量选通控BCD码输出,与单片机接口十分方便。它具有精度高(相当于14位A/D转换),价格低的优点。其转换速度与时钟频率相关,每个转换周期均有:自校准(调零),正向积分(被测模拟电压积分),反向积分(基准电压积分)和过零检测四个阶段组成,其中自校准时间为10001个脉冲,正向积分时间为10001个脉冲,反向积分直至电压到零为止(最大不超过20001个脉冲)。故设计者可以采用从正向积分开始计数脉冲个数,到反向积分为零时停止计数。将计数的脉冲个数减10000,即得到对应的模拟量。具体电路如图2.3所示。图2.3A/D模数转换电路图2.4给出了ICL7135时序,由图可见,当BUSY变高时开始正向积分,反向积分到零时BUSY变低,所以BUSY可以用于控制计数器的启动/停止。图2.4ICL7135时序图计数的时钟脉冲是由单片机的ALE引脚经过74HC393分频后得到的。在平时,单片机ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲,若外部时钟为12MHZ,则ALE端输出的时钟频率为2MHZ。由于ICL7135芯片在时钟脉冲为125KHz时对50HZ工频干扰有较大抑制能力,此时转换速度为3次/s,故将ALE端的时钟脉冲经过74HC393芯片16分频后得到所需的125KHZ。74HC393芯片如图2.5所示。图2.574HC393芯片及电路图ICL7135引脚图ICL7135为DIP28封装,芯片引脚排列如图2.6所示。图2.6ICL7135芯片引脚图引脚含义及功能:(1)与供电及电源相关的引脚(共7脚):负电源引入端,典型值-5V,极限值-9V;:正电源引入端,典型值+5V,极限值+6V;ND:数字地,ICL7135正负电源的低电平基准;F:参考电压输入REF的地为AGND引脚,典型值1V,输出数字量=10000X(VIN/VREF);:模拟地,典型应用中,与DGND(数字地)”一点接地”;.INHI:模拟输入正,此设计中与恒流源连接;.INLO:模拟输入负,当模拟信号输入为单端对地时,直接与AC相连。与控制和状态相关的引脚(共12脚).CLKIN:时钟信号输入,当T=80ms时,fcp=125KHz,对50HZ工频干扰有较大抑制能力,此时转换速度为3次/s,极限值fcp=1MHZ时,转换速度为25次/s;.REFC+:外接参考电容正,典型值IhF;.REFC-:外接参考电容负;.BUFFO:缓冲放大器输出端,典型外接积分电阻;.INTO:积分器输出端,典型外接积分电容;.AZIN:自校零端;.LOW: 欠量程信号输出端,当输入信号小于量程范围的10%时,该端输出高电平;.HIGH:过量程信号输出端,当输入信号超过计数范围(20001)时,该端输出高电平;.STOR:数据输出选通信号(负脉冲),宽度为时钟脉冲宽度的一半,每次A/D转换结束时,该端输出5个负脉冲,分别选通由高到低的BCD码数据(5位),该端用于将转换结果打到并行I/O接口;.R/H:自动转换/停顿控制输入,当输入高电平时;每隔40002个时钟脉冲自动启动下一次转换;当输入为低电平时,转换结束后需输入一个大于300ns的正脉冲,才能启动下一次转换;.POL:极性信号输出,高电平表示极性为正;.BUSY:忙信号输出,高电平有效,正向积分开始时自动变高,反向积分结束时自动变低。与选通和数据输出相关的引脚(共9脚).B8〜B1:BCD码输出,B8为高位,对应BCD码;.D5:万位选通;.D4〜D1:千,百,十,个位选通。SST89E51单片机简介SST89E51是一种带4K字节FLASH存储器(FPEROM-FlashProgrammableandErasableReadOnlyMemory)的低电压、高性能CMOS8位微处理器,俗称单片机。AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除1000次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的SST89E51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。外形及引脚排列如图2.9所示。图2.9SST89E51引脚及连线图.P0口:双向8位三态I/O口,为地址总线及数据总线分时复用口,可驱动8个LS型TTL负载。.P1口:8位准双向I/O口,可驱动4个LS型TTL负载。.P2口:8位准双向I/O口,与地址总线复用,可驱动4个LS型TTL负载。.P3口:8位准双向I/O口,双功能复用口,可驱动4个LS型TTL负载。.RST/VPP:RST是复位信号输入端,高电平有效。VPP为本引脚的第二功能,即备用电源输入端。.ALE/PROG:ALE输出为地址锁存允许信号。PROG为本引脚的第二功能。.PSEN:程序存储器允许输出控制端。.EA/VPP:EA功能为内外程序存储器选择控制端。此设计中,采用定时计数器0(INTO)外部脉冲计数方法,通过公式(2-6)获得:VinC二——*10000Vref(2-6)其中,Vin为输入电压,Vref为参考电压,C为计数值。由上公式可求出Vin,就可以求出R,根据R和温度T的关系就可以求出当前温度值。这就是编程中A/D转换函数的算法和思想。数码管显示电路本设计显示电路是由8段共阳极数码管(4个),三极管(4个9012),电阻(4个1K,8个200Q),电源(+5V)几部分构成。具体电路如图3-2所示:图3-2数码管显示电路电路分析:1)1K电阻:分别接到单片机P2.3、P2.4、P2.5、P2.6口上,并对PNP三极管起到限流保护作用;2)三极管:4个三极管均为PNP型号,基极接I/O口,发射极接电源,数码管COM口接在三极管集电极上,当I/O给一个低电平,三极管基极电压为低,发射极电压为高,使三极管导通,为数码管提供电压;3)200Q电阻:接到数码管的8个段位上,起到限流保护作用;4)数码管:当P0.x信号为低时,P2.x为低,对应数码管对应的段位呈现亮的状态,反之则不亮。工作原理:数码管采用动态扫描工作方式,动态显示是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,h"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,本设计分别接到P2.3、P2.4、P2.5、P2.6,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位数码管的点亮时间为1〜2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。串口电路及MAX232芯片简介MAX232是美信公司专门为电脑的RS-232标准串口设计的电源电平转换芯片,使用+5V单电源供电,功能是产生+12V和-12V两个电源,提供给RS-232串口电平的需要。串口电路图如图2.8所示。图2.8串口电路MAX232芯片引脚介绍:第一部分是电荷泵电路。由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)。第四章软件说明、测试方法本章主要介绍编程语言C语言和编程工具Keil3软件,以及本系统的程序设计和在程序设计时所遇到的问题及解决办法。编程语言介绍C语言是一种面向过程的计算机程序设计语言,它是目前众多计算机语言中举世公认的优秀的结构程序设计语言之一。C语言主要有以下特点:1、C是中级语言。它把高级语言的基本结构和语句与低级语言的实用性结合起来。C语言可以像汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元。2、C是结构式语言。结构式语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。这种结构化方式可使程序层次清晰,便于使用、维护以及调试。3、C语言功能齐全。具有各种各样的数据类型,并引入了指针概念,可使程序效率更高。另外C语言也具有强大的图形功能,支持多种显示器和驱动器。4、C语言适用范围大。适合于多种操作系统,如Windows、DOS、UNIX等等;也适用于多种机型。基于C语言的这些特点,我们选用C语言来作为编程语言。编程软件Keil简介KeilC51是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。KeilC51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到KeilC51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,

容易理解。在开发大型软件时更能体现高级语言的优势。下面详细介绍KeilC51开发系统各部分功能和使用。我们用开发软件KeiluVision3来编写、修改所需程序和下载程序到单片机运行。其下介绍KeiluVision3的使用步骤。.双击也nuVision3,得到主画面,如图3.1所示:图3.1KeiluVision3主画面.新建工程界面Project--newproject,如图3.2所示:图3.2KeiluVision3的新建界面3.单片机的选择,如图3.3所示:图3.3单片机的选择界面如图所示能找到本次设计所需主要芯片SST89E51。4.C文件的建立与添加,如图3.4所示:图3.4添加C文件在添加C文件之后,就可以在里面编写自己的程序了,在编写完后编译,如果没有错误,就可以下载到芯片当中进行调试并得到最终可用程序。程序设计流程图本温度测量系统的程序设计流程图如图3.5所示。图3.5程序流程图始用插值法计算翻始化在科学和工程问题上可以通过租入采血实始化方法或得若干离散的数据,根据这些数据,我们往往希望得到一个连续的函数((也就是曲线)或者更加密集的离散方程与已知数据相吻合。这个过程叫拟合。插值是曲线必须通过已知点的拟合,是离散函数I拟合,是离散函数I估算出函数在其它点的近似值。由于PT100与温度近似呈线性关系,故采用线性插值法。在本次程据AD值算出PT10每间隔插值法。在本次程据AD值算出PT10每间隔5Q测一个序设计中运用了两次据电插值算出温度终的温度值,第一次根0的阻值,之前先用标准电阻来标定AD值,即自50。到220QAD值,制成表格,次根据阻值算出对应的温度值,在阻值与温再由插值法显计算出PTpOO的实际值。第二度的表示中用插值法计算出当时的温度值。*度值。延时6.4关键程序voidzhuanhuan(){Vinad=2.2*(Dat_pingjun/4096); //电压转换V_Pt=Vinad/11.8;R=(int)(100000*V_Pt); //转换电阻T=T_pingjun;T_ZZ[Z_N]=T;Z_N++;if(Z_N==16){Z_N=0;zhongzhi();}}我个人认为该程序模块为整个测温系统程序的灵魂,对电压,电阻,温度三者之间的转换起到衔接作用,Dat_pingjun承接A/D采集的数据,根据0V〜0,2.2V〜4096,所以A/D输入电压就是第一条语句的对应关系,为了使数据稳定,在这里对A/D采集的数据进行了滑动取平均值,由于Pt100信号电压比较微弱,不利于采集,所以后级放大器将V_Pt差分放大约11倍多,所以就有了第二条语句的关系,根据电阻-温度的分度表将电阻放大100倍,便于插值运算,然后对插值计算所得结果再次进行滑动取平均值,使温度数据更加稳定,但是经过测试之后,到了这一步温度显示还是不够稳定,所以我又采取对滑动之后温度平均值放在长度为16的数组之中,对这些数据进行取中值,最后送显示,调试结果很稳定,误差能保持在允许范围之内。测试方法用变阻箱代替PT100模拟温度变化时阻值的变化。程序运行时,在一定范围内扭动变阻箱,LED将显示此阻值对应的温度值。可知对应值是否正确。第五章数据结果分析3.8数据测试及误差分析AD码-阻值分度表如表3-8所示,阻值-温度分度值见附录(二)。根据插值法,可以由测得数据获得液晶显示获得AD码与温度的近似值。误差主要是由软件编写不成熟和电阻箱阻值不稳定造成的。但精度基本上可以达到±0.1℃。表3-8AD码-阻值分度表R(Q)556065707580859095AD465851245515698063756836723076858084R(Q)100105110115120125130135140AD85168875939597701025310630111081148611967R(Q)145150155160165170175180185AD123501282313210136571405014530149251538715789R(Q)190195200205210215220225230AD1624216615170361738718857182301871519113196276.5.3软件调试结果部分电阻-温度分度表,由于电阻存在误差,所以测出的温度相对误差不是很准确。表6-1数据统计表分度表阻值(Q)实测阻值(Q)分度表温度(℃)实测温度(℃)相对误差100.00100.00000110.12110.012625.8-26.1-0.2-+0.1120.16120.105252.1-52.4+0.1-+0.4130.13130.187877.7-78.1-0.3-+0.1140.02139.96104103.6-103.8-0.4--0.2149.82149.79130129.7-129.9-0.3--0.1159.93159.88157156.8-157.1-0.2-+0.1169.57169.45183182.5-182.8-0.5--0.2179.14179.11209208.6-208.9-0.4--0.1184.63184.6224223.7-0.3附录(I)程序#include<c8051f410.h>#defineucharunsignedchar#defineuintunsignedintucharseg_code[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x7f};//段码ucharbit_sel[4]={0xbf,0xdf,0xef,0xf7};//位码ucharLEDn=0;ucharbuffer[4];ucharbtpoint=0X7F;bitT0_flag=0,AD_flag=0;doubleaver,get_ad[15],huadong[16],T_huadong[16],T_ZZ[16];doubleVinad,V_Pt,Dat_pingjun,T_pingjun,T_last;intflag=0,NUM,Z_N=0;/**************************pt1OO有关参数定义*L**L**L**L**L**L**L**L**L**L**L**L*//uintR;//电阻doubleT;//温度intcodept[36][2]{ {6430,-90},{6833,-80},{7233,-70},{7633,-60},{8031,-50},{8427,-40},{8822,-30},{9216,-20},{9609,-10},{10000,0},{10390,10},{10779,20},{11167,30},{11554,40},{11940,50},{12324,60},{12708,70},{13090,80},{13471,90},{13851,100},{14229,110},{14607,120},{14983,130},{15358,140},{15733,150},{16105,160},{16477,170},{16848,180},{17217,190},{17586,200},{17953,210},{18319,220},{18684,230},{19047,240},{19410,250},{19771,260}};/************************配置cpuio口*L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L*//voidIO_Init(){pCA0MD=0x00;//禁止看门狗P0MDOUT=0x00;//P0口为输出方式,设置为弱上拉(0为弱上拉,1为推挽)P2MDIN=0xfb;//P2.2为模拟输入方式P2MDOUT=0x78;//P2口为输出方式,设置为弱上拉P1SKIP=0xff;〃交叉开关跳过P1.1XBR0 =0x00; //不连任何端口引脚XBR1 =0x40; //输出方式为弱上拉,交叉开关被使能}/***************************A/D初始化voidAD_Init(){ADC0MX=0x12; //A/D转化选择输入为p1.1口*A/DC0通道选择寄存器ADC0CF=0xf8;ADC0CN=0x80;ADC0TK=0xff;/******************************系统时钟初始化*L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L*//voidSYSCLK(){OSCICN=0乂87;//内部振荡器不分频}/*****************************电压基准选择*L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L*//voidMUX(){REF0CN=0乂13;//内部基准电压为2.2丫,内部基准缓冲器被使能,内部电压基准被驱动到VREF引脚,内部偏压发生器总是被使能。/**********************************显示函数*L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L*//voiddisplay(){if(T0_flag==1){T0_flag=0;P2=0xff;if(LEDn==2){P0=seg_code[buffer[LEDn]]&0x7f;}else{P0=seg_code[buffer[LEDn]];}P2=bit_sel[LEDn];LEDn++;if(LEDn==4){LEDn=0;/************************************定时器/~\*L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L*/I* /voidT0_Init(){TMOD=0x01;TCON=0x10;TH0=255;TL0=255;ET0=1;}/********************************定时器0中断用来显示*L**L**L**L**L**L**L**L**L**L**L**L**L**L**L*//voidTimer0()interrupt1TH0=0xe0;TL0=0;T0_flag=1;/ *L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L*/*L**L**L**L**L**L**L**L**L*//uintADC0(){ucharx;uinty;ADC0MX=0x09;ADC0CN|=0x10;x=ADC0CN&0x20;while(x==0){x=ADC0CN&0x20;}ADC0CN=ADC0CN&0xdf;y=256*ADC0H+ADC0L-30;returny;/***********************************求平均值*L**L**L**L**L**L**L**L**L**L**L**L**L**L**L*//voidhuadongpingjun(){huadong[15]=huadong[14];huadong[14]=huadong[13];huadong[13]=huadong[12];huadong[12]=huadong[11];huadong[11]=huadong[10];huadong[10]=huadong[9];huadong[9]=huadong[8];huadong[8]=huadong[7];huadong[7]=huadong[6];huadong[6]=huadong[5];huadong[5]=huadong[4];huadong[4]=huadong[3];huadong[3]=huadong[2];huadong[2]=huadong[1];huadong[1]=huadong[0];huadong[0]=aver;Dat_pingjun=(huadong[15]+huadong[14]+huadong[13]+huadong[12]+huadong[11]+huadong[10]+huadong[9]+huadong[8]+huadong[7]+huadong[6]+huadong[5]+huadong[4]+huadong[3]+huadong[2]+huadong[1]+huadong[0])/16;}voidAverage(){uintsum=0;inti;for(i=0;i<=15;i++){get_ad[i]=ADC0();sum=sum+get_ad[i];}aver=sum/16;/*********************************插值计算*L**L**L**L**L**L**L**L**L**L**L**L**L**L**L**L*//doublejisuan(doublex,doublex1,doublex2,doublex3,doubley1,doubley2,doubley3){doubleY;Y=((x-x2)*(x-x3)/((x1-x2)*(x1-x3)))*y1+((x-x1)*(x-x3)/((x2-x1)*(x2-x3)))*y2+((x-x1)*(x-x2)/((x3-x1)*(x3-x2)))*y3;returnY;}doublechazhi(intR){doubleT1;inti=0;while(R>Pt[i][0])i++;T1=jisuan(R,Pt[i-1][0],Pt[i][0],Pt[i+1][0],Pt[i-1][1],Pt[i][1],Pt[i+1][1]);returnT1;/********************

温馨提示

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

评论

0/150

提交评论