温度报警控制系统.doc

上传人:laozhun 文档编号:3857763 上传时间:2023-03-25 格式:DOC 页数:27 大小:1MB
返回 下载 相关 举报
温度报警控制系统.doc_第1页
第1页 / 共27页
温度报警控制系统.doc_第2页
第2页 / 共27页
温度报警控制系统.doc_第3页
第3页 / 共27页
温度报警控制系统.doc_第4页
第4页 / 共27页
温度报警控制系统.doc_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《温度报警控制系统.doc》由会员分享,可在线阅读,更多相关《温度报警控制系统.doc(27页珍藏版)》请在三一办公上搜索。

1、目 录 1课程设计目的22课程设计的主要内容和任务分析23控制系统的总体要求24温度报警控制系统硬件部分设计分析34.1 温度传感器DSl8B20 34.2 AT89C51单片机简介 94.3 74HC138功能介绍 114.4 74HC377功能介绍 124.5 74HC245功能介绍 12 4.6 温度报警控制系统电路图135温度报警控制系统软件部分设计分析 145.1 程序实现功能145.2 程序流程图145.3温度报警控制程序 176. 系统调试 17课程设计体会18参考文献18附件 19温度报警控制系统设计 1设计目的:1、通过温度报警控制系统的设计,了解数字式温度传感器DS18B2

2、0的工作原理及其控制方法;2、通过温度报警控制系统的设计,掌握单片机AT89C51的结构原理及其控制指令的应用,熟练应用AT89C51完成一个系统的控制;3、通过温度报警控制系统的设计,使学生了解一个控制系统设计的基本步骤,程序设计的基本方法,培养学生分析问题和解决问题的能力,将理论联系到实践中去,提高我们的动脑和动手的能力,通过课程设计,还可以使学生树立正确的世界观,培养实事求是、严肃认真、具有高度责任感的工作作风;4、学习完成控制系统的硬件设计、软件设计、仿真调试的过程。2课程设计的主要内容和任务分析任务:以单片机AT89C51作为核心,基于数字式温度传感器DS18B20的功能,设计一个具

3、有LED显示功能、按键功能、温度检测功能及控制操作功能的控制系统。内容:设计基于DS18B20的数字式烤箱温度控制系统,控制电路主要包括,led显示电路、按键电路、温度检测电路及控制电路。控制程序主要包括主程序、读出温度子程序、按键子程序、显示子程序、控制子程序等。要求能检测、显示烤箱温度,并控制烤箱温度在一可设定区域。 3控制系统的总体要求:1 对烤箱温度进行检测及控制。温度显示范围: 0C+99C,精度误差 在1C以内。2 温度控制在设置的上下限范围。3 能设置并保存温度上、下限值,并可随时修改。4 LED数码管直读显示实测温度,设置温度上限温度,下限温度(用键控制设定温度)。5 温度超出

4、上、下限值时,报警;根据所测温度所在的界限控制烤箱是否加热。6 启/停键用以启动和停止加热,上电复位后,不论启动还是停止状态,人机界面显示烤箱内温度值,同时也要求显示界面区分停止和运行状态。4温度报警控制系统硬件部分设计分析:4.1 温度传感器DSl8B20由美国DALLAS半导体公司生产的DSl8B20型单线智能温度传感器,属于新一代适配微处理器的智能温度传感器,可广泛用于工业、民用、军事等领域的温度测量及控制仪器、测控系统和大型设备中,例如多路温度测控仪、中央空调、大型冷库、恒温装置等。此外巧妙利用DSl8B20内部64位激光ROM中具有惟一性的48位产品序号,还可设计成专供大型宾馆客房或

5、军事仓库使用的保密性极佳的电子密码锁。DSl8B20的电源电压范围均扩展到+3+5.5V,DSl8B20还能对温度分辨力进行编程,选择9位12位模式下工作,在12位模式下的最高分辨力可达0.0625。4.1.1 DS18B20的性能特点(1)DSl8B20采用DALLAS公司独特的“单线(1-Wire)总线”专有技术,通过串行通信接口(I/O)直接输出被测温度值(9位二进制数据,含符号位)。(2)在测温范围是-55+125时,测量误差不超过2,在-10+85范围内,可确保测量误差不超过0.5。温度数字量转换时间的典型值仅需93.75ms,比DS1820有很大的提高.(3)内含64位经过激光修正

6、的只读存储器ROM,扣除8位产品系列号和8位循环冗余校验码CRC之后,产品序号占48位。出厂前就作为DSl8B20惟一的产品序号,存入其ROM中。在构成大型温控系统时,允许在单线总线上挂接多片DSl8B20。4.1.2 DS18B20的工作原理DSl8B20的原理与DS1820的原理是一样的。DS18B20继承了DS1820的所有优点。DS18B20采用3脚PR35封装或8脚SOIC封装,引脚排列如图11所示。I/O为数据输入输出端(即单线总线),它属于漏极开路输出,外接上拉电阻后,常态下呈高电平。UDD是可供选用的外部+5V电源端,不用时需接地。GND为地,NC为空脚。其内部框图如图12所示

7、。主要包括7部分:寄生电源;温度传感器; 64位激光(laser)ROM与单线接口;高速暂存器,即便笺式RAM,用于存放中间数据;TH 触发寄存器和TL触发寄存器,分别用来存储用户设定的温度上、下限tH、tL值;存储与控制逻辑;8位循环冗余校验码(CRC)发生器。下面分别介绍各部分的工作原理。(a) (b)图11 DS1820/DS18B20的引脚排列(a) PR35封装 (b) SOIC封装图12 DS18B20的内部框图(1)测温电路原理DSl8B20内部测温电路框图如图14 所示。低温度系数振荡器用于产生稳定的频率0,高温度系数振荡器则相当于T转换器,能将被测温度t转换成频率信号0图中还

8、隐含着计数门,当计数门打开时,DSl8B20就对低温度系数振荡器产生的时钟脉冲0进行计数,进而完成温度测量。计数门的开启时间由高温度系数振荡器来决定。每次测量前,首先将-55所对应的基数分别置入减法计数器、温度寄存器中。在计数门关闭之前若计数器已减至零,温度寄存器中的数值就增加0.5。然后,计数器依斜率累加器的状态置入新的数值,再对时钟计数,然后减至零,温度寄存器值又增加0.5。只要计数门仍未关闭,就重复上述过程,直至温度寄存值达到被测温度值。这就是DSl8B20的测温原理。斜率累加器能对振荡器的非线性予以补偿,提高测量准确度。 需要指出,温度值本应为9位(其中,符号占一位),但因符号位又被扩

9、展成高8位,故实际以16位补码的形式读出。其中,高8位代表符号,“0”表示t0,“1”表示ttH或t=上限?温度在上下限之间?温度=下限?停止加热,报警加热,运行灯亮报警,自动加热结束YYYNNN5.2.4 运行时按键功能程序5.2.5 加减键子程序流程按键释放?按下SW2?按下SW3?输入值+1输入值-1显示修改后的数值显示修改后的数值返回输入值YYNNNY5.3温度报警控制程序 该系统的控制程序见附件1。 6. 系统调试该系统的调试结果如下:开机显示当前温度,并进入停止运行烤箱状态。LED数码管显示实时温度。当按一下SW1(选择键)选择显示上限温度,此时按SW2(加键)、SW3(减键)可加

10、减上限温度设定值;再按一SW1选择显示下限温度,按SW2、SW3可加减该下限温度设定值;再按一下SW1,恢复显示当前温度。SW4为运行烤箱的启动停止控制键。SW1的选择只是在烤箱停止运行时有效,即当按SW4停止运行烤箱时,可进行以上操作;当按SW4启动烤箱时,只能显示上下限的温度值,而不能修改温度值(运行状态下按住SW1显示设置的上限值,按住SW2显示设置的下限值)。若进入上、下限温度显示则可修改上、下限值(程序默认值上限为60摄氏度,下限为10摄氏度,并且上限永比下限值高5摄氏度以上)。SW2为加1摄氏度键,SW3为减1摄氏度键。若当前温度低于下限值,系统的指示灯LED2亮(警报)并自动进入

11、运行烤箱状态(加热),当前温度高于下限值时,指示灯LED2灭(取消警报)。在运行状态下,若当前温度高于上限值指示灯LED2亮并自动停止运行,温度低于下限值灯灭。若当前温度在上、下限值之间,则手动选择是否加热。SW4为运行键。运行状态下指示灯LED1亮。7课程设计体会:通过两个星期的实训,我对8051的结构及编程语言有了更多的认识,更深的了解了8051的工作方式,并能对硬件调试时出现的一些故障进行合理的分析与改正,保证控制系统的正常控制要求外,我们还尽量使设计的系统符合实际的需求。通过对控制系统的控制要求的分析,理解控制其控制思想,构思、编写控制程序,并通过调试,修改,使其具备系统要求的功能。这

12、次的课程设计让我把理论知识用在实践中,实现了理论和实践相结合,从中更懂得理论的是实践的基础,实践有能检验理论的正确性,让我受誉非浅,同时提高了自己的发现问题,分析问题与解决问题的能力。对我以后参加工作或者继续学习将会产生巨大的帮助和影响。8. 参考文献:1. 赖麒文 8051单片机C语言彻底应用 科学出版社 20052. 陈龙三 8051单片机 C语言控制与应用 清华大学出版社 19983. 钟富昭 8051单片机典型模块设计与应用 人民邮电出版社 20074. 百度百科 DS18B20 附件1:总程序#include#include #include/LED选择端口 起始地址#define

13、led_sel XBYTE0xc000 /LED数据端口 起始地址#define led_data XBYTE0xe000 /按键端口 起始地址#define key_addr XBYTE0xA000/定义数码管内容char code table22=0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x39,0x00,0x40,0x76,0x70,0x38,0x21,0x30,0x18,0x0c,0x06,0x03;/LED数码管 数字内容: 0, 1, 2, 3, 4, 5, 6, 7,/8, 9, c, 空 , -, H , 卜, L,/

14、运行时当前温度下的动态显示/定义传感器转换所用到内容unsigned char code table216=0,0,1,1,2,3,3,4,5,5,6,6,7,8,8,9;/定义各个变量 /标志状态变量unsigned int tr1=0,tr0=0,fan;unsigned char flag; /运行标志0为运行,1为停止/上限,下限,当前温度unsigned int Th,Tl,Tm,Tn;/定义温度传感器通讯端口为P1.0sbit DQ = P10; sbit fan1 = P15;sbit lgh1=P16;sbit lgh2=P17;/-各个子程序-void delay(unsig

15、ned int i)/测温用到的延时while(i-);/*/* 初始化ds18b2子函数* */*/void Init_DS18B20(void)/初始化传感器函数unsigned char x=0;DQ = 1; /DQ复位delay(8); /稍做延时DQ = 0; /单片机将DQ拉低delay(80); /精确延时 大于 480usDQ = 1; /拉高总线delay(14);x=DQ; /稍做延时后/如果x=0则初始化成功 x=1则初始化失败delay(20);/*/* 读字节子函数 */*/unsigned char ReadOneChar(void)/读一个字节unsigned

16、char i=0;unsigned char dat = 0;for (i=8;i0;i-) DQ = 0; / 给脉冲信号dat=1; DQ = 1; / 给脉冲信号 if(DQ) dat|=0x80; delay(4);return(dat);/*/* 写字节子函数 */*/void WriteOneChar(unsigned char dat)/写一个字节unsigned char i=0;for (i=8; i0; i-) DQ = 0; DQ = dat&0x01; delay(5); DQ = 1; dat=1;/*/* 读温度模块 */*/unsigned int Tempera

17、ture(void)/读取温度unsigned char a=0;unsigned char b=0;unsigned int t=0;Init_DS18B20(); /初始化传感器delay(200);WriteOneChar(0xCC); /跳过读序号列号的操作WriteOneChar(0x44); /启动温度转换Init_DS18B20(); /初始化传感器delay(1);WriteOneChar(0xCC); /跳过读序号列号的操作WriteOneChar(0xBE); /读取温度寄存器 (共可读9个寄存器)前两个是温度/双字节 8位,高字节和低字节高4位组成温度整数值,低4位为温度

18、小数值a=ReadOneChar();/低位b=ReadOneChar();/高位t=b;t0;i-);void display(int pa,int pb,int pc)/显示函数/使用动态显示,LED数码管逐个点亮/从LED5开始点亮目的是将键盘的公共端拉为底电平/因为键盘的公共端接在LED0的选通信号上led_sel=0xdf;/1.选通LED5led_data=table10; /2.输入显示数据,此处数据为delayms(5);/3.延时显示内容led_data=0x00;/4.将输入数据清零 消除拖影现象led_sel=0xef;/选通LED4 小数位led_data=tablep

19、c;delayms(5);led_data=0x00;led_sel=0xf7;/选通LED3 个位+小数点led_data=tablepb+0x80; delayms(5);led_data=0x00;led_sel=0xfb;/选通LED2 十位 led_data=tablepa;/2+3=整数delayms(5);led_data=0x00;led_sel=0xfd;/选通LED1led_data=tabletr0;/与选通LED0组合为 状态标志位delayms(5);led_data=0x00;led_sel=0xfe;/选通LED0 led_data=tabletr1;/数据输入d

20、elayms(5);/延时led_data=0x00;/数据清零unsigned int add_dec(unsigned int temp)/加减程序unsigned zs,zg;if(key_addr=0xfd)/按下加温度键delayms(20);/延时防抖temp=temp+10;zs=temp/100;zg=temp%100;display(zs,zg,0);/显示加1后温度if(key_addr=0xfb)/减1delayms(20);temp=temp-10;zs=temp/100;zg=(temp/10)%10;display(zs,zg,0);while (key_addr!

21、=0xff)display(zs,zg,0);return(temp);/检查是否已经松开按键,是则显示相加后的温度否则返回void dataplay(unsigned int tmp)/选择显示unsigned z,x,xs,zs,zg,temp;if(Th=990)Th=990;/上限温度最高为99度if(Th=100)Th=100;/上限温度最低为10度if(Tl=500)Tl=500;/下限温度最高为50度if(Th4); /整数部分zs=z/10; /十位zg=z%10; /个位xs=table2x;/小数位Tn=z*10+xs;display(zs,zg,xs);break;cas

22、e 1:/显示上限温度zs=Th/100;zg=(Th/10)%10;display(zs,zg,0);break;case 2:/显示下限温度zs=Tl/100;zg=(Tl/10)%10;display(zs,zg,0);break;/*/* 按键功能子函数 */*/void keyscn(void)/运行时按键功能选择switch(key_addr)case 0xfe:tr1=13;/按下SW1显示上限温度tr0=11;/标志为H .Cdataplay(1);break; case 0xfd:tr1=15;/按下SW2显示下限温度tr0=11;/标志为L .Cdataplay(2);br

23、eak;case 0xfb: dataplay(0); break;case 0xf7:delayms(20);/按下SW4显示当前温度dataplay(0);/并停止运行flag=1;while(key_addr=0xf7)dataplay(0);break;case 0xff: dataplay(0);/无按键显示当前温度break;void run(void)unsigned temp;temp=Tn;/将当前温度赋予给变量if(temp=Th) fan1=0; lgh1=0; delayms(1000); flag=1;if(tempTl) fan1=0; lgh1=1; if(temp=Th)lgh1=0;switch (ID)case 0:tr1=12;/停止时标志dataplay(ID);/显示为-.Cbreak;case 1:tr1=13;/显示上限温度并可进行修改Th=add_dec(Th);/上限修改dataplay(I

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

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号