这里是程序代码
/************************************************
* 文件名 : 阳台植物自动灌溉系统.c
* 描述 : 每十秒钟检测一次土壤湿度传感器,当湿度
小于一定值之后进行灌溉,否则检测温度,
当温度高于前一温度的1.2倍时进行浇灌,
否则继续进行检测
**************************************************/
#include<reg52.h>
#include<intrins.h>
#include"DS18B20.h"
#define uchar unsigned char
#define uint unsigned int
sbit humidity=P2^0; //土壤湿度标志位
sbit irrigate=P2^1; //开始灌溉标志位
sbit P12=P1^3;
sbit P13=P1^3;
sbit P14=P1^4;
sbit P15=P1^5;
sbit P16=P1^6;
sbit P17=P1^7;
uchar Count = 0;
char t1,t2; //温度值
/***********************************************
*延时1MS函数
************************************************/
void delay(uint x)
{
uchar m,n;
for(m=x;m>0;m--)
for(n=110;n>0;n--);
}
/***********************************************
* 名称 : Time0_Init()
* 功能 : 定时器的初始化,11.0592MZ晶振,50ms
* 输入 : 无
* 输出 : 无
************************************************/
void Time0_Init()
{
TMOD = 0x01;
IE = 0x82;
TH0 = 0x4c;
TL0 = 0x00;
TR0 = 1;
}
/**********************************************
* 名称 : Time0_Int()
* 功能 : 定时器中断,中断中实现 Count 加一
* 输入 : 无
* 输出 : 无
************************************************/
void Time0_Int() interrupt 1
{
TH0 = 0x4c;
TL0 = 0x00;
Count++; //长度自加1
}
/**********************************************
* 名称 : Main()
* 功能 : 主函数
* 输入 : 无
* 输出 : 无
************************************************/
void main()
{
Time0_Init(); //定时器初始化
DS18B20_start_change(); //启动温度转换函数
delay(1000);
t1=DS18B20_read_date(); //读取温度数值函数
while(1)
{
t2=1.2*t1;
while(1)
{ P16=0;
if(Count >= 200) //当Count为 20 时,i 自加一次,200 * 50MS = 10S
{ P17=0;
Count = 0;
DS18B20_start_change(); //启动温度转换函数
delay(1000);
t1=DS18B20_read_date();//读取温度数值函数
if (humidity==1) //湿度标志位检测为高电平时
{ P13=0;
irrigate=1; //开始灌溉
break;
}
else
if(t1>t2) //当温度高于前一温度的1.2倍时
{ P14=0;
irrigate=1; //开始灌溉
break;
}
else
{ P15=0;
irrigate=0; //不进行灌溉
break;
}
}
}
}
} |