ImageVerifierCode 换一换
格式:DOCX , 页数:32 ,大小:731.68KB ,
资源ID:8615379      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8615379.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(室内温度报警控制系统设计.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

室内温度报警控制系统设计.docx

1、室内温度报警控制系统设计课程设计说明书设计名称: 计算机控制技术课程设计 题 目: 室内温度报警控制系统设计 学生姓名: 专 业: 电气工程与自动化 班 级: 11自动化(2) 学 号: XXXXXXXXXXXX 指导教师: 陈广义 日 期: 年 月 日 课程设计任务书 专业 年级 班 一、 设计题目室内温度报警控制系统设计二、 主要内容 设计基于DS18B20的数字式室内变电站温度控制系统,控制程序主要包括主程序、读出温度子程序、按键子程序、控制风机子程序等。要求能检测、显示及通过控制排气风机来降低室内温度。三、 具体要求1 对室内温度进行检测及控制。温度显示范围:00.0C+99.9C,精

2、度误差在0.1C以内2 温度控制范围:室温60C3 能设置温度上限,下限,并可随时修改4 LED数码管直读显示实测温度,设置温度上限温度,下限温度(用键控制设定温度)5 温度等于上限时,报警;根据所测温度所在的界限控制三台风机的运行状态。6 温度控制(风机)启/停键控制系统的启动和停止四、 进度安排第一周分组;查找资料;系统硬件电路设计,编写控制程序第二周程序调试,系统调试,撰写课程设计报告,答辩五、 完成后应上交的材料1 课程设计报告。2 程序清单(电子版)六、 总评成绩指导教师 签名日期 年 月 日系 主 任 审核日期 年 月 日1、设计方案论述 11 简述 12 控制方法介绍 13 设计

3、功能介绍2、控制系统设计 21 系统硬件电路设计 221 电路图、各部分的作用说明 212 元件、器件介绍 22 系统软件设计 221 流程图 222 说明3、系统调试 过程叙述4、总结5、参考文献1、 设计方案论述11 简述本课题为室内温度报警控制系统设计:由于控制对象为室内空气、有较大的流动性,且对温度控制的精度要求不高,所以利用简单开关式温度控制方法。该系统利用数字式温度传感器测温,采用温度开关控制算法来控制三台风机的工作状态,来达到调节室内温度的目的。12 控制方法介绍简单的开关式温度控制:通过设定温度上、下限温度进行简单的开关报警与控制。这种方法的缺点是不能进行温度的精确控制,适合于

4、要求不高的场合。13 设计功能介绍显示功能:前三个数管在非设定状态时显示三台风机的运行状态,第三个数码管在设定状态时用来指示现在修改的参数。后三个数码管显示测量温度值并在设定状态期间显示上、中、下三个不同的温度设定值。温度设定功能:当按键一第一次被按下就进入温度下限设定状态,第三个数码管显示最低一横指示现在在修改下限。后三个数码管则显示当前下限值。进入设定状态后,通过按第二、三个键就可以在允许的范围内设定下限或上限值。中限值由上下限之和除2产生。按键一第二次被按下则显示中限温度但不可进行修改,第三个数码管显示中间一横指示现在在显示中限;按键一第三次被按下则显示上限值,第三个数码管显示中间一横指

5、示当前在修改上限。温度控制功能:温度控制功能:本系统有三路继电器输出,分别控制三组电机的启动与关闭。测量温度T与设定温度T上、T中、T下以及电机工作状态关系如下:当T T上时,三台电机同时工作。当T中 T T上时,两台电机同时工作。当T下 T T中时,一台电机工作。当T T下时,关闭全部电机。0全部停机,I1台风机工作,II2台风机工作,III3台风机工作。但为了防止风机频繁切换,所以当温度从一个界限降到另一个界限时并不立即关掉一台风机,而是要降到下一个界限减一度的时候才关掉一台风机。2、 控制系统设计2. 1系统硬件电路设计211 电路图、各部分的作用说明 按键电路由四个按键组成用于温度的设

6、定、温控系统的开关。显示电路由六个数码管组成用于各种数据及状态的显示。而测温电路主要由DS18B20组成。212 元件、器件介绍本电路的单片机采用Atmel公司的AT89S52单片机。最小系统该单片机、按键和显示组成。 而温度传感器采用的是DS18B20。DS18B20采用数字化技术,能以数字形式直接输出被测温度值,具有测温误差小、分辨力高、抗干扰能力强、能够远程传输数据、用户可设定温度上、下限、有越限自动报警功能、自带串行总线接口等优点,适配各种微控制器(MCU),含微处理器(uP)和单片机(uC),是研制和开发具有高性价比的新一代温度测控系统所必不可少的核心器件。2.2系统软件设计221

7、流程图 1、总流程图2、温控程序流程图3、读键程序流程图4、按键判断流程图5、选择键处理流程图6、加键处理流程图7、减键处理流程图8、温控控制键处理流程图9、Time0 中断服务程序流程图222 说明 系统开机首先要进行初始化,包括个变量的初始化和中断程序的初始化,最后开系统中断开始工作。 本系统的中断服务程序的主要工作是更新各个时间标志和调用显示程序。根据设定是每1毫秒发生一次中断。本系统的测温间隔由DEF_CHECK_INTERVAL这个预定义设定。具体时间间隔是DEF_CHECK_INTERVAL*250毫秒。如果测温时间间隔已到相应的标志位flag_check_interval就要置位

8、以便进入测温程序。而检测按键的间隔则由flag_50ms这个为变量来控制。每当这个标志置1便可以进入检测按键程序。检测按键程序采用了软件去抖动,就是第一次检测到有按键被按下后就保存该键值并开始计时50毫秒,50毫秒已到就再次检测按键,如果这次检测到的按键与已保存的键值相等就确定该键值是用户按下产生的。然后在把这个键值和上次有效键值比较,如果相等就是说这个是重复键。为了预防用户按下按键不放参数变化过快的现象,我们还要判断100毫秒标志位有没有置位,如果100毫秒标志为1则把这个键值传送个按键判断程序,如果为0则当无效键处理。如果新建值和上次有效键键值不相等,就是说这个键是新键,马上把这个键值传送

9、个按键判断程序。按键判断程序接收到键值就根据该键值调用相应的按键处理程序。温控程序则是以温度和现在开动风机的数量来控制三台风机的状态。显示程序负责人机对话。前三个数管在非设定状态时显示三台风机的运行状态,第三个数码管在设定状态时用来指示现在修改的参数。后三个数码管显示测量温度值并在设定状态期间显示上、中、下三个不同的温度设定值。3、 系统调试在确定硬件能正常工作后系统调试工作主要就是软件的调试了。我们首先调试显示程序。从最简单的单个数码管的显示开始,然后逐步向前。而不是把整个显示程序写好在调试。这样可能会有很多错误,一下子就被吓得没信心了。显示程序调试成功后我们接着就可以进行按键程序的编写及调

10、试了。也是从最简单的工作做起,就是直接检测有没有按键,成功后再加软件去抖动,然后再加重复键和新键的处理程序。一步一步,最后一个较完美的按键程序就完成了。做完按键我们就分开两路一些同学搞DS18B20的程序,另外一些同学则负责温度控制程序。但是还没有测出温度是没有温度值的,所以温控程序的开发就用读随机的方法模拟“可变的温度值”。在两部分工作都搞完后我们就联合调试了,大家都很高兴的看到显示结果但是显示会随机出现一些莫名其妙的数值。这个问题困扰了我们很久。因为分析程序都没发现什么错误会出现这种情况。最后我们决定逐步调试,先是去掉测温程序发现显示正常,按键也正常。我们就怀疑是不是按键和测温会有相撞。于

11、是我们就加入测温程序,撤去按键程序。发现显示还是有问题。我们就确定是测温的问题,但是无论怎样分析都是发现测温程序之正确无误的。无奈!一些同学便乱试碰碰运气。最后发现把测温程序移到中断程序便不会发生错误。惘然大悟。原来是中断的问题。因为如果在测温的过程中如果发生中断,那就会破坏测温程序。因为测温程序对时间的连续性要求非常严格。最后我们在进入测温前禁止全局中断,测温完成后再开中断就解决了最大的问题。4、 总结通过这次课程设计,在老师的指导下,我基本上学会用C语言开发单片机程序,发现用C语言编写单片机程序很容易实现自己的想法,不用太顾及寄存器的使用、中断向量的编写及免去了一些琐碎的跳转指令,而且C语

12、言调试程序相当方便。不过这些都需要有扎实的汇编基础,不然在写短延时的时候就会束手无策。通过这次课程设计我进一步学习了一个系统开发的步骤,首先要把整个系统的硬件系统搞出来,然后按照要求开始做软件的流程图。在这之后就一步一步地按照流程图编写程序。最后就是体会到了用模块化编程的好处。用模块化编程可以把大问题细分成一个个小问题。各个模块各司其职,然后合并成一个完整的程序。5、 参考6、 附录(程序清单)/Cautions:/temp : temperature/sel : select/whc : which/con : content/disp : display#include #include

13、#include #define led_data XBYTE0xE000 #define led_sel XBYTE0xC000 #define key_add XBYTE0xA000#define disp_start_pos 3 /value from 0 to 3 are welcomed#define DEF_CHECK_INTERVAL 4#define MAX_TEMP_MAX 250#define MAX_TEMP_MIN 200#define MIN_TEMP_MAX 150#define MIN_TEMP_MIN 100sbit DQ=P10;unsigned char c

14、ode dot_temp16=0,0,1,1,2,3,3,4,5,5,6,6,7,8,8,9;/data_disp : led display arrayunsigned char data data_disp6 = 0x00,0x00,0x00,0x00,0x00,0x00; unsigned int data setting3 = 0x64,0x96,0x0C8;unsigned int cur_temp = 200;unsigned char data count_50ms = 0;unsigned char data count_100ms = 0;unsigned char data

15、 count_250ms = 0;unsigned char data count_check_interval = 0;unsigned char data old_key_val = 0;unsigned char data working_fans = 0;/cur_pos : current displaying ledunsigned char data cur_pos = 0;/flash_cur_pos : just for flashing led unsigned char data flash_cur_pos = 0;/cur_var : current modifying

16、 settingunsigned char data cur_var=0;/sys_statue : flags of the systemunsigned char bdata sys_statue = 0; /2ms reached sbit flag_1ms = sys_statue0; /50ms reached sbit flag_50ms = sys_statue1; /100ms reached sbit flag_100ms = sys_statue2; /500ms reached sbit flag_250ms = sys_statue3; /key pressed,sys

17、tem parameter is being modifying sbit flag_modifying = sys_statue4; /for common use sbit flag_temp = sys_statue5; /for temperature check interval sbit flag_check_interval = sys_statue6; /cooling systemp enabled or not sbit flag_sys_enabled = sys_statue7;void divide_con(unsigned int con_disp) unsigne

18、d char code tab10=0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F; unsigned int temp = 0; /138/100=1 temp = con_disp / 100; data_dispdisp_start_pos = tabtemp; /138-100*1=38 con_disp = con_disp - 100 * temp; /38/10=3; temp = con_disp / 10; temp = tabtemp; /display radix point data_dispdisp_start_po

19、s+1 = temp | 0x80; /38%10=8 temp=con_disp%10; data_dispdisp_start_pos+2 = tabtemp;void disp(void) /flashing led_data = 0x00; led_sel = 0xff; led_data = data_dispcur_pos; led_sel = (1cur_pos); if(cur_pos 600) cur_temp = 200; return(cur_temp);*/unsigned char key_press(void) unsigned char data whc_key=

20、0; led_data = 0x00; led_sel = 0xFE; whc_key = key_add; whc_key = whc_key; return(whc_key);void key2_process(void) if(cur_var = 1) if(setting0 MIN_TEMP_MAX) settingcur_var-1 = settingcur_var-1 + 10; divide_con(settingcur_var-1); else if(cur_var = 3) if(setting2 1; / div 2void key3_process(void) if(cu

21、r_var = 1) if(settingcur_var-1 MIN_TEMP_MIN) settingcur_var-1 = settingcur_var-1 - 10; divide_con(settingcur_var-1); else if(cur_var = 3) if(settingcur_var-1 MAX_TEMP_MIN) settingcur_var-1 = settingcur_var-1 - 10; divide_con(settingcur_var-1); setting1 = setting0 + setting2; setting1 = setting1 1; /

22、 div 2void key4_process(void) flag_sys_enabled = flag_sys_enabled; if(flag_sys_enabled) data_disp0 = 0x3F; data_disp1 = 0x3F; data_disp2 = 0x3F; void key_process(unsigned char key_kpval) /wait until release / key1 pressd and now release /times cur_var_before cur_var_after / 1 0 1 / 2 1 2 / 3 2 3 / 4

23、 3 4 if(key_kpval = 1) data_disp0 = 0x00; data_disp1 = 0x00; data_disp2 = 0x00; flag_modifying = 1; if(cur_var = 0) data_disp2 = 0x08; else if(cur_var = 1) data_disp2 = 0x40; else if(cur_var = 2) data_disp2 = 0x01; else data_disp2 = 0x00; divide_con(settingcur_var); +cur_var; if(cur_var = 4) flag_mo

24、difying = 0; cur_var = 0; return; else if(key_kpval = 8) key4_process(); return; / key2 pressd and now release if(flag_modifying) if(key_kpval = 2) key2_process(); / key3 pressd and now release if(key_kpval = 4) key3_process(); unsigned char read_key(void) unsigned char data key_val = 0; key_val = k

25、ey_press(); if(key_val) /delay 100ms flag_50ms = 0; count_50ms = 0; while(!flag_50ms); flag_50ms = 0; if(key_val = key_press() & key_val = old_key_val) / if(flag_100ms = 1) flag_100ms = 0; return(key_val); else return(0); else if(key_val = key_press() old_key_val = key_val; flag_100ms = 0; count_100

26、ms = 0; return(key_val); else return(0); /*void cooling_control(unsigned int cur_temp_b) unsigned char temp_logic = 0; temp_logic = cur_temp = setting0 - 10 & working_fans = 1; if(cur_temp_b = setting0 | temp_logic) working_fans = 1; temp_logic = cur_temp = setting1 - 10 & working_fans = 2; if(cur_t

27、emp_b = setting1 | temp_logic) working_fans = 2; temp_logic = cur_temp = setting0 - 10 & working_fans = 3; if(cur_temp_b = setting2 | temp_logic) working_fans = 3; else working_fans = 0; */void cooling_control(unsigned int T) if(Tsetting0) if(T=setting0&Tsetting1) if(Tsetting1-10|working_fans=1) working_fans=1;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1