当前位置:首页 >> 电力/水利 >>

课题一NTC热敏电阻的温度测量和控制系统


2011 年暑期电子设计大赛课题一
基于 NTC 热敏电阻的温度测量与控制系统的设计

学生姓名 院系名称 专业名称

杜衡、向奇林、刘露平 物理与电子工程学院 电子信息工程

班级 指导老师

2008 级六班

完成时间

1

> 基于 NTC 热敏电阻的温度测量与控制系统设计
学生姓名:杜恒、向奇林、刘路平 指导老师:

内容摘要:
本文叙述了用单片机作为控制器,用 NTC 热敏电阻制作的温度传感器实现 温度变化到电压变化后通过仪用放大器放大后通过 AD 转换再将数据送给单片机 处理后用 LED 显示出来实现温度测量, 并可利用单片机控制蜂鸣器发声和八个发 光二极管亮灭来实现报警, 同时还可以通过单片机控制水泥电阻给热敏电阻加热 来实现温度控制的温度测量和控制系统的设计。 该系统使用单片机开发板作为控 制系统, 而将温度传感器和加热器制作在单独一块板子上,工作时将两块板子连 接起来使用。由于单片机开发板上已经有了按键、LED 数码管、蜂鸣器以及 AD 等,因此可以完全满足控制系统的需求。单片机可以用 USB 供电,而另外一块板 子可以用实验室的直流电源作为供电系。 本文最后附带了该系统的 c51 程序,可以方便其他人员阅读以及在此基础 上进行修改,使系统功能更加完善。实验表明该系统能够实验温度的测量、温度 报警、温度查询、温度的控制等功能,完全满足该课题的基本要求和扩展要求。 关键词:单片机、NTC 温度传感器、水泥电阻加热器

2

绪论 .................................................................................................................................................. 4 方案设计........................................................................................................................................... 4 理论分析................................................................................................................................... 4 系统总体方案的设计及其原理概述原理图 ........................................................................... 5 系统各个模块的方案论证与设计 ................................................................................................... 6 系统温度采集电路的设计 ....................................................................................................... 6 信号调理电路的原理与设计 ................................................................................................... 7 温度控制电路的设计............................................................................................................... 9 脉宽调制的基本原理简介 ............................................................................................... 9 温度控制电路的原理与电路的设计 ............................................................................... 9 报警电路的设计..................................................................................................................... 10 报警电路的原理与电路的设计 ..................................................................................... 10 控制电路的原理与设计 ......................................................................................................... 11 AD0804 的采样原理及与单片机的连接方法 .............................................................. 11 LED 显示电路的原理及与单片机的连接方法 ............................................................ 11 简易键盘的扫描原理及与单片机的连接方法 ............................................................. 12 系统软件的设计..................................................................................................................... 12 测试数据的性化处理 ..................................................................................................... 12 系统流程图..................................................................................................................... 13 系统性能测试与分析测试............................................................................................................. 16 测试仪器与设备..................................................................................................................... 16 测试方案与结果..................................................................................................................... 16 结论 ................................................................................................................................................ 17 致谢......................................................................................................................................... 17 参考文献................................................................................................................................. 17 附录......................................................................................................................................... 18

3

绪论
随着时代的进步,温度计在日常生产生活和工农业领域发挥越来越重要的 作用, 简单的温度计能够满足人们日常生产生活需要,但在一些工农业生产领域 不仅要求能准确测量温度并且要求能够进行温度报警和温度的控制, 因此在简单 的温度计往往不能满足人们的要求。 利用单片机作为控制系统的 NTC 温敏电阻温 度测量和控制系统更能符合工农业生产领域的需求。 该系统不能能进行温度的测 量并且将温度通过 LED 数码管显示出来使读取更加方便, 该系统还能设定温度上 下限实现声光报警, 并且该系统还能对温度进行控制,因此在使用和功能上都比 传统的温度计优越。 该系统可以用在需要对温度要求比较精密的环境中,可以利 用该系统的精确温度测量、报警和温度控制功能来保证生产过程的顺利进行。

方案设计
理论分析
根据任务要求,要求制作一个基于 NTC 热敏电阻的温度测量和控制系统。 测量范围为 0-100 摄氏度。测量精度为+—1 摄氏度,能够记录 24 小时内每隔三 十分钟温度值,并能够用数码管回调固定时刻的温度值,能够显示 24 小时内的 温度平均值、最大值、最小值、和最大温差,具有报警功能当温度超过设定阈值 时能够报警 (要求有 1 摄氏度的回差) 。在扩展部分要求制作一个温度控制元件, 能够用 LED 显示设定温度值和实际测量值,设定温度范围为:40——60 摄氏度。 并要求采用适当的方法, 当设定温度或者环境温度突变时,减小系统的调节时间 和超调量,温度控制的静态误差<=0.2 摄氏度。 分析任务要求,该系统要用 NTC 温敏电阻作为测温元件,NTC 热敏电阻是 一种负温度特性的热敏电阻,其阻值随温度的变化曲线如下所示:

4

图表 1

由图可知,NTC 的阻值随温度的上升而下降,其阻值和温度呈非线性特性, 因此必须采用一定的方法对曲线进行线性化处理。 其测量原理是利用通过测量其 阻值, 通过其温度特性曲线便可求的环境温度。但因为温度不便于测量且不便于 其他电路处理。 通常是将电阻的变化转化为电压的变化通过测量电压变化测得温 度的变化。 由于采集到的电压信号是模拟信号,不能被数字系统处理,因此必须通过 AD 转换器, 将模拟信号转换成数字信号。 一般 AD 转换器的基准电压要求为 2.5v, 而采集到的电压信号很微弱,必需经过放大后才能送给 AD 转换器,因此在系统 中还必须有信号放大的信号调理电路。 该系统要求具有报警和控温功能,因此必须有报警装置和控温元件, 报警装置可以蜂鸣器和发光二极管来实现。 而控温可以制作一个加热器作为控温 元件, 系统要求能采用适当的方法来实现改变系统的超调量和调节时间,因此可 以采用脉冲宽度调制来实现。报警装置和控温装置可以通过三极管来驱动。 该系统应该有一个控制器,用以控制温度的显示报警和温度控制等功能。 该控制器可以采用单片机,FPGA,或者 DSP 来实现。

系统总体方案的设计及其原理概述原理图
根据以上分析可知,该系统应该包括用 NTC 热敏电阻制作的温度传感器, 对传感器信号放大的信号调理电路,加热器,显示电路,报警电路,按键和控制 器组成。由于单片机作为控制器价格便宜,控制性能好,电路方便,已能完全满 足该系统的要求,因此综合考虑用单片机作为该系统的控制器。 该系统通过 NTC 热敏电阻制作的传感器采集温度,将采集到的值送给单片
5

机处理后通过 LED 显示出来, 并可将处理后的值与设定的温度值进行比较看是否 超过设定范围来实现报警。在控制温度模式下,可以通过单片机控制加热器来加 热,实现温度控制。系统原理图如下:
LCD 显示电路

NUC140 矩阵键盘 电 机 温 度 采 集 电 路 信 号 调 理 电 路

系统原理图

系统各个模块的方案论证与设计
系统温度采集电路的设计
温度采集电路主要由用 NTC 热敏电阻制作的温度传感器来实现,而 NTC 测 温原理主要是基于基于将 NTC 阻值随温度变化转换为电压变化来实现。将 NTC 热敏电阻值变换转换为电压的变化有以下几种方案。 方案一:采用恒流源给热敏电阻供电,由于通过电阻的电流恒定,因此只 要测出器两端的电压就可以测出其阻值。 该方案电路设计简单, 测量也方便实现, 但对恒流源要求较高,且抗干扰能力较差。 方案二:采用差动电桥进行测量。

6

图表 2

VCC 经过稳压二极管后电压稳定值为 2.5V 由电桥平衡条件可知,当 R2/R3=R4/R5 时电桥平衡,此时 V1 和 V2 点的压 差为零。由于 R2=R3,因此在温度为零时,可以调节 R5 时 R5=R4,使电桥平衡, 其输出为零。当温度上升时,R4 阻值减小,当温度变化一百摄氏度时,热敏电 阻的变化范围大概为 1K. 因此可以粗略的估算电桥输出电压的变化值为 2.5*(4.7/24.7-3.7/23.7) =0.0854V. 该电路设计复杂,因为采用差动电桥,所以电路抗干扰能力增强,能有效 抑制电源波动对电路的影响。 对比上面两种方案,第二种方案虽然电路复杂但能有效抑制干扰信号,因 此采用第二种方案。

信号调理电路的原理与设计
由于从电桥出来的信号很微弱,因此需要通过运算放大器放大后才能经过 AD 转换。 方案一:采用单运放组成的运算放大器进行微弱信号的放大。其原理图如 下:

7

图表 3

为了使运放对称,因此要求 R10=R7,R11=R12.放大倍数 A=R12/R10. 该电路简单,放大倍数可以通过调节 R12 来调节,但该调节会使运放不对 称,因此需要同时调节 R12 和 R11 来实现。 方案二:采用仪用放大器来实现放大,仪用放大器的原理图如下。

信号调理电路 1

仪用放大器的放大倍数可以由以下公式计算得知: A=-R11/R7(1+2*R8/R6) 由于 R6 可调,因此可以利用调节放大倍数。由于信号采集电路采集到的最 大电压差为 0.0854V.而 AD 的基准电压为 2.5V, 所以要求信号调理电路的最大输 出为 2.5V。而信号采集电路的最大输出为 0.0845v,所以要求信号调理电路的放 大倍数约为 30 倍。该电路由于可以调节 R6 来调节放大倍数,由于调节 R6 不会 影响电路的对称性因此调节起来方便。 对比上述两种电路,第一种结构简单但调节起来不方便,而第二种调节起

8

来方便,且易于小信号的采集,因此选用第二种方案。

温度控制电路的设计 脉宽调制的基本原理简介
在脉宽调制有两种方案,第一种是固定低电平时间,而另外一种是固定周 期。先对固定周期的脉宽调制原理做如下简介。 在固定周期的脉宽调制中,设一个周期的时间为一秒,将一个周期平分成 一百份。每一份为 10 个毫秒,在一个周期内的份数由一个变量 P 控制,而每一 份的时间用一个定时器来控制,当每次中断来时 P 加 1,当 P 到一百十把 P 赋值 成 0,开始下一个周期。而在温度控制程序中,另外设定一个变量 M,每次 M 也加 一,M 到一百十也赋值为零,并且每次 M 和 P 进行比较,当 M<P 时便可以让温度 元件开始工作,于是开始控温。要实现温度突变时改变超调量,可以将温度和设 定的温度进行比较,当温度差值大于某个范围时,可以改变 P 的初值,这样就可 以进行迅速加热, 达到快熟调节温度。 当温度和设定值接近时可以将 P 的值减小, 从而缓慢加热。

温度控制电路的原理与电路的设计
该系统要求具有温度控制功能,因此可以制作一个控温元件来给热敏电阻 加热来实现温度控制。 方案一:以 LTC1923PWM 双极性电流控制器和大功率 MOSFET 构成的半导体 热制冷器(TEC)驱动模块。该方案制作的热制冷器可制冷也可制热,但价格相 对较高。 方案二:该系统通过水泥电阻来给热敏电阻加热来实现温度控制,水泥电 阻需要通过一个功率三极管来驱动,为了使受热均匀,系统通过两个水泥电阻来 给热敏加热。其驱动电路图如下:

功率三极管的基极和单片机的某个 I/O 口连接,当该 I/O 口为 1 时功率三 极管导通, 水泥电阻开始加热, 当 I/O 为零时, 三极管截止, 水泥电阻停止加热。

9

因此在程序中可以通过给 I/O 口送 1 和零来控制水泥电阻加热和停止加热, 从而 实现温度控制。该方案简单,元件价格便宜。 对比上面两种方案,鉴于第二种方案简单,元件价格低廉因此采用第二种 方案。

报警电路的设计 报警电路的原理与电路的设计
该系统的报警电路通过三极管驱动蜂鸣器发声和单片机 P1 口驱动八个发光 二极管发光来实现报警。 三极管驱动蜂鸣器和 P1 口驱动发光二极管电路如 下:

报警电路 1

蜂鸣器采用 NPN 三极管驱动,三极管的基极和单片机的 P2^3 相连。当 P2^3 为 1 时三极管截止蜂鸣器不发声,而当 P2^3 为 0 时,三极管导通,蜂鸣器发声。 八个发光二极管通过 P1 口驱动,当 P1 口全为 0 时,二极管发光。因此可以通过 使 P2^3 为 1 和让 P1 为零来让蜂鸣器响和发光二极管发光来实现报警。

10

控制电路的原理与设计 AD0804 的采样原理及与单片机的连接方法

AD 采样电路 1

AD 的片选功能和单片机的 P2^4 相连,当 P2^4 为低电平时 AD 选通。AD 的 读信号 RD 和写信号 WR 和单片机的 P3^6 和 P3^7 相连。由于 AD 采用的是直通方 式,当 P3^7 为 0 时启动 AD,开始转换数据。当 P3^6 为 1 时便可以读取 AD 转换 的数据。

LED 显示电路的原理及与单片机的连接方法
单片机通过一个锁存器来控制八个 LED 的位选,通过另外一个来控制八个 LED 的段选从而实现八位 LED 的动态扫描。其与单片机的连接方法如下。

LED 显示电路 1

11

两个锁存器的片选分别于单片机的 P2^6 和 P2^7 相连。与 P2^7 相连的锁存 器通过 P0 口给八位 LED 送位选码

简易键盘的扫描原理及与单片机的连接方法
该系统采用与单片机连接的简易键盘来实现来实现系统的按键功能。简易 键盘与单片机的连接方法如下:

简易键盘电路 1

四个简易按键分别于单片机的 P3^4,P3^5,P3^6,P3^7 相连。当键没有按 下时,与之相连的 I/O 口为 1,而当有按键按下时,与之相连的 I/O 口为 0,当 检测到某个 I/O 口为低电平时,表明该按键按下。

系统软件的设计 测试数据的线性化处理
由于温敏电阻的阻值随温度变化为非线性,因此应对数据进行线性化处理。 方案一:用硬件来实现非线性的校正。简单的非线性就是以奇制奇的方法, 将两只非线性的传感器接成差动的方式,他们的非线性误差以大小相等,极性相 反的方向变化,这样就可以获得较理性的输出特性曲线。 方案二:用软件来实现非线性校正。软件非线性校正可以采用一次软件插 值法来实现,插值法原理如下。

12

图表 4

在这次试验中可以先通过试验得到 AD 转换的值和对应的温度然后以 AD 值为横坐 标,温度值为纵坐标。将每个 AD 值和对应的温度制成表格,当采集到 AD 值时便 可以通过查表将对应的温度查询出来从而实现了线性化处理。

系统流程图

13

主程序

AD 转换程序

14

温度报警程序 1 滤波程序

15

显示程序

系统性能测试与分析测试
测试仪器与设备
测试器件:水银温度计 直流稳压电源 万用表

测试方案与结果
测试环境与结果: 将系统分别在 20 摄氏度的冷水中,室温下,50—60 设施度得温水中,和 80 摄氏度的热水中进行测试,测试结果如下。

16

结论
本文主要论述了基于 NTC 热敏电阻的温度测量和控制系统的设计。对整个 系统的核心做了介绍。 对系统的各个模块做了比较深入的研究,主要包括以下几 个方面。 1.对系统进行了方案的论证,进行了方案的讨论,并最终确定了系统=方 案。 2. 查找了系统上相关的芯片资料并仔细的阅读,并查阅了大量的相关文 献资料。理解各个芯片的工作原理,完成各个模块电路的设计,完成开题报告。 3.对系统的原理进行了讨论,对硬件部分各个模块进行充分的说明。 4.用 protel 完成了系统各个模块的原理图设计和 PCB 制作。 5.完成电路板的焊接,并排查焊接错误,检查系统电路。 6. 通过软件多核心板的各个模块进行了测试。 7. 对整个设计的过程,拟出简要的大纲,并完成详细的论文报告。修改 论文,完成最终定稿。

致谢
本论文是在实验室老师的指导下完成的,实验室在参加比赛过程中给了我 们极大的帮助和支持,并在我们共同努力下取得了一定的成绩。至此,我们要非 常感谢老师对我的帮助。 本次课题的完成也离不开实验室老师的指导,在这些过程中老师给了我们 极大的帮助, 他们的认真负责的态度和孜孜不倦的精神使我受益匪浅,从老师身 上学习到了很多专业知识,这对我们以后的工作有很大的帮助,在此,向实验室 老师表示深深的敬意,感谢他对我们的指导和帮助。

参考文献
【1】 【2】 【3】 黄贤武,郑筱霞 .传感器原理与应用. 电子科技大学出版社, 1995 年五月。 谭浩强.C 语言程序设计.清华大学出版社,2005 年七月。 白驹荇,雷晓平.电子科技大学出版社,2005 年九月。

17

附录
系统 PCB 电路图

图表 5

实验程序 #include<reg52.h> #define uint unsigned int #define uchar unsigned char /********************** 变 量 定 *************************************/ sbit heat=P2^2;//水泥电阻驱动使能 sbit beep=P2^3;//蜂鸣器使能 sbit dioLE=P2^5;//八位 LED 锁存器开关使能 sbit dula=P2^6;//LED 段选 sbit wela=P2^7;//LED 位选 sbit adcs=P2^4;//AD 片选 sbit add=P3^5;//加键 sbit sub=P3^4;//减键 sbit adrd=P3^7;//AD 读 sbit adwr=P3^6;//AD 写 uchar code LED_Segment[]={ //0-9 和摄氏度单位的段码 0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f,0x58}; uchar code LED_Segment1[]={//0-9 含小数点的段码 0xbf,0x86,0xdb,0xcf,0xe6, 0xed,0xfd,0x87,0xff,0xef};



18

uchar code temdata[75]={ 11,17,34,41,52,61,69,79,90,100,111,117,126,132,138,145,149,154, 160, 165,169,173,178,182,186,188,193,196,199,203,205,207,208,209,213 , 214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229 ,230,231,232,233,234,235,236,237,238,239, 240,241,242,243,244,245,246,247,248,249,250,251,252,253};//AD 转 换值 float code temtest[75]={5.5,6.0,7.3,8.1,9.0,10.0,11.0,12.0,14.1,15.0,16.0,17.0,1 8.0,19.0,20.0,21.0,22.0,23.0,24.0,25.0, 26.0,27.0,28.0,29.0,30.0,31.0,32.0,33.0,34.0,35.0,36.0,36.3,36. 9,37.5,39.1,39.4,39.8,40.1,40.6,41.0,41.4,41.7,42.5,42.8, 43.0,43.2,44.8,44.9,45.0,45.3,46.1,46.8,47.3,47.8,48.9,49.5,50. 3,51.0,51.7,52.3,52.9,53.5,54.1,54.8,55.6,56.0,58.3,59.0,59.8, 60.6,62.4,63.8,65.1,66.3,67.6 };//测试点温度值 /*float code slop[20]={ 2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5, 2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5,2.5};*/ //斜率 uint idata record[48]; uint TH=30*10,TL=20*10;//温度上下限报警设定初值 uchar LPFdata; uint temperature,max,min,average,dif; uchar flag; /********************** 函 数 声 *************************************/ uchar AD();//AD 转换子程序 void Delay(uchar z);//延时子程序 void Display(uint a);//数码管驱动显示子程序 void LPF();//数据滤波 void Data_temperature();//AD 采样数据转换为温度值 void Alarm();//温度报警 void Set_hitemperature();//设定最高报警温度 void Set_lotemperature();//设定最低报警温度 void Set_function(uchar a);//按键功能判定 void Disp_record();//显示记录温度值 void Set_tempreature();//温度控制设定 void Driveled(uchar wei,uchar duan); /********************** 主 函 *************************************/ void main() 明



19

{ // uchar flag=0; TMOD=0X11; TH0=0X4C; TL0=0; TH1=0XDC; TL1=0; EA=1; ET0=1; ET1=1; TR0=1; while(1) { //P1=0XFF; //dioLE=0; LPF();//将采集到的数据进行滤波 Data_temperature();//将滤波后的数据转换成温度值 Set_function(flag);//按键功能判定 //Data_temperature();//将滤波后的数据转换成温度值 Alarm();//调用报警程序当温度超过设定上下限时变报警 if(adwr==0)//按功能键切换工作状态 { Delay(5); if(adwr==0) { flag++; if(flag>5) { flag=0; } while(adwr==0); } } if(adrd==0)//OK 键 { Delay(5); if(adrd==0) { flag=0; while(adrd==0); } } if(flag==5)//当进入温度控制模式时启动定时器,PWM 控制加热 TR1=1;

20

else TR1=0; } } /********************** 延 *************************************/ void Delay(uchar z) { uchar x,y; for(y=10;y>0;y--) for(x=z;x>0;x--); } /**********************AD 采 *************************************/ uchar AD() { uchar value; adcs=0; //选通 AD 转换器片选 adwr=0; //AD 写入(主要是为了启动 AD 转换) Delay(1); adwr=1; P1=0xff; //读取 P1 口之前先给其写全 1 adrd=0; //AD 读使能 value=P1; //AD 数据读取赋给 P1 口 adrd=1; adcs=1; P1=0xff; return(value); } /********************** 数 码 *************************************/ void Display(uint a) { dula=0; //送温度值十位 P0=0xff; wela=1; P0=0xfe;// wela=0; P0=0; dula=1; P0=LED_Segment[a/100]; dula=0; Delay(10); 管 驱 动 显 示 函 数 时 函 数







21

dula=0;//送温度值个位,含小数点 P0=0xff; wela=1; P0=0xfd;// wela=0; P0=0; dula=1; P0=LED_Segment1[a/10%10]; dula=0; Delay(10); dula=0;//送温度值小数点位 P0=0xff; wela=1; P0=0xfb;// wela=0; P0=0; dula=1; P0=LED_Segment[a%10]; dula=0; Delay(10); dula=0;//送摄氏度单位 P0=0xff; wela=1; P0=0xf7;// wela=0; P0=0; dula=1; P0=LED_Segment[10]; dula=0; Delay(10); } /********************** 数 据 *************************************/ void LPF() { uchar temp[7],a; uchar i,j,k; for(i=0;i<=6;i++)//数据采集存储 { temp[i]=AD(); 滤 波 动 函 数

22

Delay(5); } for(j=0;j<=6;j++)//按小到大排序 { for(k=j;k<=6;k++) { if(temp[j]>=temp[k]) { a=temp[j]; temp[j]=temp[k]; temp[k]=a; } } } temp[0]=temp[6]=0;//去掉最大最小值 LPFdata=(temp[1]+temp[2]+temp[3]+temp[4]+temp[5])/5;// 求 平 均 值 } /**********************AD 转 换 值 转 温 度 值 *************************************/ void Data_temperature() { float b; uchar i; for(i=0;i<=74;i++) { if((LPFdata>=temdata[i])&(LPFdata<temdata[i+1])) { 函 数

b=temtest[i]+(LPFdata-temdata[i])*((temtest[i+1]-temtest[i])/(tem data[i+1]-temdata[i])); break; } } temperature=b*10;//强制转化为整形 } /********************** 温 度 报 *************************************/ void Alarm() { if((temperature>=TH)|(temperature<=TL)) { 警 函 数

23

//dioLE=1; P1=0; beep=0; } else { if((temperature<(TH-10))&(temperature>TL+10)) //回差 { P1=0xff; beep=1; } } } /***************************** 设 定 最 高 报 警 温 度 **********************************/ void Set_H() { Display(TH); if(add==0) { Delay(10); if(add==0) { TH=TH+10; } while(add==0);//防止按键重入 } if(sub==0) { Delay(10); if(sub==0) { TH=TH-10; } while(sub==0);//防止按键重入 } Driveled(0xef,0x76); //显示 H 标志 } /********************************************* 设 定 最 低报 警温 度 *****************************************/ void Set_L() { Display(TL); if(add==0)

24

{ Delay(10); if(add==0) { TL=TL+10; if(TL+30>=TH) { TL=TH-40;//最低报警温度应小于最高报警温度-4 } } while(add==0);//防止按键重入 } if(sub==0) Delay(10); if(sub==0) { TL=TL-10; } while(sub==0);//防止按键重入 Driveled(0xef,0x38);//显示“L”标志 } uchar p;//占空比控制 /********************************* 设 定 *****************************************/ uint set_value=400;//温度设定初值 40 摄氏度 void Set_tempreature() { if(add==0) { Delay(10); if(add==0) { set_value=set_value+10; } while(add==0);//防止按键重入 } if(sub==0) { Delay(10); if(sub==0) { set_value=set_value-10; }









25

while(sub==0);//防止按键重入 }

/* {

if((set_value-temperature)>100) p=100; } else { if((set_value-temperature)>50) p=50; else { if(set_value>temperature) p++; else p--; } }

*/ /* if(set_value>temperature) { if((set_value-temperature)>100) { p=100; } else { if((set_value-temperature)>50) { p=50; } else { p++; } } } else { p=0;

26

} */ if(set_value>temperature) { if((set_value-temperature)>=100) { p=200; } else if((set_value-temperature)>=80) { p=160; } else if((set_value-temperature)>=60) { p=120; } else if((set_value-temperature)>=40) { p=80; } else if((set_value-temperature)>=20) { p=40; } else if((set_value-temperature)>=10) { p=10; } else { p++; if(p>200) { p=200; } } } else p=0;

Display(temperature);//显示测定温度 dula=0; //显示设定温度 P0=0xff;

27

wela=1; P0=0xef; wela=0; P0=0; dula=1; P0=LED_Segment[set_value/100]; dula=0; Delay(10); dula=0;//送温度值个位,含小数点 P0=0xff; wela=1; P0=0xdf; wela=0; P0=0; dula=1; P0=LED_Segment1[set_value/10%10]; dula=0; Delay(10); dula=0; //送温度值小数位 P0=0xff; wela=1; P0=0xbf;// wela=0; P0=0; dula=1; P0=LED_Segment[set_value%10]; dula=0; Delay(10); dula=0;//送摄氏度单位 P0=0xff; wela=1; P0=0x7f; wela=0; P0=0; dula=1; P0=LED_Segment[10]; dula=0; Delay(10);

} void Driveled(uchar wei,uchar duan) {

28

dula=0; P0=0xff; wela=1; P0=wei; wela=0; P0=0; dula=1; P0=duan; dula=0; Delay(10); } uchar i; void Disp_record() { Display(record[i]);//显示记录值 Driveled(0xef,0x40);//显示Driveled(0xdf,LED_Segment[(i+1)/10]);//显示第 i 个值 Driveled(0xbf,LED_Segment[(i+1)%10]); if(add==0) Delay(5); if(add==0) { i++; if(i>47) i=0; } while(add==0); if(sub==0) Delay(5); if(sub==0) { i--; if(i==255) i=47; } while(sub==0); }

/************************* 显示平均温度,最大最小温度,最大温差 ******************************/ uchar ii; void Disp_cal()

29

{ if(add==0)//进入后按加键切换显示查看平均、最大最小、最大温差值 Delay(40); if(add==0) { ii++; if(ii>3) ii=0; }while(add==0); switch(ii) { case 0: Display(average); Driveled(0xef,0x40); Driveled(0xdf,0x40); Driveled(0xbf,0x40); break; case 1: Display(max); Driveled(0xef,0x1); Driveled(0xdf,0x1); Driveled(0xbf,0x1); break; case 2: Display(min); Driveled(0xef,0x8); Driveled(0xdf,0x8); Driveled(0xbf,0x8); break; case 3: Display(dif); Driveled(0xef,0x5e); Driveled(0xdf,0x06); Driveled(0xbf,0x71); break; } }

/********************************** 按 *****************************************/ void Set_function(uchar a) {











30

switch(a) { case 0: Display(temperature);break;//显示温度 case 1: Set_H();break;//设定最高报警温度 case 2: Set_L();break;//设定最低报警温度 case 3: Disp_record();break;//显示记录温度值 case 4: Disp_cal();break;//显示平均温度,最大最小值,最大温 差 case 5: Set_tempreature();break;//温度控制设定 default: a=0;break; } } /*******************************中断计时,30 分钟记录一次温度值 **************************/ uint a; uchar j; void timer0() interrupt 1 { uchar ii,k; uint sum; a++; TH0=0xee;//定时 50ms TL0=0; if(j==0) { record[0]=temperature; max=temperature; min=temperature; } if(a==200*10)//十秒 { a=0; j++; if(j>48) j=48; // *30

for(ii=47;ii>0;ii--) { record[ii]=record[ii-1];//记录数据移位 } record[0]=temperature;//最新值填入数组最前面 min=min<record[0]?min:record[0]; max=max>record[0]?max:record[0];

31

for(k=0;k<=j;k++) { sum=sum+record[k]; } average=sum/(j+1); sum=0; dif=max-min; } } /******************************* 中 断 计 时 , 脉 宽 调 制 **************************************/ uchar n; void timer1() interrupt 3 { TH1=0xff;//定时 10ms TL1=0xa3; n++; if(n>200) { n=0; } if(n>=p) { heat=0xff;//停止加热 } else { heat=0;//加热 }

}

32


相关文章:
基于单片机的温度控制器设计(热敏电阻)
课题一NTC热敏电阻的温度... 32页 免费 基于热敏电阻的温度检测... 42页 1...26 4 重庆科技学院 基于单片机的温度控制器设计 1 绪论 1.1 研究温度控制系统...
热敏电阻温度测量系统设计
把以单片机为核心,开发出来的各 种测量及控制系统作为测量产品的主要部分, 使...课题一NTC热敏电阻的温度... 32页 免费 项目2 温度测量—热敏电... 19页 ...
实验二十二 NTC热敏电阻温度特性实验
实验二十二 NTC 热敏电阻温度特性实验 一、实验目的:定性了解 NTC 热敏电阻的...一般适用于-50℃~300℃的低精 度测量温度补偿、 温度控制等各种电路中。 ...
ntc热敏电阻的应用
在电流接通的瞬间,必将产生一个很大的电流,这种浪涌 电流作用的时间虽短,但其...控制用 NTC 热敏电阻器产品概述 NTC 热敏电阻器给许多温度测量与控制设备提供...
利用NTC热敏电阻的计算体温方法
(二)温度换算的方法 由上述原理可知, 此次论文的一个关键部分在于, 如何根据热敏电阻的实时电阻值来计 算相应的环境温度。 让我们先来介绍下 NTC 热敏电阻的温度...
NTC热敏电阻高精度温度计程序
NTC 热敏电阻高精度温度计程序 [日期:2009-08-17 ] [来源:东哥单片机学习网 作者:admin] [字体:大中小] (投递新闻) STC12C5406AD 晶振频率为 12MHz 本程序...
NTC负温度系数热敏电阻
NTC温度系数热敏电阻热敏电阻分为三类: 正温度系数热敏电阻 (PTC) 负温度...图 3-7 温度控制器电路 ⑵ 电路原理分析 由测量电桥、测量放大器、滞回比较...
NTC热敏电阻的阻值计算方法
(二)温度换算的方法 由上述原理可知, 此次论文的一个关键部分在于, 如何根据热敏电阻的实时电阻值来计 算相应的环境温度。 让我们先来介绍下 NTC 热敏电阻的温度...
NTC热敏电阻在电动车控制器中应用
NTC 热敏电阻在电动车控制器中应用文章出处:萨博沃顿 发表时间:2014-07-12 12:35:00【大中小】 大功率电动车控制器因为输出电流大,功率大,工作一段时间后温度...
基于热敏电阻的温度检测装置
课题用一种基于单片机的数据采集系统方案, 该方案根据热敏电阻温度变化而 ...按照温度系数不同分为正温度系数热敏电阻器(PTC)和负温度系数热敏电阻器(NTC) ...
更多相关标签:
ntc热敏电阻测量 | ntc热敏电阻怎么测量 | ntc热敏电阻 | ntc热敏电阻参数 | ntc热敏电阻型号 | ntc热敏电阻阻值表 | ntc热敏电阻计算公式 | ntc热敏电阻测温程序 |