LED数显温度控制器设计方案.doc

上传人:scccc 文档编号:13588536 上传时间:2022-01-19 格式:DOC 页数:26 大小:474.50KB
返回 下载 相关 举报
LED数显温度控制器设计方案.doc_第1页
第1页 / 共26页
LED数显温度控制器设计方案.doc_第2页
第2页 / 共26页
LED数显温度控制器设计方案.doc_第3页
第3页 / 共26页
亲,该文档总共26页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《LED数显温度控制器设计方案.doc》由会员分享,可在线阅读,更多相关《LED数显温度控制器设计方案.doc(26页珍藏版)》请在三一文库上搜索。

1、LED数显温度控制器设计方案1引言1.1研究的背景与意义无论是在日常生活中,还是在工业生产过程中温度控制都起着非常重要的作用。本次 毕业设计选题的目的主要是让生活在信息发达时代的我们,把所学的知识应用于生活生产 当中,熟练掌握系统总体设计的流程,方案的论证,选择,实施与完善。随着社会经济的 快速发展,现在越来越多的生产部门及生产环节对温度控制精度的可靠性和稳定性等有了 更高的要求。由于苛刻的生产环节对温度要求较高,而传统的温度控制器控制精度却普遍 不高,已经不能满足其要求。当今社会,温度是工业对象中的一个重要的被控参数,它的测量与控制系统在生产与 生活的各个领域中扮演着越来越重要的角色,大到工

2、业炼金,环境检测,分离物质,机房 电力,粮仓,冻库,卫生医疗等方面,小到家庭空调,冰箱,电饭煲,太阳能热水器等方 面都得到了广泛的应用,温度控制系统的广泛应用也使得这方面研究意义非常的重要。 1.2国外研究现状虽然温度控制系统在国各行各业己经得到广泛应用,但从国生产的温度控制器来说, 总体发展水平仍然不高,同美国、日本、德国等先进发达国家相比,仍有着较大的差距。 20世纪70年代,国外就对温度控制技术有研究。先是采用模拟式的组合仪表,采集现场信 息并进行指示、记录和控制。80年代末就出现了分布式控制系统。现在正在开发和研制计 算机数据采集控制系统的多因子综合控制系统。现在世界各国的温度测控技术

3、发展很快, 一些国家在实现自动化的基础上正向着完全自动化、无人化的方向发展。我国研究温度测 控技术较晚,20世纪80年代开始,在吸收发达国家温度测控技术的基础上,我国工程技术 人员才掌握了温度室微机控制技术,这项技术仅限于对温度的单项环境因子的控制。我国 温度测控设施的计算机应用,在总体上正从消化吸收、简单应用阶段过渡和发展。在技术 上,以单片机控制的单参数单回路系统居多,尚无真正意义上的多参数综合控制系统,与 发达国家相比,存在较大差距。2设计的容及性能指标本设计主要是介绍了单片机控制下的温度报警系统,详细介绍了其硬件和软件设计, 并对其各功能模块做了详细介绍,其主要功能和指标如下:单片机实

4、时检测温度传感器 DS18B20勺状态,并将DS18820得到的数据进行处理。上电后数码管显示当前的环境温度, 通过按键可设置高低温报警值,当检测到的温度高于设置的报警值的时候,蜂鸣器报警同 时报警灯闪烁,温度检测精确到0.1度。并具有掉电保存功能,数据保存在单片机部EEPOM 中,进入设置界面后如果没有键按下系统会在 15秒后自动退出设置界面。3 系统方案比较、设计与论证该系统主要由温度测量和温度设置及系统状态显示三部分电路组成,下面介绍实现此 系统功能的方案。3.1 主控制器模块采用STC89C52单片机作为整个系统的核心,用其控制行进中的小车,以实现其既定 的性能指标。充分分析我们的系统

5、,其关键在于实现小车的自动控制,而在这一点上,单 片机就显现出来它的优势控制简单、方便、快捷。这样一来,单片机就可以充分发挥 其资源丰富、有较为强大的控制功能及可位寻址操作功能、价格低廉等优点。STC89C5单片机具有功能强大的位操作指令,I/O 口均可按位寻址,程序空间多达 8K,对于本设计也 绰绰有余,更可贵的是STC89C5洋片机价格非常低廉。3.2 温度测量采用数字温度芯片DS18B2 0测量实际温度,输出信号全数字化。便于单片机处理及控 制,省去传统的测温方法的很多外围电路。且该芯片的物理化学性很稳定,它能用做工业 测温元件,此元件线形较好。在 0100 摄氏度时,最大线形偏差小于

6、1摄氏度。 DS18B20 的最大特点之一采用了单总线的数据传输,由数字温度计 DS18B2和微控制器STC89C5构 成的温度测量装置 , 它直接输出温度的数字信号 ,可直接与计算机连接。这样 , 测温系统的 结构就比较简单 ,体积也不大。采用 51单片机控制,软件编程的自由度大,可通过编程实 现各种各样的算术算法和逻辑控制,而且体积小,硬件实现简单,安装方便。既可以单独 对多DS18B2控制工作,还可以与PC机通信上传数据,另外AT89C5在工业控制上也有着 广泛的应用,编程技术及外围功能电路的配合使用都很成熟。3.3 设置温度采用键盘输入设置温度,键盘则可以用 4个按键,一个复位键,一个

7、功能设定键,一 个加减一个减键。四个键比较常用,而且用到的接口得到了极好的利用,仅需要4个接口。3.4 显示模块用LED数码管实现数值的显示,LED数码管显示相对来说比较直观、明亮,可以用动 态显示和静态显示两种方法编程实现,数码管由于显示速度快,使用简单,显示效果简洁 明了而得到了广泛应用。LCD虽然其显示清晰,显示容丰富、清晰,显示信息量大,使用 方便,显示快速。但对于此系统我们不需要显示丰富的容,而且LCD液晶价格贵,因此我们选择用数码管显示。3.5 电源选取采用干电池供电。干电池价格低廉、携带方便、运用灵活,经过实验验证系统工作时,单片机、传感器的工作电压稳定能够满足系统的要求,而且电

8、池更换方便。3.6 报警设备的论证与选择采用声、光同时报警,既可以利用不同颜色的等对应不同的状态判别出此时的温度 处于的状况,又可以使工作人员在一定距离围监测到温度异常进行及时处理。4系统器件选择.温度传感器的选择由于传统的热敏电阻等测温元件测出的一般都是电压,再转换成对应的温度,需要比较多的外部元件支持,且硬件电路复杂,制作成本相对较高。这里采用DALLAS公司的数字温度传感器DS18B20乍为测温元件。DALLASDS1820图3传感器电路图图2外部封装形式5硬件实现及单元电路设计5.1主控制模块主控制最系统电路如图4所示。 .ST一LT图4单片主控电路5.2显示模块电路显示采用四位数码管

9、显示,当位选打开时,送入相应的段码,则相应的数码管打开, 关掉位选,打开另一个位选,送入相应的段码,则数码管打开,而每次打开关掉相应的位 选时,时间间隔低于20ms从人类视觉的角度上看,就仿佛是全部数码管同时显示的一样 显示电路如图5二Jaaaaa u a j 0 干DS1SMOO+_1df-Vj9 图5数码管显示5.3数码管显示驱动电路三极管8550来驱动4位数码管,不仅简单,而且价格便宜 -匸 *图6驱动电路5.4温度传感器(DS18B20)电路5.4.1 DS18B20 基本介绍DS18B20是美国DALLAS半导体公司推出的第一片支持“一线总线”接口的温度传感 器,它具有微型化、低功耗

10、、高性能、抗干扰能力强、易配微处理器等优点,可直接将温 度转化成串行数字信号处理器处理。DS18B20进行精确的温度转换,I/O线必须保证在温度转换期间提供足够的能量,由于每个 DS18B20在温度转换期间工作电流达到1mA当几 个温度传感器挂在同一根I/O线上进行多点测温时,只靠 4.7K上拉电阻就无法提供足够 的能量,会造成无法转换温度或温度误差极大。因此,下图电路只适应于单一温度传感器测温情况下使用,不适宜采用电池供电系统 中。并且工作电源VCC必须保证在5V,当电源电压下降时,寄生电源能够汲取的能量也降 低,会使温度误差变大。U2图7温度传感器电路引脚图542 DS18B20控制方法D

11、S18B2C有六条控制命令:温度转换44H启动DS18B20进行温度转换读暂存器BEH读暂存器9个字节容写暂存器4EH将数据写入暂存器的TH TL字节 复制暂存器48H把暂存器的TH TL字节写到E2RAM中 重新调E2RAM B8H把E2RAM中的TH TL字节写到暂存器 TH TL字节 读电源供电方式B4H启动DS18B20发送电源供电方式的信号给主 CPU供电方式DS18B2可以采用两种方式供电,一种是采用电源供电方式,此时DS18B2的1脚接地, 2脚作为信号线,3脚接电源。另一种是寄生电源供电方式,如图3.1所示单片机端口接单线总线,为保证在有效的 DS18B2时钟周期提供足够的电流

12、,可用一个三极管来完成对总 线的上拉。本设计采用电源供电方式,P2.2 口接单线总线为保证在有效的 DS18B2时钟周 期提供足够的电流,可用一个上拉电阻和STC89C5的 P2.2来完成对总线的上拉。当DS18B20 处于写存储器操作和温度 A/D变换操作时,总线上必须有强的上拉,上拉开启时间最大为 10卩s。采用寄生电源供电方式是 VDD和GND端均接地。由于单线制只有一根线,因此发 送接收口必须是三状态的。主机控制 DS18B2完成温度转换必须经过3个步骤:。初始化。ROM操作指令。存储器操作指令5.6 蜂鸣器、发光二极管报警电路电路如图8主要是用来设定温度报警温度的、有高温和低温报警图

13、8蜂鸣器、发光二极管驱动引脚图6系统软件设计6.1 程序结构分析主程序调用了 3个子程序,分别是数码管显示程序、温度信号处理程序、按键设定报 警温度程序。温度信号处理程序:对温度芯片送过来的数据进行处理,进行判断和显示。数 码管显示程序:向数码管的显示送数,控制系统的显示部分。按键设定程序:可以设定低温 和高温报警可精确到0.1度。6.2 系统程序流图主程序的主要功能是负责温度的实时显示、读出并处理 DS18B2啲测量的当前温度值, 温度测量每1s进行一次。这样可以在一秒之测量一次被测温度,主程序的主要功能是负责 温度的实时显示,读出并处理 DS18B20勺当前温度值,与设定的报警温度比较,其

14、程序流 程见图9所示。通过调用读温度子程序把存入存储中的整数部分与小数部分开分存放在不的的两个 单元中,然后通过调用显示子程序显示出来。图9 DS18B20温度流程图初始化程序流程图在DS18B2C工作之前需要进行初始化,流程图如下:图10初始化程序流程图622读温度子程序流程图读温度子程序的主要功能是从序流程图如下:DS18B2中读出温度数据,移入温度暂存器保存。其程图11温度子程序流程图7系统的安装与调试7.1安装步骤1. 检查元件的好坏按电路图买好元件后首先检查买回元件的好坏,按各元件的检测方法分别进行检测, 一定要仔细认真。而且要认真核对原理图是否一致,在检查好后才可上件、焊件,防止出

15、 现错误焊件后不便改正。2. 放置、焊接各元件按原理图的位置放置各元件,在放置过程中要先放置、焊接较低的元件,后焊较高的 和要求较高的元件。特别是容易损坏的元件要后焊,在焊集成芯片时连续焊接时间不要超 过10s,注意芯片的安装方向。7.2 电路的调试首先烧入显示程序,看显示正不正常。在调试程序时,发现有的指令用的不正确,导 致电路功能不能完全实现,另外软件程序中的延时有的过长、有的过短。类似的现象还有 很多就不一一列举了。7.3 本章小结本章的主要容是电路的测试和调试注意事项结 论本温度报警器,通过单片机实时检测温度传感器DS18B2的状态,并将DS1882得到的数据进行处理。上电后数码管显示

16、当前的环境温度,通过按键可设置高低温报警值,当 检测到的温度高于设置的报警值的时候, 蜂鸣器报警同时报警灯闪烁,温度检测精确到0.1 度。并具有掉电保存功能,数据保存在单片机部EEPO中,进入设置界面后如果没有键按下系统会在15秒后自动退出设置界面。由于采用了 4节干电池供电使系统的抗干扰性得到 加强。在软件上,充分利用了 STC89C5的系统资源,系统运行流畅。本设计结构简单,调试方便,系统反映快速灵活,经实验测试,该温度报警系统设 计方案正确、可行,各项指标稳定、可靠。参考文献1巧媛主编.单片机原理及应用(第二版):电子工业,20022全国大学生电子设计竞赛组委会编.第五届全国大学生电子设

17、计竞赛获奖作品选编(2001),: 理工大学,20033何力民编.单片机高级教程.:航空大学,20004金发庆等编.传感器技术与应用.机械工业,20025坤、宋戈、洪波、宪栋编.51单片机C语言应用开发技术大全,:人民邮电,20086谭浩强著.C程序设计:清华大学,20077王忠飞,胥芳.MCS-51单片机原理及嵌入式系统应用M.:电子科技大学,2007.P268-2738 Peter Van Der Lin den 著,徐波译.C专家编程,人民邮电,2003附录1整体电路原理图FI.1F1 5ZFl.dW.7E4百JthT1七sz电源接I丨电路按馄电路18b20温度传感器-lb*LaHi附录

18、2 部分源程序#in elude #in elude eepom52.h#defi ne uehar un sig ned char#defi ne uint un sig ned int/数码管段选定义012 3 4 5 678 9uchar code smg_du=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff;/ 断码/数码管位选定义uchar code smg_we=0xef,0xdf,0xbf,0x7f;uchar dis_smg8 = 0xc0,0xf9,0xa

19、4,0xb0,0x99,0x92,0x82,0xf8;uchar smg=3; /显示数码管的个位数sbit dq = P2A4; 18b20 IO口的定义sbit beep =卩2人5; /蜂鸣器IO 口定义uchar a_a;/按键值的变量菜单设计的变量uint temperature ; / bit flag_300ms ; uchar key_can; uchar menu 1;/uint t_high = 300,t_low = 100;bit flag_lj_en; / 按键连加使能bit flag_lj_3_en; / 按键连 3 次连加后使能 加的数就越大了 uchar key

20、_time,flag_value; / 用做连加的中间变量 bit key_500ms ;uchar flag_clock;uchar zd_break_en,zd_break_value; / 自动退出设置界面*1ms延时函数 *void delay_1ms(uint q)uint i,j;for(i=0;iq;i+) for(j=0;j120;j+);/* void delay_uint(uint q) while(q-);小延时函数 */* void display()uchar i;for(i=0;ismg_i;i+)P3 = smg_wei;P1 = dis_smgi; delay_

21、1ms(1);P3 = 0xff;P1 = 0xff;数码显示函数 */ 位选/ 段选/ 位选/ 消隐把数据保存到单片机部 eepom 中*/*void write_eepom()SectorErase(0x2000);byte_write(0x2000, t_high % 256); byte_write(0x2001, t_high / 256); byte_write(0x2002, t_low % 256); byte_write(0x2003, t_low / 256);byte_write(0x2055, a_a);/*扌把数据从单片机咅p eepom 中读出来 */void re

22、ad_eepom()t_high = byte_read(0x2001);t_high = 8;t_high |= byte_read(0x2000);t_low = byte_read(0x2003);t_low = 8;t_low |= byte_read(0x2002);a_a = byte_read(0x2055);*18b20初始化函数 *void init_18b20()bit q;dq = 1; delay_uint(1);dq = 0; delay_uint(80);dq = 1; delay_uint(10); q = dq;delay_uint(20); dq = 1;/

23、把总线拿高/15us/ 给复位脉冲/750us/ 把总线拿高 等待/110us/ 读取 18b20 初始化信号/200us/ 把总线拿高 释放总线*写 18b20 的数据 */void write_18b20(uchar dat) uchar i;for(i=0;i= 1;/ 写数据是低位开始/ 把总线拿低写时间隙开始 向 18b20 总线写数据了/ 60us/ 释放总线*读取18b20的数据 */ 把总线拿低读时间隙开始/ 读数据是低位开始/ 释放总线uchar read_18b20() uchar i,value; for(i=0;i= 1; dq = 1;if(dq = 1)/ 开始读写

24、数据value |= 0x80;delay_uint(5);/60us 读一个时间隙最少要保持 60us 的时间 return value;/ 返回数据/* 读取温度的值读出来的是小数 */uint read_temp()uint value;uchar low; 会影响到 18b20 的时序/在读取温度的时候如果中断的太频繁了,就应该把中断给关了,否则init_18b20();/初始化 18b20write_18b20(0xcc);/跳过 64 位 ROMwrite_18b20(0x44);/启动一次温度转换命令delay_uint(50);/500usinit_18b20();write_

25、18b20(0xcc);write_18b20(0xbe);/ 初始化 18b20EA = 0;low = read_18b20(); /读温度低字节value = read_18b20(); / EA = 1;读温度高字节value = 10) write_eepom(); key_value = 0; key_new = 1; flag_lj_en = 0; flag_lj_3_en = 0; flag_value = 0; else if(P2 & 0x0f) != 0x0f) key_value +; /elsekey_value = 0; if(key_value = 7) key_

26、value = 0; key_new = 0; flag_lj_en = 1; / zd_break_en = 1; / zd_break_value = 0; / key_can = 20;/ 关闭连加使能 / 关闭 3 秒后使能 / 清零按键按下的时候连加使能自动退出设置界使能自动退出设置界变量清零if(key_500ms = 1)key_500ms = 0;zd_break_en = 1; / 自动退出设置界使能 zd_break_value = 0; / 自动退出设置界变量清零 key_new = 0;key_old = 1;if(key_new = 0) & (key_old = 1

27、)switch(P2 & 0x0f)case 0x0e: key_can =4; break;/得到k1 键值case 0x0d: key_can =3; break;/得到k2 键值case 0x0b: key_can =2; break;/得到k3 键值case 0x07: key_can =1; break;/得到k4 键值key_old = key_new;按键处理数码管显示函数*/* void key_with() if(key_can = 4) menu_1 +; if(menu_1 = 3) menu_1 = 0; if(menu_1 = 0) dis_smg0 = smg_du

28、temperature % 10;/ 取温度的小数显示dis_smg1 = smg_dutemperature / 10 % 10 & 0x7f; / dis_smg2 = smg_dutemperature / 100 % 10 ;smg_i = 3; if(menu_1 = 1) dis_smg0 = smg_dut_high % 10; dis_smg1 = smg_dut_high / 10 % 10 & 0x7f; / dis_smg2 = smg_dut_high / 100 % 10 ; dis_smg3 = 0x89; smg_i = 4; if(menu_1 = 2)/取温度

29、的个位显示/ 取温度的十位显示取小数显示取个位显示 取 low 十位显示dis_smg0 = smg_dut_low % 10;dis_smg1 = smg_dut_low / 10 % 10 & 0x7f; /dis_smg2 = smg_dut_low / 100 % 10 ; / dis_smg3 = 0xc7;smg_i = 4;/取 low 小数显示 取个位显示 取十位显示 if(menu_1 = 1) if(key_can = 3) if(flag_lj_3_en = 0) t_high + ;else t_high += 10;if(t_high 990) t_high = 99

30、0;dis_smg0 = smg_dut_high % 10; / dis_smg1 = smg_dut_high / 10 % 10 & 0x7f; / dis_smg2 = smg_dut_high / 100 % 10 ; dis_smg3 = 0x89; if(key_can = 1) if(flag_lj_3_en = 0) t_high - ;/设置高温报警/ 按键按下未松开自动加三次/ 按键按下未松开自动加三次之后每次自动加/H/ 按键按下未松开自动加三次/取小数显示 取个位显示 取十位显示10else/ 按键按下未松开自动减三次之后每次自动减t_high -= 10; if(t

31、_high = t_high)t_low = t_high - 1; dis_smg0 = smg_dut_low % 10; dis_smg1 = smg_dut_low / 10 % 10 & 0x7f; / dis_smg2 = smg_dut_low / 100 % 10 ; / dis_smg3 = 0xc7;/Lif(key_can = 1)if(flag_lj_3_en = 0)t_low - ;elset_low -= 10; if(t_low = 10)t_low = 10; dis_smg0 = smg_dut_low % 10; dis_smg1 = smg_dut_lo

32、w / 10 % 10 & 0x7f; / dis_smg2 = smg_dut_low / 100 % 10 ; / dis_smg3 = 0xc7;/L/ write_eepom();/ 取小数显示 取个位显示 / 取十位显示/ 取小数显示 取个位显示 取十位显示/ 取小数显示 取个位显示 取十位显示*报警函数*10void clock_h_l()if(temperature = t_high)flag_clock = 1; elseflag_clock = 0; beep = 1;void main()temperature = read_temp(); time_init(); / r

33、ead_eepom();if(a_a = 0xff)t_high = 300;t_low = 100; a_a = 1;/ 先读出温度的值 初始化定时器/ 新的单片机初始单片机问 EEPOMwrite_eepom(); delay_1ms(650); temperature = read_temp(); dis_smg0 = smg_dutemperature % 10;/ 先读出温度的值/ 取温度的小数显示dis_smg1 = smg_dutemperature / 10 % 10 & 0x7f; / dis_smg2 = smg_dutemperature / 100 % 10 ; whi

34、le(1)取温度的个位显示/ 取温度的十位显示display(); key(); if(key_can 50) /15 秒后自动退出设置界面menu_1 = 0; zd_break_en = 0;zd_break_value = 0; *定时器 0 中断服务程序 */void time0_int() interrupt 1 static uchar value;TH0 = 0x3c;TL0 = 0xb0; / 50msvalue +; if(value % 6 = 0)flag_300ms = 1; /300ms value = 0;if(flag_lj_en = 1) / 按下按键使能key_time +; if(key_time = 10) /500mskey_time = 0; key_500ms = 1; /500ms flag_value +;if(flag_value 3)flag_value = 10;flag_lj_3_en = 1; /3次后 1.5 秒连加大些.专业 .专注 .

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1