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

上传人:夺命阿水 文档编号:10082 上传时间:2022-06-23 格式:DOC 页数:31 大小:1.10MB
返回 下载 相关 举报
室内温度报警控制系统设计.doc_第1页
第1页 / 共31页
室内温度报警控制系统设计.doc_第2页
第2页 / 共31页
室内温度报警控制系统设计.doc_第3页
第3页 / 共31页
室内温度报警控制系统设计.doc_第4页
第4页 / 共31页
室内温度报警控制系统设计.doc_第5页
第5页 / 共31页
点击查看更多>>
资源描述

《室内温度报警控制系统设计.doc》由会员分享,可在线阅读,更多相关《室内温度报警控制系统设计.doc(31页珍藏版)》请在课桌文档上搜索。

1、word课程设计说明书设计名称: 计算机控制技术课程设计 题 目:室内温度报警控制系统设计 学生某某:专 业: 电气工程与自动化 班 级: 11自动化2 学 号: XXXXXXXXXXXX 指导教师: 日 期:年月日课程设计任务书一、 设计题目室内温度报警控制系统设计二、 主要内容设计基于DS18B20的数字式室内变电站温度控制系统,控制程序主要包括主程序、读出温度子程序、按键子程序、控制风机子程序等。要求能检测、显示与通过控制排气风机来降低室内温度。三、 具体要求1 C以内2 温度控制X围:室温60C3 能设置温度上限,下限,并可随时修改4 LED数码管直读显示实测温度,设置温度上限温度,下

2、限温度用键控制设定温度5 温度等于上限时,报警;根据所测温度所在的界限控制三台风机的运行状态。6 温度控制风机启/停键控制系统的启动和停止四、 进度安排第一周分组;查找资料;系统硬件电路设计,编写控制程序第二周程序调试,系统调试,撰写课程设计报告,辩论五、 完成后应上交的材料1 课程设计报告。2 程序清单电子版六、 总评成绩指导教师签名日期年月日系 主 任审核日期年月日目 录1、设计方案论述 11 简述 12 控制方法介绍 13 设计功能介绍2、控制系统设计 21 系统硬件电路设计 221 电路图、各局部的作用说明 212 元件、器件介绍 22 系统软件设计 221 流程图 222 说明3、系

3、统调试 过程表示4、总结5、参考文献1、 设计方案论述11 简述本课题为室内温度报警控制系统设计:由于控制对象为室内空气、有较大的流动性,且对温度控制的精度要求不高,所以利用简单开关式温度控制方法。该系统利用数字式温度传感器测温,采用温度开关控制算法来控制三台风机的工作状态,来达到调节室内温度的目的。12 控制方法介绍简单的开关式温度控制:通过设定温度上、下限温度进展简单的开关报警与控制。这种方法的缺点是不能进展温度的准确控制,适合于要求不高的场合。13 设计功能介绍显示功能:前三个数管在非设定状态时显示三台风机的运行状态,第三个数码管在设定状态时用来指示现在修改的参数。后三个数码管显示测量温

4、度值并在设定状态期间显示上、中、下三个不同的温度设定值。温度设定功能:当按键一第一次被按下就进入温度下限设定状态,第三个数码管显示最低一横指示现在在修改下限。后三个数码管如此显示当前下限值。进入设定状态后,通过按第二、三个键就可以在允许的X围内设定下限或上限值。中限值由上下限之和除2产生。按键一第二次被按下如此显示中限温度但不可进展修改,第三个数码管显示中间一横指示现在在显示中限;按键一第三次被按下如此显示上限值,第三个数码管显示中间一横指示当前在修改上限。温度控制功能:温度控制功能:本系统有三路继电器输出,分别控制三组电机的启动与关闭。测量温度T与设定温度T上、T中、T下以与电机工作状态关系

5、如下:当T T上时,三台电机同时工作。当T中 T T上时,两台电机同时工作。当T下 T T中时,一台电机工作。当T T下时,关闭全部电机。2323T上T中T下III0III0全部停机,I1台风机工作,II2台风机工作,III3台风机工作。但为了防止风机频繁切换,所以当温度从一个界限降到另一个界限时并不立即关掉一台风机,而是要降到下一个界限减一度的时候才关掉一台风机。2、 控制系统设计2. 1系统硬件电路设计211 电路图、各局部的作用说明按键电路由四个按键组成用于温度的设定、温控系统的开关。显示电路由六个数码管组成用于各种数据与状态的显示。而测温电路主要由DS18B20组成。212 元件、器件

6、介绍本电路的单片机采用Atmel公司的AT89S52单片机。最小系统该单片机、按键和显示组成。而温度传感器采用的是DS18B20。DS18B20采用数字化技术,能以数字形式直接输出被测温度值,具有测温误差小、分辨力高、抗干扰能力强、能够远程传输数据、用户可设定温度上、下限、有越限自动报警功能、自带串行总线接口等优点,适配各种微控制器(MCU),含微处理器(uP)和单片机(uC),是研制和开发具有高性价比的新一代温度测控系统所必不可少的核心器件。221 流程图1、总流程图2、温控程序流程图3、读键程序流程图4、按键判断流程图5、选择键处理流程图6、加键处理流程图7、减键处理流程图8、温控控制键处

7、理流程图9、Time0 中断服务程序流程图222 说明系统开机首先要进展初始化,包括个变量的初始化和中断程序的初始化,最后开系统中断开始工作。本系统的中断服务程序的主要工作是更新各个时间标志和调用显示程序。根据设定是每1毫秒发生一次中断。本系统的测温间隔由DEF_CHECK_INTERVAL这个预定义设定。具体时间间隔是DEF_CHECK_INTERVAL*250毫秒。如果测温时间间隔已到相应的标志位flag_check_interval就要置位以便进入测温程序。而检测按键的间隔如此由flag_50ms这个为变量来控制。每当这个标志置1便可以进入检测按键程序。检测按键程序采用了软件去抖动,就是

8、第一次检测到有按键被按下后就保存该键值并开始计时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 #include #define led_data XBYTE0xE000 #define led_sel XBYTE0xC000 #define key_

13、add XBYTE0xA000#define disp_start_pos 3 /value from 0 to 3 are weled#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 code dot_temp16=0,0,1,1,2,3,3,4,5,5,6,6,7,8,8,9;/data_disp : led display arrayunsi

14、gned 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 count_250ms = 0;unsigned char data count_check_interval = 0;unsigned char data o

15、ld_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 settingunsigned char data cur_var=0;/sys_statue : flags of the systemunsigned ch

16、ar bdata sys_statue = 0;/2ms reachedsbit flag_1ms = sys_statue0;/50ms reachedsbit flag_50ms = sys_statue1;/100ms reachedsbit flag_100ms = sys_statue2;/500ms reachedsbit flag_250ms = sys_statue3;/key pressed,system parameter is being modifyingsbit flag_modifying = sys_statue4;/for mon usesbit flag_te

17、mp = sys_statue5;/for temperature check intervalsbit flag_check_interval = sys_statue6;/cooling systemp enabled or notsbit flag_sys_enabled = sys_statue7;void divide_con(unsigned int con_disp)unsigned char code tab10=0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F;unsigned int temp = 0;/138/100=1t

18、emp = con_disp / 100;data_dispdisp_start_pos = tabtemp;/138-100*1=38con_disp = con_disp - 100 * temp;/38/10=3;temp = con_disp / 10;temp = tabtemp;/display radix pointdata_dispdisp_start_pos+1 = temp | 0x80;/38%10=8temp=con_disp%10;data_dispdisp_start_pos+2 = tabtemp;void disp(void)/flashingled_data

19、= 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=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)i

20、f(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(cur_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(

21、settingcur_var-1 MAX_TEMP_MIN)settingcur_var-1 = settingcur_var-1 - 10;divide_con(settingcur_var-1);setting1 = setting0 + setting2; setting1 = setting1 1; / 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

22、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 3 4if(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_disp

23、2 = 0x40;else if(cur_var = 2)data_disp2 = 0x01;elsedata_disp2 = 0x00;divide_con(settingcur_var);+cur_var;if(cur_var = 4) flag_modifying = 0;cur_var = 0;return;else if(key_kpval = 8)key4_process();return;/ key2 pressd and now releaseif(flag_modifying)if(key_kpval = 2)key2_process();/ key3 pressd and

24、now releaseif(key_kpval = 4)key3_process();unsigned char read_key(void)unsigned char data key_val = 0;key_val = key_press();if(key_val)/delay 100msflag_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(ke

25、y_val);elsereturn(0);else if(key_val = key_press()old_key_val = key_val;flag_100ms = 0;count_100ms = 0;return(key_val);elsereturn(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_l

26、ogic)working_fans = 1;temp_logic = cur_temp = setting1 - 10 & working_fans = 2; if(cur_temp_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;elseworking_fans = 0;*/void cooling_control(unsigned

27、 int T) if(Tsetting0) if(T=setting0&Tsetting1) if(T=setting1&Tsetting2) if(Tsetting2-10|working_fans=2) working_fans=2; else working_fans=3; void led_flashing(void)if(flag_modifying)if(working_fans = 3)data_disp0 = (0x01 flash_cur_pos);data_disp1 = data_disp0;data_disp2 = data_disp0;else if(working_

28、fans = 2)data_disp0 = 0x3F;data_disp1 = (0x01 flash_cur_pos);data_disp2 = data_disp1;else if(working_fans = 1)data_disp0 = 0x3F;data_disp1 = 0x3F;data_disp2 = (0x01 0;t-);/DS18B20void Init_DS18B20(void) /unsigned x; DQ=0; / delay(29); / 480 us DQ=1; delay(3); /DS18B2030us /x=DQ; /x=0,x=1 delay(25);

29、/ return(x);unsigned char ReadOneChar(void) unsigned char data i; unsigned char data byte=0; for(i=0;i=1; DQ=0; DQ=1; delay(1); if(DQ) byte|=0x80; delay(6); return(byte);void WriteOneChar(unsigned char byte) unsigned char i; for(i=0;i4; b=b4; t=b|a; t=t*10+temp_float;return(t); void init_timer0(void

30、)TMOD = 0x01;/work in mode 1TH0 = 0xFC;TL0 = 0x65; TR0 = 1;/startvoid time_process(void)+count_50ms;+count_100ms;+count_250ms;if(count_50ms = 50)count_50ms = 0;flag_50ms = 1;if(count_100ms = 100)count_100ms = 0;flag_100ms = 1;if(count_250ms = 250)count_250ms = 0;flag_250ms = 1;+count_check_interval;

31、if(count_check_interval = DEF_CHECK_INTERVAL)count_check_interval = 0;flag_check_interval = 1;void time(void) interrupt 1TH0 = 0xFC;TL0 = 0x65; flag_1ms = 1; time_process();/display processdisp();void main(void)/system initiate startunsigned char data key_temp = 0;unsigned int abc = 0;flag_sys_enabl

32、ed = 1;led_sel = 0xFF;init_timer0();IE = 0x82;/enable the globe interrupt and Time0 interrupt/system initiate end/for test /srand(0x51);/working_fans = 2;/for testwhile(1)/read temperature process if(flag_check_interval & flag_modifying)flag_check_interval = 0;IE = 0x00;abc = GetTemperature();cur_temp = abc;divide_con(cur_temp);if(flag_sys_enabled)cooling_control(cur_temp);IE = 0x82;/read key processif(flag_50ms)flag_50ms = 0;key_temp = read_key();if(key_temp)key_process(key_temp);if(flag_sys_enabled)led_flashing();31 / 31

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

当前位置:首页 > 在线阅读 > 生活休闲


备案号:宁ICP备20000045号-1

经营许可证:宁B2-20210002

宁公网安备 64010402000986号