版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课程设计说明书
设计名称:计算机控制技术课程设计
题目:室内温度报警控制系统设计
学生姓名:
专业:电气工程与自动化
班级:11自动化(2)
学号:XXXXXXXXXXXX
指导教师:陈广义
日期:年月日
课程设计任务书
专业年级班
一、设计题目
室内温度报警控制系统设计
二、主要内容
设计基于DS18B20的数字式室内变电站温度控制系统,控制程序主要包括主程序、读出温度子程
序、按键子程序、控制风机子程序等。要求能检测、显示及通过控制排气风机来降低室内温度。
三、具体要求
1.对室内温度进行检测及控制。温度显示范围:00.0T-+99.9°C,精度误差在0.1°C以内
2.温度控制范围:室温~60℃
3.能设置温度上限,下限,并可随时修改
4.LED数码管直读显示实测温度,设置温度上限温度,下限温度(用键控制设定温度)
5.温度等于上限时,报警;根据所测温度所在的界限控制三台风机的运行状态。
6.温度控制(风机)启/停键控制系统的启动和停止
四、进度安排
第一周分组;查找资料;系统硬件电路设计,编写控制程序
第二周程序调试,系统调试,撰写课程设计报告,答辩
五、完成后应上交的材料
1.课程设计报告。
2.程序清单(电子版)
六、总评成绩
指导教师签名日期年月日
系主任审核日期年月日
目录
1、设计方案论述
1.1简述
1.2控制方法介绍
1.3设计功能介绍
2、控制系统设计
2.1系统硬件电路设计
2.2.1电路图、各部分的作用说明
2.1.2元件、器件介绍
2.2系统软件设计
2.2.1流程图
2.2.2说明
3、系统调试
过程叙述
4、总结
5、参考文献
1、设计方案论述
1.1简述
本课题为室内温度报警控制系统设计:由于控制对象为室内空气、有较大的流动性,旦对温度控
制的精度要求不高,所以利用简单开关式温度控制方法。
该系统利用数字式温度传感器测温,采用温度开关控制算法来控制三台风机的工作状态,来达到
调节室内温度的目的。
1.2控制方法介绍
简单的开关式温度控制:通过设定温度,、下限温度进行简单的开关报警与控制。这种方法的缺
点是不能进行温度的精确控制,适合于要求不高的场合。
1.3设计功能介绍
显示功能:前三个数管在非设定状态时显示三台风机的运行状态,第三个数码管在设定状态时用
来指示现在修改的参数。后三个数码管显示测量温度值并在设定状态期间显示上、中、下三个不同的
温度设定值。
温度设定功能:当按键•第•次被按下就进入温度下限设定状态,第三个数码管显示最低•横指
示现在在修改下限。后三个数码管则显示当前下限值。进入设定状态后,通过按第二、三个键就可以
在允许的范围内设定下限或上限俏。中限侑由上卜.限之和除2产生。按键一第二次被按卜.则显示中限温
度但不可进行修改,第三个数码管显示中间一横指示现在在显示中限:按键一第三次被按下则显示上
限值,第三个数码管显示中间一横指示当前在修改上限。
温度控制功能:温度控制功能:本系统有三路继电器输出,分别控制三组电机的启动与关闭。测
量温度T与设定温度T上、T中、T下以及电机工作状态关系如下:
当T>T上时,三台电机同时工作。
当T中〈丁4上时,两分电机同时工作。
当T下<T〈T中时,一台电机工作。
当TXT下时,关闭全部电机。
0—全部停机,1—1台风机工作,11一2台风机工作,111一3台风机工作。
但为了防止风机频繁切换,所以当温度从一个界限降到另一个界限时并不立即美掉一台风机,而
是要降到下一个界限减一度的时候才关掉一台风机。
2、控制系统设计
2.1系统硬件电路设计
2.1.1电路图、各部分的作用说明
按键电路由四个按键组成用于温度的设定、温控系统的开关。
显示电路由六个数码管组成用于各种数据及状态的显示。
而测温电路主要由DS18B20组成。
2.1.2元件、器件介绍
本电路的单片机采用Atmel公司的AT89s52单片机。最小系统该单片机、按键和显示组成。
7、减键处理流程图
8、温控控制键处理流程图
9、Time。中断服务程序流程图
2.2.2说明
系统开机首先要进行初始化,包括个变量的初始化和中断程序的初始化,最后开系统中断开始工
作。
本系统的中断服务程序的主要工作是更新各个时间标志和调用显示程序。根据设定是每1亳秒发
生一次中断。
本系统的测温间隔由DEF_CHECK」NTERVAL这个预定义设定。具体时间间隔是
DEF_CHECK」NTERVAL*250亳秒。如果测温时间间隔已到相应的标志位flag_check_interval就要置位
以便进入测温程序。
而检测按键的间隔则由flag_50ms这个为变量来控制。每当这个标志置1便可以进入检测按键程
序。
检测按键程序采用了软件去抖动,就是第一次检测到有按褛被按下后就保存该键值并开始计时50
亳秒,50亳秒已到就再次检测按健,如果这次检测到的按键与已保存的键值相等就确定该键值是用户
按下产生的。然后在把这个键值和上次有效键值比较,如果相等就是说这个是重复犍。为了预防用户
按下按犍不放参数变化过快的现象,我们还要判断100亳秒标志位有没有置位,如果100毫秒标志为1
则把这个键值传送个按键判断程序,如果为。则当无效键处理,如果新建值和上次有效键键值不相等,
就是说这个键是新键,马上把这个键值传送个按键判断程序。
按键判断程序接收到键值就根据该键值调用相应的按键处理程序。
温控程序则是以温度和现在开动风机的数量来控制二台风机的状态。
显示程序负责人机对话。前三个数管在非设定状态时显示三台风机的运行状态,第三个数码管在
设定状态时用来指示现在修改的参数。后三个数码管显示测量温度值并在设定状态期间显示上、中、
下三个不同的温度设定值。
3、系统调试
在确定硬件能正常工作后系统调试工作主要就是软件的调试r。
我们首先调试显示程序。从最简单的单个数码管的显示开饴,然后逐步向前。而不是把整个显示
程序写好在调试。这样可能会有很多错误,一下子就被吓得没信心了。
显示程序调试成功后我们接着就可以进行按键程序的编写及调试了。也是从最简单的工作做起,
就是直接检测有没有按键,成功后再加软件去抖动,然后再加重复键和新键的处理程序。一步一步,
最后一个较完美的按键程序就完成了。
做完按键我们就分开两路一些同学搞DS18B20的程序,另外一些同学则负责温度控制程序。但是
还没有测出温度是没有温度值的,所以温控程序的开发就用读随机的方法模拟“可变的温度值”。
在两部分工作都搞完后我们就联合调试了,大家都很高兴的看到显示结果但是显示会随机出现一
些莫名其妙的数值。这个问题困扰了我们很久。因为分析程序都没发现什么错误会出现这种情况。最
后我们决定逐步调试,先是去掉测温程序发现显示正常,按键也正常。我们就怀疑是不是按键和测温
会有相撞。于是我们就加入测温程序,撤去按键程序。发现显示还是有问题。我们就确定是测温的问
题,但是无论怎样分析都是发现测温程序之正确无误的。无奈!一些同学便乱试碰碰运气。最后发现
把测温程序移到中断程序便不会发生错误。惘然大悟。原来是中断的问题。因为如果在测温的过程中
如果发生中断,那就会破坏测温程序。因为测温程序对时间的连续性要求非常严格。最后我们在进入
测温前禁止全局中断,测温完成后再开中断就解决了最大的问题。
4、总结
通过这次课程设计,在老师的指导下,我基木上学会用C语言开发单片机程序,发现用C语言编
写单片机程序很容易实现自己的想法,不用太顾及寄存器的使用、中断向量的编写及免去了一些琐碎
的跳转指令,而且C语言调试程序相当方便。不过这些都需要有扎实的汇编基础,不然在写短延时的
时候就会束手无策C
通过这次课程设计我进一步学习了一个系统开发的步骤,苜先要把整个系统的硬件系统搞出来,
然后按照要求开始做软件的流程图。在这之后就一步一步地按照流程图编写程序。
最后就是体会到了用模块化编程的好处。用模块化编程可以把大问题细分成一个个小问题。各个
模块各司其职,然后合并成一个完整的程序。
5、参考
6、附录(程序清单)
//Cautions:
//temptemperature
//scl:sclcct
//whc:which
//con:content
//disp:display
#include<reg52.h>
#inckidc<absacc.h>
#include<stdlih.h>
#dcfinelcd_dataXBYTE[OxEOOO|
#defineled_selXBYTE[OxCOOO]
#definekey_addXBYTE[OxAOOO|
#definedisp_start_pos3//valuefromOto3arewelcomed
#defineDEF_CHECK_INTERVAL4
#defineMAX_TEMP_MAX250
#defineMAX_TEMP_MIN200
#dcfincMIN_TEMP_MAX150
#defineMIN_TEMP_MIN100
sbitDQ=P1A0:
unsignedcharcodedot_temp[16]={0,0,1,123,3,4,5,5,6,6,7,8,8,9};
//data_disp:leddisplayarray
unsigncdchardatadata_dispf6]={0x00.0x00.0x00,0x00.0x00,0x00};
unsignedintdatasetting[3]={0x64.0x96,0x0C8};
unsigncdintcur_(cmp=200;
unsignedchaidatacount_50ms=0;
unsigncdchardatacount_100ms=G;
unsignedchaidatacount_250ms=0;
unsignedchaidatacount_check_interval=0;
unsignedchardataold_key_val=0;
unsignedchardataworking_fans=0;
//cur_pos:currcntdisplayinglcd
unsignedchaidatacur_pos=0;
//flash_cur_pos:justfbrflashingled
unsignedchardataflash_cur_pos=0;
//cur_var:currentmodifyingsetting
unsignedchardatacur_var=O;
//sys_statue:flagsofthesystem
unsigncdcharbdatasys_statuc=O;
//2msreached
sbitflag_Ims=sys_statucA0;
//50msreached
sbitflag_50ms=sys_sta(ueA1:
//lOOmsreached
sbitflag100ms=sys_statue/'2;
//500msreached
sbitflag_250ms=sys_statue/'3;
//keypressed,systemparameterisbeingmodifying
sbitflag_modifying=sys_sta:ueA4;
//forcommonuse
sbitflag_temp=sys_stalueA5;
//fortempeiaturecheckinterval
sbitflag_check_intcrval=sys_statucA6;
//coolingsystempenabledornot
sbitflag_sys_enabled=sys_s:atueA7;
voiddivide_c()n(unsignedintcon_disp)
(
unsignedcharcodetab[10]={Dx3F,0x06,0x5B,0x4F,0x66,0x6D.0x7D,0x07,0x7F,0x6F};
unsignedinttemp=O;
//138/1OO=1
temp=con_disp/l00;
data_disp[disp_start_pos]=tabltemp];
//138-100*1=38
con_disp=con_disp-100*tcmp;
//38/1O3;
tcmp=con_disp/10;
iemp=iab[iemp];
//displayradixpoint
data_disp[disp_start_pos+\=tcmp|0x80;
//38%l0=8
tcinp=con_disp%10;
data_disp[disp_start_pos+2^=tab[temp];
}
voiddisp(void)
{
//flashing
ied_data=0x00;
lcd_scl=0xff;
led_data=data_disp[cur_pos];
ied_sel=-(1«cur_pos);
if(cur_pos<6)
{
++cur_pos;
)
else
{
cur_pos=0;
)
)
/*
unsignedchaiupdatedisp(unsignedcharwhcsegment)
(
)
*/
/*
unsigned!ntread_temp(void)
(
cur_temp+=20;
if(cur_tcnip>600)
cur_temp=200;
rcturn(cur_temp);
)
*/
unsignedcharkey_press(void)
{
unsignedchardatawhc_key=D;
led_data=OxOO;
lcd_scl=OxFE;
whc_key=key_add;
whc_key=-whc_key;
retum(whc_key);
)
voidkcy2_proccss(void)
|
if(cur_var==l)
{
if(se(ting[01<MIN_TEMP_MAX)
(
settinglcur_var-l]=settinglcur_var-1j+10;
divide_con(set(ing[cur_var-1]);
)
}
elseif(cur_var==3)
{
if(setting[2]<MAX_TEMP_MAX)
(
selting[cur_var-1]=setting[cur_var-1]+i0;
divide_con(setting[cur_var-l]);
)
)
setting(l]=setting[0]+setting[2];
setting[l]=setting[l]»1;//div2
)
voidkey3_process(void)
(
if(cur_var==l)
{
if(settinglcur_var-11>MIN_TEMP_MIN)
I
settinglcur_var-l]=settinglcur_var-1j-10:
divide_con(setting(cur_var-1]);
)
elseif(cur_var==3)
if(setting[cur_var-l]>MAX_TEMP_MIN)
(
selting[cur_var-1|=setting[cur_var-1]-10;
divide_con(setting[cur_var-1]);
)
I
setting(l]=setting[0]+setting[2];
setting(I]=setting[1]»l;//div2
)
voidkey4_pn)cess(void)
(
nag_sys_enabled=~fiag_sys_enabled;
if(~flag_sys_enabled)
{
data_disp[0]=0x3F;
data_disp|l]=0x3F;
data_disp⑵=0x3F;
I
)
voidkey_process(unsignedcharkey_kpval)
(
//waituntilrelease
//keyIprcssdandnowrclcasc
//timescur_var_bef()recur_var_after
//101
//212
//323
//434
if(key_kpval==l)
(
data_disp[O]=OxOO;
data_disp[11=0x00;
data_disp[2]=0x00;
tlag_modifying=l;
if(cur_var==O)
(
data_disp[2]=0xC8;
}
elseif(cur_var==l)
(
data_disp⑵=0x40:
}
elseif(cur_var==2)
data_disp[2]=0xCl;
else
{
data_disp[2]=OxCO;
)
divide_con(seuing[cur_var]);
++cur_var;
if(cur_var==4)
(
flag_modifying=0;
cur_var=O;
}
return;
)
elseif(kcy_kpval==8)
{
kcy4_proccss();
return;
}
//key2pressdandnowrelease
if(flag_modifying)
{
if(key_kpval==2)
{
key2_process();
}
Z/key3pressdandnowrelease
if(key_kpval==4)
(
key3_process();
)
)
)
unsignedcharread_key(void)
{
unsignedchardatakey_vaI=O;
key_val=keypressO;
if(key_val)
{
//delay100ms
flag_50ms=0;
count_50ms=0;
whiIe(!flag_50ms);
flag_50ms=0;
if(kcy_val==kcy_prcss()&&kcy_val==okl_kcy_vai)//
if(flag_100ms==l)
tlag_IOOms=O;
return(key_val);
)
else
{
return(O);
1
)
elseif(key_val==key_press())
{
old_key_val=key_val;
flag_100ms=0;
count_100ms=0;
retum(key_val);
)
else
(
relum(O);
I
)
)
/*
voidcooling_control(unsignedinlcur_temp_b)
(
unsignedcharlemp_k)gic=O;
temp_logic=cur_tenip>=setunglO]-l0&&working_fans==1;
if(cur_temp_b>=setting[0]||ienip_logic)
{
working_fans=l;
temp_logic=cur_temp>=setting[l]-10&&working_fans==2;
if(cur_temp_b>=setting[1]||temp_logic)
(
working_fans=2;
(emp_logic=cur_temp>=setting[0]-10&&working_fans==3;
iffcur_tempb>=setting|2|||temp_logic)
{
working_fans=3;
I
)
)
else
working_fans=0;
}*/
voidcooling_control(unsignedintT)
(
if(T<selting|O])
{
if(T<setting[O]-l0||working_fans==0)
{
working_fans=0;
)
)
elseif(T>=setting[O]&&T<setting[1])
{
if(T<setling(l]-lO||working_fans==1)
{
working_fans=l;
)
)
elseif(T>=setting[l]&&T<setting[2])
{
if(T<setting[2]-l0||working_fans==2)
{
working_fans=2;
)
)
else
(
working_fans=3;
)
)
voidled_flashing(void)
{
if(-flag_modifying)
{
if(working_fans==3)
{
data_disp[0]=(0x3l«flash_cur_pos);
datadisplI|=datadisplOI:
data_disp[2]=data_disp[0];
)
elseif(working_fons==2)
I
data_displO]=Ox3F;
data_disp[I]=(Ox31«flash_cur_pos);
data_disp⑵=data_disp[1];
elseif(working_fans==l)
data_disp[0]=0x3F;
data_disp|Il=0x3F;
data_disp[2]=(0x91«flash_cur_pos);
)
elseif(working_ians==0)
{
data_disp[0]=0x3F;
data_disp[1]=0x3F;
data_disp[2]=Ox3F;
)
++flash_cur_pos;
if(flash_cur_pos==6)
{
flash_cur_pos=0;
//................................................................................................
//DS18B20
//-------------------------------------------------------------------------
voiddelay(unsigncdintt)
|
)
Z/3?e??-DS18B20
voidInit_DS18B20(void)
{
//unsignedx;
DQ=0;//?-r?u-T3?C????'????3?
dclay(29);//?6c±,66u480us
DQ=I;
dclay(3);/4ic,yDS18B20?i6|£??9????30us
//x=DQ7/e?1?x=O,?d3?e??-3el)£?x=l£??o3?e??-e§°u£???D?3?e??'
delay(25);
//return(x);
}
unsignedcharReadOneChar(void)
|
unsignedchardatai;
unsignedchardatahyle=O;
for(i=0;i<8;i++)
(
byte»=1;
DQ=O:
DQ=1;
delay(l);
if(DQ)
byle|=0x80;
)
delay(6);
}
reiurn(byte);
)
voidWritcOncChar(unsigncdcharbytc)
(
unsignedchari;
for(i=0;i<8;i++)
|
DQ=O:
DQ=byte&0x01;
dclay(5);
DQ=1;
byte=bytc/2;
)
delay(5);
)
unsigned!ntGetTemperature(void)
{
unsignedchaia=0,b=0,temp_float=0;
unsigncdin(t=O;
Init_DS18B20();
WriteOneChar(OxCC);
WriteOneChar(Ox44);
Init_DSl8B20();
WritcOncChar(OxCC);
WriteOneChar(OxBE);
a=RcadOncChar();
b=ReadOneChar();
temp_float=a&OxOf;
iemp_float=dot_iemp[tenip_float];
a=a»4;
b=b«4;
t=b|a;
(=t*10+temp_float;
retuni(t);
)
voidinit_timerO(void)
|
TMOD=0x01;//workininodc1
TH0=0xFC;
TL0=0x65;
TRO=I;Z/stan
voidtime_process(void)
(
++count_50ms;
++count_100ms;
++count_250ms;
if(count_50ms==50)
(
count_50ms=0;
flag_50ms=l;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年佳木斯富锦市面向社区专职网格员公开招聘社区工作者207人考试模拟试题及答案解析
- 2026四川眉山岷江产业投资集团有限公司第二批次招聘6人备考题库及参考答案详解1套
- 2026北京丰台方庄社区卫生服务中心招聘4人考试备考题库及答案解析
- 温泉康养综合体建筑设计方案
- 水库项目技术方案
- 2026贵州黔西南州兴仁市城南街道社区卫生服务中心就业见习生招聘1人笔试参考题库及答案解析
- 2026黑龙江齐齐哈尔市克东县五保供养服务中心招聘消防设施操作人员6人笔试模拟试题及答案解析
- 2026新疆博尔塔拉州博乐市农佳乐农业科技有限公司招聘3人笔试模拟试题及答案解析
- 初中生绿色消费2025说课稿
- 光伏电站视频监控方案
- 悬挑式卸料平台监理实施细则
- 加油站公共安全风险评估报告
- 铸件(原材料)材质报告
- 提货申请单表
- 脑与认知科学概论PPT(第2版)完整全套教学课件
- 【初中化学】中国化学家-李寿恒
- 镭雕机作业指导书
- 生管指导手册(什么是PMC)
- 历届全国初中数学联赛真题和答案
- 国家义务教育监测八年级模拟试题(音乐)
- GB/T 8685-2008纺织品维护标签规范符号法
评论
0/150
提交评论