收藏 分销(赏)

基于s08的温度检测显示系统的设计---大学论文.doc

上传人:鼓*** 文档编号:9872696 上传时间:2025-04-11 格式:DOC 页数:27 大小:343.50KB 下载积分:8 金币
下载 相关 举报
基于s08的温度检测显示系统的设计---大学论文.doc_第1页
第1页 / 共27页
基于s08的温度检测显示系统的设计---大学论文.doc_第2页
第2页 / 共27页


点击查看更多>>
资源描述
基于S08的温度检测显示系统的设计 目 录 1 绪论 1 1.1设计背景 1 1.2 数据采集系统简单介绍 1 2 方案论证 3 2.1微控制器的选择 3 2.2显示方案选择 3 2.3温度传感器的选择 4 3 温度测量显示系统硬件设计 5 3.1 温度采集模块硬件设计 5 3.2 MCU控制器模块设计 6 3.3 显示模块电路的设计 7 4 温度测量显示系统软件设计 7 4.1微控制器程序的开发环境及语言 8 4.2程序设计 9 4.2.1 A/D转换原理及程序 9 4.2.2热敏电阻阻值和温度的非线性对性模块原理及程序 11 4.2.3 温度显示模块程序 13 总结 15 参考文献 16 附录A 温度采集与显示程序 17 附录B 接线原理图 23 1 绪论 1.1设计背景 在人类的生活环境中,温度扮演着极其重要的角色。无论你生活在哪里,从事什么工作,无时无刻不在与温度打着交道。自18世纪工业革命以来,工业发展对是否能掌握温度有着绝对的联系。在冶金、钢铁、石化、水泥、玻璃、医药等等行业,可以说几乎80%的工业部门都不得不考虑着温度的因素。温度对于工业如此重要,由此推进了温度传感器的发展。进入21世纪后,温度传感器正朝着高精度、多功能、总线标准化、高可靠性及安全性、开发虚拟传感器和网络传感器、研制单片测温系统等高科技的方向迅速发展。 在工农业生产中,温度检测及其控制占有举足轻重的地位,随着现代信息技术的飞速发展和传统工业改造的逐步实现 ,能够独立工作的温度检测和显示系统已经应用于诸多领域。要达到较高的测量精度需要很好的解决引线误差补偿问题、多点测量切换误差问题和放大电路零点漂移误差等问题,使温度检测复杂化。模拟信号在长距离传输过程中,抗电磁干扰时令设计者伤脑筋的问题,对于多点温度检测的场合,各被检测点到监测装置之间引线距离往往不同,此外,各敏感元件参数的不一致,这些都是造成误差的原因,并且难以完全清除。 单片机以其功能强、体积小、可靠性高、造价低和开发周期短等优点,成为自动化和各个测控领域中必不可少且广泛应用的器件,尤其在日常生活中也发挥越来越大的作用。采用单片机对温度采集进行控制,不仅具有控制方便、组态简单和灵活性大等优点,而且可以大幅度提高被控数据的技术指标,从而能够大大提高产品的质量和数量。 1.2 数据采集系统简单介绍 随着自动控制的发展,数据采集越来越被广泛应用,如医疗、工业等方面,数据采集是指将温度,压力,流量,位移等模拟量通过各种传感元件做适当转换后,再经信号调理、采样、量化、编码、传输等步骤采集,转换成数字量后,传给PC 机进行存储,处理,显示或打印的过程,相应的系统称为数据采集系统,可分为以下几种: 1.基于通用微型计算机的数据采集系统 将采集来的信号通过外部的采样和A/D转换后的数字信号通过接口电路送入微机内进行处理,然后再显示处理结果或经过D/A 转换输出,主要有以下几个特点: (1) 系统较强的软、硬件支持。通用微型计算机系统所有的软硬件资源都可以用来支持系统进行工作。 (2) 具有自开发能力。 (3) 系统的软硬件的应用配置比较小,系统的成本较高,但二次开发时,软硬件扩展能力较好。 (4) 在工业环境中运行的可靠性差,对安放的环境要求较高;程序在RAM 中运行,易受外界干扰破坏。 2.基于单片机的数据采集系统 它是由单片机及其些外围芯片构成的数据采集系统,是近年来微机技术快速发展的结果,它具有如下特点: (1) 系统不具有自主开发能力,因此,系统的软硬件开发必须借助开发工具。 (2) 系统的软硬件设计与配置规模都是以满足数据采集系统功能要求为原则,因此系统的软硬件应用配置具有最佳的性价比。系统的软件一般都有应用程序。 (3) 系统的可靠性好、使用方便。应用程序在ROM 中运行不会因外界的干扰而破坏,而且上电后系统立即进入用户状态。 3.基于DSP数字信号微处理器的数据采集系统 DSP数字信号微处理器从理论上而言就是一种单片机的形式,常用的数字信号处理芯片有两种类型,一种是专用DSP芯片,一种是通用DSP芯片。基于DSP数字信号微处理器的数据采集系统的特点如下:精度高、灵活性好、可靠性好、容易集成、分时复用等,但其价格不菲。 2 方案论证 2.1微控制器的选择 微控制器是测量显示装置的核心部分,它要负责数据的处理及控制液晶屏显示。因此,需要一个高集成度、稳定性高和体积小的微控制器,同时还要注重低成本及实际情况。 AT89S52是一种低功耗、高性能8位微控制器,具有8K系统可编程FLASH存储器和256字节ROM,可实现0Hz~33Hz的全静态操作,支持4.0V~5.5V电源。使用Atmel公司高密度非易失性存储器技术制造,与MCS-51产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。其内部没有A/D转换模块,需要外部扩展模数转换芯片。 S08AW60拥有62KB片上在线可编程FLASH存储器和2KB片上RAM,具有模块保护与安全选项功能,支持2.7~5.5V电源。片内总线时钟最高可达20MHz,可选择宽范围的时钟频率。其内部集成了高性能模/数转换器(ADC)和串行通信模块,具有很宽的工作温度范围(-40℃~+125℃),可适应各类恶劣环境。该芯片还可以通过BDM在计算机与微控制器进行在线编程及后台调试,避免频繁的插拔单片机,编译软件调试功能强大。 对比之后,根据实际的应用需求,本设计选择了飞思卡尔公司生产的增强型8位微控制器MC9S08AW60(44引脚、LQFP封装)。其拥有足够大的FLASH存储器和ROM,并带有高性能模/数转换器。另外,体积小,稳定性高,调试方便。 2.2显示方案选择 方案一: LED数码管显示器可分为两种显示方式:静态显示和动态显示。LED数码管静态显示,多片七段译码器驱动显示,这不仅增加了成本,还需要占用单片机多个I/O口,也给电路的焊接带来一定的困难,因此不选用这种方案作为显示模块,所以排除此方案。 方案二: LED数码管显示器动态显示方式下,将所有位的段选线并联在起,由位选线控制哪位接收字段码。采用动态扫描显示,也就是在显示过中,轮流向各位送出字形码和相应的字位选择,同一时刻只有一位显示,其他各位熄灭。但是此显示方案稳定性较差,并且还需要焊接外围电路,所以不采用此方案。 方案三: LCD液晶显示,由单片机驱动.它主要用来显示大量数据、文字、图形,能够显示的位数多,显示得清晰多样、美观,同时液晶显示器的编写程序简单,价格便宜,故采用此种方案。 LCD类型繁多,价格不等。根据本设计需要显示的信息量小的特点,选用价格便宜的LCD1602液晶屏。其特点如下: (1) 液晶显示屏是以16列×2行=32个5×10或5×7点阵块组成的显示字符群,每个点阵为一个字符,字符间距和行距都为一个点的宽度。 (2) 具有字符发生器ROM,可以显示192种字符。 (3) 具有64字节的自定义字符RAM,可自定义8个5×7或4个5×10点阵字符。 (4) 具有80字节的RAM。 (5) 结构紧凑、轻巧、装配容易。 (6) 单+5V电源供电,低功耗,长寿命,高可靠性。 2.3温度传感器的选择 测量温度的关键是温度传感器,因此需要灵敏度高、测温范围宽、稳定性好,同时还要考虑成本和实际情况。 DS18B20数字式温度传感器,使用集成芯片,采用单总线技术,其能够有效的减小外界的干扰,提高测量的精度,同时,它可以直接将被测温度转化成串行数字信号供微机处理,接口简单,使数据传输和处理简单化。部分功能电路的集成,使总体硬件设计更简洁,能有效地降低成本, 搭建电路和焊接电路时更快,调试也更方便简单化 。 热敏电阻的主要特点是:①灵敏度较高,其电阻温度系数要比金属大10~100倍以上,能检测出10-6℃的温度变化;②工作温度范围宽,常温器件适用于-55℃~315℃,高温器件适用温度高于315℃(目前最高可达到2000℃),低温器件适用于-273℃~55℃;③体积小,能够测量其他温度计无法测量的空隙、腔体及生物体内血管的温度;④使用方便,电阻值可在0.1~100kΩ间任意选择;⑤易加工成复杂的形状,可大批量生产;⑥稳定性好、过载能力强. 对比之后,根据实际的应用需求,本设计采用热敏电阻。 热敏电阻包括正温度系数(PTC)和负温度系数(NTC)热敏电阻,以及临界温度热敏电阻(CTR).本设计采用NTC热敏电阻。 NTC(Negative Temperature Coeff1Cient)是指随温度上升电阻呈指数关系减小、具有负温度系数的热敏电阻现象和材料.该材料是利用锰、铜、硅、鈷、铁、镍、锌等两种或两种以上的金属氧化物进行充分混合、成型、烧结等工艺而成的半导体陶瓷,可制成具有负温度系数(NTC)的热敏电阻.其电阻率和材料常数随材料成分比例、烧结气氛、烧结温度和结构状态不同而变化。它的测量范围一般为-10~+300℃,也可做到-200~+10℃,甚至可用于+300~+1200℃环境中作测温用。 3 温度测量显示系统硬件设计 温度采集系统的硬件部分是由温度采集模块、MCU控制器模块、温度显示模块组成。具体框图如下图3.1所示: 图3.1 系统硬件框图 3.1 温度采集模块硬件设计 该模块是根据热敏电阻阻值随温度变化而变化的特性,利用串联分压的特点,将热敏电阻所分的电压送到MC9S08AW60的模拟量输入端。具体电路原理如图3.2所示: 图3.2 温度采集模块电路原理图 该电路中R4为热敏电阻,其电压传输到MC9S08AW60单片机的模拟量输入端,即B0口。 3.2 MCU控制器模块设计 MC9S08AW60的外部工作电路如图3.3所示。Vddad和Vssad是MCU内部模拟电路的电源,给模数转换器(ADC)模块供电,VREFH和VREFL是模数转换的参考电压。Vdd和Vss是S08MCU主要的电源引脚,工作电压范围是2.7V~5.5V,在该电路中提供的是5V电压。在Vdd和Vss之间接10μF钽电容器和0.1μF的陶瓷旁路电容器,10μF钽电容器来为系统提供大容量的电荷存储,同时应在离MCU电源管脚尽可能近的地方安装一个0.1μF的陶瓷旁路电容器来抑制高频噪音。 图3.3 MC9S08AW60外部工作电路原理图 该电路为MCU控制器电路,其中,G0、G1、G2口分别与LCD1602的RS、R/W、E引脚连接;C0~C3口与LCD1602的DB0~DB3引脚连接;D0~D3口与LCD1602的DB4~DB7引脚连接。.B0口是模拟量输入端,用于输入热敏电阻的电压。 3.3 显示模块电路的设计 该模块是利用LCD1602液晶屏显示,显示的清晰度是关键,其Vee引脚作用是对比调整,原理是该引脚输入电压不同,调整度不同,所以采用电位器分压作为它的电压输入。Vss及K引脚分别是电源地、LCD背光电源负极,直接接地。Vcc及A引脚分别是电源、LCD背光电源正极,采用+5V电源供电。其电路原理图如图3.4所示: 图3.4 显示模块电路原理图 该电路中,LCD1602的RS、R/W、E引脚分别与MC9S08AW60的G0、G1、G2口连接;DB0~DB3引脚分别与MC9S08AW60的C0~C3口连接;DB4~DB7引脚与MC9S08AW60的D0~D3口连接。 4 温度测量显示系统软件设计 4.1微控制器程序的开发环境及语言 在前面,本设计已经选择了MC9S08AW60微控制器,飞思卡尔的微控制器有其专用的开发环境软件CodeWarrior IDE。同时,CodeWarrior IDE可以在不同的操作系统(包括Windows, Macintosh和Linux)下使用,而且在这些操作系统下的界面完全相同。本设计使用CodeWarrior6.3版,其界面如图4.1所示,只要在右边打开main.c窗口就可以进行程序编写。 图4.1 CodeWarrior6.3程序开发界面 在对微控制器进行编程时,可以用汇编语言或者C语言,甚至可以二者混合编程。CodeWarrior IDE支持汇编语言,C、C++和Java高级语言。C语言功能丰富、表达能力强、使用灵活方便、目标程序效率高、可移植性好,既具有高级语言的优点,又具有低级语言的许多特点,是国内外广泛使用的一种计算机语言。本设计使用C语言对微控制器进行编程,其能直接操作微控制器的硬件和接口,生成的机器代码也是高水平的。 4.2程序设计 本设计程序主要包括A/D转换模块程序、热敏电阻阻值和温度的非线性对性模块程序、温度显示模块程序,其总程序流程图如图4.2所示: 图4.2 系统程序总流程图 4.2.1 A/D转换原理及程序 传感器获得的信号由于是模拟信号,而CPU处理的是数字信号,故要经过模数转换。在MC9S08AW60芯片中集成了一个8位/10位精度可选的逐次逼近式ADC模块,使用时不需再扩展片外的A/D转换器。 逐次逼近式ADC是一个具有反馈回路的循环系统,主要部件有电压比较器、逐次逼近寄存器(SAR)、结果寄存器、数字/模拟转换器(Digital -To- Analog,DAC)和控制电路,如图4.3所示。逐次逼近式ADC用DAC的输出电压来驱动比较器的反相端。转换时,要用一个逐次逼近寄存器存放转换出来的数字量;转换结束时,将数字量送到结果寄存器。 图4.3 逐次逼近式ADC原理图 逐次逼近ADC原理是:首先设置SAR中的最高位为1,其余位为0,经D/A转换器转换成模拟电压VO,然后将VO与输入电压Vi在电压比较器中进行比较。如果Vi≥VO,则置1保留,并使下一位置1。如果Vi<VO,则这一位给予清除,然后使下一位置1。按上述方法对次高位进行转换、比较、判断,决定次高位应取1还是0。重复上述过程,直到确定SAR最低位为止。这时控制电路送出一个转换结束标志信号,这个信号将SAR中的数字量送入结果寄存器供CPU使用。 本设计中,由于在S08AW60芯片中的SCI数据寄存器只有8位,所以模数转换选择8位精度,以满足实际情况。针对振动信号高频多变,在ADC初始化中选择连续转换、高速转换和短采样时间。 C语言编写的MC9S08AW60微控制器中A/D转换的节选程序代码如下: /****************************************************\ * *函数名称:adc_init() * *作用:A/D模块初始化 \****************************************************/ void adc_init(void) { APCTL1=0X01; /*ADCP01引脚I/O无效,即B口0位*/ ADC1CFG=0X00; /*高速模式 8位精度,ADCK=总线频率*/ ADC1SC2=0X00; /*软件触发,比较功能禁止*/ ADC1SC1=0X00; /*禁止转换完成中断,单次转换*/ } /******************************************************\ * *函数名称:convert_begin() * *作用:启动A/D转换 \******************************************************/ unsigned int convert_begin(void) { unsigned int Vtemp; ADC1SC1=0X00; /* 写ADC1SC1启动转换*/ while(!(ADC1SC1_COCO)); /* 等待转换结束 */ Vtemp=ADC1RL; /*读取转换结果 */ return Vtemp; /* 返回结果 */ } 4.2.2热敏电阻阻值和温度的非线性对性模块原理及程序 热敏电阻的阻值温度特性曲线是一条指数曲线,非线性度较大,因此在使用时要进行线性化处理。可采用简单的查表法从电压值中查出相应的温度值。预先将一系列温度与电压对应值存贮到AW60微控制器程序存储器中的一个表内,当给定任意一个电压值时,即可通过查表得出所对应的温度值。当表中没有对应的电压值时,可找出电压值在表中的区域,然后在区间的相邻两点经线性插值得出对应温度值。存入表中点的多少影响温度值的精度。这里以选16个点为例,选8位模式A/D可转换结果范围是0~255,因此每两个点的间隔是16。使用插值算法如下: (4.1) 式中:——当前温度; ——当前温度的A/D转换值; ,——相邻点的温度值; ,——相邻点的A/D转换值; 当A/D转换结果在区间0~16或240~255时,不再计算,直接按温度值79℃或-40℃处理。 C语言编写的获得温度值的节选程序代码如下: /******************************************************\ * *函数名称: GetTemperature() * *作用:查表及插值程序得到温度值 \******************************************************/ signed int GetTemperature(int Value) { signed int T; int i; if(Value<= V_T_table[0][1]) T=V_T_table[1][1]; /* 当A/D转换值在0~16时,按79摄氏度赋值 */ else if(Value>= V_T_table[0][15]) T=V_T_table[1][15]; /* 当A/D转换值在240~255时,按-40摄氏度赋值 */ else { for(i=1;i<=14;i++) { if(Value== V_T_table[0][i]) /* 表中是否有值 */ { T=V_T_table[1][i]; /* 有值,赋值给T */ break; } else if((Value> V_T_table[0][i])&&(Value< V_T_table[0][i+1])) { T=((V_T_table[1][i+1]-V_T_table[1][i])*100)/16; T=T*(Value-V_T_table[0][i]); /* 没有,找到区间并插值 */ T=V_T_table[1][i]+T/100; break; } } } return T; /* 返回温度值T */ } 4.2.3 温度显示模块程序 LCD1602采用+5V电压驱动,其数据接口和读写控制引脚与MC9S08AW60单片机的I/O口直接相连。MC9S08AW60单片机将采集到的模拟电压值经过A/D转换后,查表得到温度值,通过I/O口传输给LCD1602显示。 C语言编写的温度值显示的节选程序代码如下: /******************************************************\ * *函数名称:LCD1602_init() * *作用LCD1602初始化 \******************************************************/ void LCD1602_init(void) { LCD1602_DB(0x08 ,0x03); /*显示模式 8位总线 双行显示 5*7点阵*/ RS_RW_E_init(); LCD1602_DB(0x04 ,0x01); /*光标移动 每输入一次该指令 光标向右移一格 整体画面不滚动*/ RS_RW_E_init(); LCD1602_DB(0x0C ,0x00); /* 屏幕开关 打开显示屏 不显示光标 不闪烁 */ RS_RW_E_init(); LCD1602_DB(0x06 ,0x00); //输入方式 RS_RW_E_init(); LCD1602_DB(0x01 ,0x00); //清屏 RS_RW_E_init(); } /******************************************************\ * *函数名称:LCD1602_display() * *作用LCD1602显示 \******************************************************/ void LCD1602_display(void) { if(neg_flag) /* 如果是负,最高位显示-*/ { LCD1602_DB(0x00,0x08); /*需要显示的字符的地址*/ RS_RW_E_init(); LCD1602_write_dat(0x0d,0x02); } else /* 如果是正,最高位显示+*/ { LCD1602_DB(0x00,0x08); /*需要显示的字符的地址*/ RS_RW_E_init(); LCD1602_write_dat(0x0b,0x02); } LCD1602_DB(0x01,0x08); /*需要显示的字符的地址*/ RS_RW_E_init(); LCD1602_write_dat(Disp_Value[0][s],Disp_Value[1][s]); LCD1602_DB(0x02,0x08); /*需要显示的字符的地址*/ RS_RW_E_init(); LCD1602_write_dat(Disp_Value[0][g],Disp_Value[1][g]); } 27 总结 硬件方面。选择硬件,要比较同类产品的稳定性、功耗、体积、价格等,另外还要符合设计的全部要求。在显示方案上,利用LCD1602显示,程序简单,在硬件电路的设计方面,用Protel绘制电路图时要标明元件的大小,有些封装元件要标明名称和封装。 其次,软件方面。把程序分块编写能够有效地提高正确性和编程效率。 通过本次实验,我学习了很多关于S08AW60的知识,并能通过所学设计一款基于S08AW60的温度测量显示系统,虽然有很多不足,也有很多不理解的地方,但是通过学习和讨论,一一得到了解决,受益匪浅。 参考文献 [1] 王威.嵌入式微控制器S08AW原理与实践[M].北京:北京航空航天大学出版社,2009 [2] 陈杰. 传感器与检测技术[M].北京:高教出版社,2004 [3] 邵贝贝. 龚光华.单片机认识与实践[M].北京:北京航空航天大学出版社,2006 [4] 阎石.数字电子技术基础(第三版). 北京:高等教育出版社,1989 [5] 沈兰荪.数据采集与处理[M]北京:能源出版社,1987 [6] 沙占友、王彦朋、孟志永.单片机外围电路设计.电子工业出版社,2003 [7] 谢宜仁.单片机实用技术问答. 人民邮电出版社,2003 [8] 孙传友、汉泽西.测控系统原理与设计.北京航空航天大学出版社,2002 [9] 章吉良,周勇,戴旭涵等.微传感器原理、技术及应用[M].上海:上海交通大学出版社,2005 附录A 温度采集与显示程序 /*****************************************************\ * *文件名Temprature_LCD1602.c * *MCU:MC9S08AW60 * *调试环境:CodeWarrior v6.3 * *日期:2010.12 \****************************************************/ #include <hidef.h> /* for EnableInterrupts macro */ #include "derivative.h" /* include peripheral declarations */ const unsigned char Disp_Value[2][10]={{0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09}, {0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03,0x03}} ; /*存放显示段码*/ const signed int V_T_table[2][17]={{0,16,32,48,64,80,96,112,128,144,160,176,192,208,224,240,255}, {0,79,56,43,34,27,21,15,10,5,-1,-6,-11,-18,-26,-40,0} /*存放A/D转换值和温度值的表*/ } ; #define LCD1602_D03_PTB03 PTCD /*1602液晶屏数据接口低4位接C口低4位*/ #define LCD1602_D47_PTD03 PTDD /*1602液晶屏数据接口高4位接D口低4位*/ #define LCD1602_RS PTGD_PTGD0 /*1602液晶屏数据选择接口接G口0位*/ #define LCD1602_RW PTGD_PTGD1 /*1602液晶屏读写选择接口接G口1位*/ #define LCD1602_E PTGD_PTGD2 /*1602液晶屏信号使能接口接G口2位*/ signed int Temperature; /*温度*/ char neg_flag=0; /*温度正负标志,正时为0,负时为1*/ int s,g; /*温度十位,个位*/ unsigned int adc_value; /*通道电压值*/ //***********************函数声明**************************// void data_deal(void); /*数据处理程序*/ void adc_init(void) ; /*ADC初始化程序*/ signed int GetTemperature(int Value); /*查表得到温度程序*/ unsigned int convert_begin(void); /*启动转换*/ void delay40us(int count); /*LCD显示延时程序*/ void RS_RW_E_init(void); /*LCD1602控制程序*/ void LCD1602_DB(char x ,char y); /*LCD1602数据接口*/ void LCD1602_init(void); /*LCD1602数据接口*/ void LCD1602_write_dat(char x,char y); /*写数据程序*/ void LCD1602_display(void); /*LCD1602显示程序*/ void PORT_init(void) ; /*I/O口初始化程序*/ //***********************************************************// /***************************************************\ * *函数名称:delay40us() * *作用:延时 \***************************************************/ void delay40us(int count) { int i; for(i=0;i<count;i++) { __RESET_WATCHDOG(); } } /****************************************************\ * *函数名称:adc_init() * *作用:A/D模块初始化 \****************************************************/ void adc_init(void) { APCTL1=0X01; /*ADCP01引脚I/O无效,即B口0位*/ ADC1CFG=0X00; /*高速模式 8位精度,ADCK=总线频率*/ ADC1SC2=0X00; /*软件触发,比较功能禁止*/ ADC1SC1=0X00; /*禁止转换完成中断,单次转换*/ } /******************************************************\ * *函数名称:convert_begin() * *作用:启动A/D转换 \******************************************************/ unsigned int convert_begin(void) { unsigned int Vtemp; ADC1SC1=0X00; /* 写ADC1SC1启动转换*/ while(!(ADC1SC1_COCO)); /* 等待转换结束 */ Vtemp=ADC1RL; /*读取转换结果 */ return Vtemp; /* 返回结果 */ } /******************************************************\ * *函数名称: GetTemperature() * *作用:查表及插值程序得到温度值 \******************************************************/ signed int GetTemperature(int Value) { signed int T; int i; if(Value<= V_T_table[0][1]) T=V_T_table[1][1]; /* 当A/D转换值在0~16时,按79摄氏度赋值 */ else if(Value>= V_T_table[0][15]) T=V_T_table[1][15]; /* 当A/D转换值在240~255时,按-40摄氏度赋值 */ else { for(i=1;i<=14;i++) { if(Value== V_T_table[0][i]) /* 表中是否有值 */ { T=V_T_table[1][i]; /* 有值,赋值给T */ break; } else if((Value> V_T_table[0][i])&&(Value< V_T_table[0][i+1])) { T=((V_T_table[1][i+1]-V_T_table[1][i])*100)/16; T=T*(Value-V_T_table[0][i]); /* 没有,找到区间并插值 */ T=V_T_table[1][i]+T/100; break; } } } return T; /* 返回温度值T */ } /******************************************************\ * *函数名称:data_deal() * *作用:实现十位,个位的分离 \******************************************************/ void data_deal(void) { if(Temperature<0) /* 温度为负 */ { neg_flag=1; /* neg_flag为1*/ Temperature=-Temperature; /* 取正*/ } else neg_flag=0; s= Temperature/10; /* 分离十位*/ g= Temperature-s*10; /* 分离个位*/ } /******************************************************\ * *函数名称:RS_RW_E_init() * *作用:LCD1602控制 \******************************************************/
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 学术论文 > 毕业论文/毕业设计

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服