蔬菜大棚温度控制系统Word文档下载推荐.docx
- 文档编号:22407059
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:27
- 大小:92.79KB
蔬菜大棚温度控制系统Word文档下载推荐.docx
《蔬菜大棚温度控制系统Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《蔬菜大棚温度控制系统Word文档下载推荐.docx(27页珍藏版)》请在冰豆网上搜索。
比较以上两种方案,很容易看出,采用方案二,电路比较简单,软件设计容易实现,故实际设计中拟采用方案二。
3电路设计
3.1键盘电路
因为本设计使用键盘数比较少,只要5个按键就足够了,故可以直接接在端口即可。
图3.1键盘电路
3.2显示电路设计
将P1与显示的数据端相连,采用模拟时序形式电路。
电路接线如图3-2
图3.2显示电路
3.3报警电路设计
报警电路对实时温度的检测,温度过高或过低报警灯亮,并且蜂鸣器根据不同的报警情况,发出不同频率的声音。
图3.3报警电路
3.4传感器电路设计
本设计使用的是DS18B20,采用单总线方式连接。
图3.4传感器电路
3.5电机控制电路设计
电机电路利用继电器来控制电机开断。
电路如图图3.5
图3.5电机控制电路设计
第4章程序设计
4.1C语言
软件对整个系统来说是至关重要的,是整个系统的灵魂,整个系统的执行操作都是在软件的协调指挥下进行的。
用于计算机程序设计的语言分为机器语言、汇编语言和高级语言。
本测控系统的软件的编写主要采用C语言编写。
4.2控制程序设计
本系统软件设计采用模块化的设计思路,即整个系统的程序软件由许多独立的子程序模块组成,它们之间通过软件接口进行连接。
连接的原则是:
模块内数据关系紧凑,模块间数据关系松散,按功能划分模块。
整个软件系统的程序可分为四个大模块,即主程序模块、参数设置程序模块、现场数据采集显示模块和执行处理程序模块。
每个模块都具有一定的功能,每个模块又可分为许多子模块,既相互独立又相互联系,低级模块可以被高级模块调用。
4.3主控制程序设计
主程序是整个测控系统中最重要的程序,各个子程序都在主程序的协调指挥下运行,是一个顺序执行的无限循环程序,可以被任何优先级的中断请求所打断。
各个环境参数的测试和控制指令的判断都在各个测控子程序中进行,主程序的主要功能是实现系统的初始化、实现系统自检、响应中断请求进而调用数据处理子程序。
主程序的初始化工作主要完成对8255A、AD590、LED、ADC0809。
主流程图见图4.1。
5总结
早在选题之前,我就利用平时的时间看DS18B20芯片资料,当初认为DS18B20延时要很精确,所以我必须写出精确的延时程序。
但是C语言延时是不好精确地,为了写出那种很精确的延时程序,在网上找了很多资料,也学会了利用反汇编来计算延时,还有可以利用keil这个软件进行一些调试,也可测出延时时间。
延时解决后,以为一切都会很顺利,但往往看起来容易的事情总有想不到的问题。
在写DS18B20驱动程序时,读出来显示的温度值总是不对,左看右看,我知道问题肯定是出在数据处理上。
于是我上网看别人是怎么进行数据处理,结合很多网上程序后,最后选择了其中一种的方法,但一切并不顺利,一篇又一篇的调试,不知调试了多少次终于成功了。
DS18B20驱动写出来了后,1602显示程序以前写过,所以可以移植过来,所以减少了不少的时间。
大的结构确定后,就是修改一些细节上。
比如我的温度比较范围是从-20---99,这在软件控制上,看上去很简单。
可最后代码写下来也不少。
而且我也是调试了蛮多次的。
主要是以前从没有独立做过这种课程设计。
所以没有经验,很多细节上处理的不是很好。
所以自己只有不断地去学习别人怎么处理,然后结合自身来处理细节上的问题。
利用了几天的时间,终于是在PROTEUS上仿真成功了。
但我的设计还是存在一些问题,比如反映时间不是很快,这些问题是值得去注意的。
再者,在Proteus上仿真通过,而没有做出实物,那也永远只是理论水平。
所以,尽管课程设计完成了,我要做的还远远不够。
在写课程设计的论文时,也得到了同学的帮助,同学也帮忙完成了一些。
通过这次课程设计,让我对于单片机的项目有了一个认知。
我更近一步看清了前方的路。
很多东西是接下来必须去做的。
总之,要学的还很多,只有不断地学习,才能轻松的处理事情。
有句话说的很对“只有很努力,才能看起来毫不费力”。
课程设计搞完了,我的单片机学习还是不会断,因为我学的还真不够。
最后感谢给与我指点的老师和同学。
虽然我没有很强烈的表达在表面,但我一直都记住的。
没有你们,我可能会走很多弯路才能做到,一生中遇到你们这些贵人是我的荣幸。
感谢你们。
6参考文献
1.赵晶.Protel99高级应用[M].人民邮电出版社,2006年.
2.谷树忠.ProtelDXP实用教程[M].电子工业出版社,2003年.
3.刘湘涛,江世民.单片机原理与应用[M].电子工业出版社,2006年.
4.孙育才.ATMEL新型AT89c51系列单片机及其应用[M].清华大学出版社,2005年.
5.李华.MCU-51系列单片机实用接口技术[M].北京:
北京航空航天大学出版社,1993年.
6.张迎新,雷道振.单片机初级教程[M].北京航天航空大学出版社,2006年.
7.李朝青.单片机原理及接口技术.北京:
北京航空航天大学出版社,2009年.
8.潘新民,王燕芳.微型计算机控制技术.北京:
电子工业出版社,20011年.
附录一:
总原理图
附件一:
系统程序
#include<
reg51.h>
absacc.h>
intrins.h>
#defineuintunsignedint
#defineucharunsignedchar
#defineulintunsignedlongint
ucharcodetable0[]={//欢迎界面
0xa0,0x57,0x65,0x6c,0x63,0x6f,0x6d,0x65,
0xa0,0x74,0x6f,0xa0,0x75,0x65,0x73,0xa0,
0xa0,0xa0,0x74,0x68,0x65,0x72,0x6d,0x6f,
0x6d,0x65,0x74,0x65,0x72,0x21,0xa0,0xa0};
uchartable1[]={0x6d,0x61,0x78,0x3a,0x00,0x00,0x00,0xa0,//存储报警值
0x6d,0x69,0x6e,0x3a,0x00,0x00,0x00,};
uchartable2[]={//存储温度
0x54,0x4d,0x50,0x54,0x3a,
0x00,0x00,0x00,0x00,0xa5,0x00,0x00,0x43};
ucharcodetable3[]={//提醒设定报警值
0xa0,0x50,0x6c,0x65,0x61,0x73,0x65,0xa0,
0xa0,0x63,0x68,0x61,0x72,0x67,0x65,0xa0,
0xa0,0xa0,0xa0,0x79,0x6f,0x75,0x72,0xa0,
0x63,0x61,0x72,0x64,0x21,0xa0,0xa0,0xa0};
uchartable4[]={//输入界面
0x50,0x6c,0x65,0x61,0x73,0x65,0xa0,0x69,
0x6e,0x70,0x75,0x74,0x3a};
sbitE=P3^7;
sbitRW=P3^6;
sbitRS=P3^5;
sbitflag=P1^7;
sbitdec=P3^0;
sbitinc=P3^1;
sbitok_max=P3^2;
sbitok_min=P3^4;
sbitout=P2^1;
sbitDQ=P2^3;
sbitbeep=P2^2;
ucharp,tflag;
uinttvalue;
/*****************延时函数**********************/
voiddelay_18B20(unsignedinti)
{
while(i--);
}
/**********ds18b20初始化函数**********************/
voidInit_DS18B20(void)
unsignedcharx=0;
DQ=1;
//DQ复位
delay_18B20(8);
//稍做延时
DQ=0;
//单片机将DQ拉低
delay_18B20(80);
//精确延时大于480us
//拉高总线
delay_18B20(14);
x=DQ;
//稍做延时后如果x=0则初始化成功x=1则初始化失败
delay_18B20(20);
/***********ds18b20读一个字节**************/
unsignedcharReadOneChar(void)
unsignedchari=0;
unsignedchardat=0;
for(i=8;
i>
0;
i--)
{
DQ=0;
//给脉冲信号
dat>
>
=1;
DQ=1;
if(DQ)
dat|=0x80;
delay_18B20(4);
}
return(dat);
/*************ds18b20写一个字节****************/
voidWriteOneChar(unsignedchardat)
unsignedchari=0;
for(i=8;
i>
i--)
{
DQ=0;
DQ=dat&
0x01;
delay_18B20(5);
DQ=1;
/**************读取ds18b20当前温度************/
unsignedintReadTemperature(void)
{unsignedchartl,th;
floatt;
Init_DS18B20();
WriteOneChar(0xCC);
//跳过读序号列号的操作
WriteOneChar(0x44);
//启动温度转换
//这个延时很重要
//跳过读序号列号的操作
WriteOneChar(0xBE);
//读取温度寄存器等(共可读9个寄存器)前两个就是温度
tl=ReadOneChar();
//读取温度值低位
th=ReadOneChar();
//读取温度值高位
tvalue=th;
tvalue<
<
=8;
tvalue=tvalue|tl;
if(tvalue<
0x0fff)//判断正负
tflag=0;
//符号标记位
table2[5]=0xa0;
//存储'
+'
号
else
tvalue=~tvalue+1;
//负数取反加一
tflag=1;
table2[5]=0x2d;
//存储'
-'
t=tvalue*(0.0625);
tvalue=t*100;
//温度值扩大100倍,精确到2位小数
return(tvalue);
/*************处理当前温度******************/
voidshow1(void);
voidDeelTemperatre(uintt)
table2[6]=t/10000+0x30;
if(table2[6]==0x30)//百位为0,就消隐
table2[6]=0xa0;
}
table2[7]=t%10000/1000+0x30;
//十位
table2[8]=t%1000/100+0x30;
//个位
table2[10]=t%100/10+0x30;
//小数位
table2[11]=t%10+0x30;
/****************警告函数*******************/
voidwarn(uchars,ucharled)
uchari,j,k;
i=s;
P2=~(led);
for(k=0;
k<
20;
k++)
{for(j=0;
j<
200;
j++)//喇叭发声的时间循环,改变大小可以改变发声时间长短
delay_18B20(i);
//参数决定发声的频率,估算值,可以自行更改参数并
beep=!
beep;
P2=0xff;
beep=1;
/******************报警处理函数**************/
voiddeal(uintfuzhi)
uchart1,th,tl,i;
chart1_c,th_c,tl_c,th_s,tl_s;
t1=fuzhi/100;
if(table2[5]==0x2d)//存储实际温度换成有符号数实际温度
{//符号位为'
换成负数
t1_c=t1;
t1_c=~t1_c;
th=(table1[5]-0x30)*10+(table1[6]-0x30);
//存储上限温度换成有符号数温度
if(table1[4]==0x2d)
th_c=th;
th_c=~th_c;
th_s=th_c-2;
//设置第二高温度报警线
tl=(table1[13]-0x30)*10+(table1[14]-0x30);
//存储下限温度换成有符号数温度
if(table1[12]==0x2d)
tl_c=tl;
tl_c=~tl_c;
tl_s=tl_c+2;
//设置低二道报警线温度
if(t1_c>
=th_s&
&
t1_c<
th_c)//大于第二高上限值小于最高上限,进行预报警
warn(20,0x80);
//控制预报警声音,点亮指示灯
out=1;
elseif(t1_c>
=th_c)//高于最高上限
warn(40,0x40);
//先报警
out=0;
//自动开发动机
elseif(t1_c<
=tl_s&
t1_c>
tl_c)//进行预报警
warn(20,0x20);
=tl_c)
warn(40,0x10);
i=5;
//利用显示延时
while(i--)
DeelTemperatre(ReadTemperature());
show1();
out=1;
/*************************LCD显示****************************/
/**********************延时函数***********************/
voiddelay0()
uinta,b;
for(a=0;
a<
600;
a++)
for(b=0;
b<
b++);
voiddelay1()
uinte;
for(e=100;
e>
e--);
voiddelay2()
100;
/***********************判忙函数*********************/
voidbusy()
do
P1=0xff;
RS=0;
RW=1;
E=0;
E=1;
}while(flag);
/*************功能:
写函数**********************************/
/*********入口参数:
con=1代表写指令,con=0代表写数据,com代表数据
/*********出口参数:
无;
**********************************************************/
voidwrite(ucharcon,ucharcom)
busy();
RS=con;
RW=0;
P1=com;
/***********************lcd初始化**********************/
voidinit()
write(0,0x01);
write(0,0x38);
write(0,0x0c);
/***********************显示欢迎界面********************/
voidshow0()
uinti;
write(0,0x80);
for(i=0;
i<
16;
i++)
write(1,table0[i]);
write(0,0xc0);
for(i=16;
32;
delay0();
/***********************显示温度界面*********************/
voidshow1()
uinti,j;
15;
write(1,table1[i]);
for(j=0;
13;
j++)
write(1,table2[j]);
/*************************改值函数******************************/
voidinput()
uchari,sign=0,k=0;
chart=0,z=0;
ok_max=1;
//上限值确认键
ok_min=1;
//下限值确认键
//清屏指令
while(ok_max==1&
ok_min==1)//当确认键按下,结束循环
inc=1;
dec=1;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 蔬菜 大棚 温度 控制系统