#include <reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
uchar time_num=0;
uchar time1,time2;
uint W_ad=0;
uint sum = 0;
uchar C_temp=0;
uchar data discop[4]={0};
uchar Set_flag=0;
uchar Temp_H=40,Temp_L=20;
uchar Hum_H=40,Hum_L=20;
sbit KEY1=P3^4;
sbit KEY2=P3^5;
sbit KEY3=P3^6;
sbit KEY4=P3^7;
sbit Relay=P2^0;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
#include"DS18B20.H"
#include"ADC0832.H"
#include"LCD1602.H"
void keyscan()
{
uchar i=0;
if(!KEY1)
{
delay(5);
if(!KEY1)
{
Set_flag++;
if(Set_flag>4)
{
Set_flag=0;
WRITE_LCD1602_COM(0x80);
for(i=0;i<16;i++)
WRITE_LCD1602_DAT(DIS_TAB1[i]);
WRITE_LCD1602_COM(0x80+0x40);
for(i=0;i<16;i++)
WRITE_LCD1602_DAT(DIS_TAB2[i]);
}
else if(Set_flag==1)
{
WRITE_LCD1602_COM(0x80);
for(i=0;i<16;i++)
WRITE_LCD1602_DAT(DIS_TAB3[i]);
WRITE_LCD1602_COM(0x80+0x40);
for(i=0;i<16;i++)
WRITE_LCD1602_DAT(DIS_TAB4[i]);
}
while(!KEY1);
}
}
else if(!KEY4)
{
delay(5);
if(!KEY4)
{
Set_flag=0;
WRITE_LCD1602_COM(0x80);
for(i=0;i<16;i++)
WRITE_LCD1602_DAT(DIS_TAB1[i]);
WRITE_LCD1602_COM(0x80+0x40);
for(i=0;i<16;i++)
WRITE_LCD1602_DAT(DIS_TAB2[i]);
while(!KEY4);
}
}
switch(Set_flag)
{
case 1:
if(!KEY2)
{
delay(5);
if(!KEY2)
{
if(Hum_H<99)
Hum_H++;
while(!KEY2);
}
}
else if(!KEY3)
{
delay(5);
if(!KEY3)
{
if(Hum_H>0)
Hum_H--;
while(!KEY3);
}
}
break;
case 2:
if(!KEY2)
{
delay(5);
if(!KEY2)
{
if(Hum_L<99)
Hum_L++;
while(!KEY2);
}
}
else if(!KEY3)
{
delay(5);
if(!KEY3)
{
if(Hum_L>0)
Hum_L--;
while(!KEY3);
}
}
break;
case 3:
if(!KEY2)
{
delay(5);
if(!KEY2)
{
if(Temp_H<99)
Temp_H++;
while(!KEY2);
}
}
else if(!KEY3)
{
delay(5);
if(!KEY3)
{
if(Temp_H>0)
Temp_H--;
while(!KEY3);
}
}
break;
case 4:
if(!KEY2)
{
delay(5);
if(!KEY2)
{
if(Temp_L<99)
Temp_L++;
while(!KEY2);
}
}
else if(!KEY3)
{
delay(5);
if(!KEY3)
{
if(Temp_L>0)
Temp_L--;
while(!KEY3);
}
}
break;
}
}
void Control()
{
if(W_ad<Hum_L)
{
Relay=0;
TR0=0;
}
else if((C_temp>Temp_H)||(C_temp==Temp_H&&discop[3]>0))
{
if(TR0==0)
{
TR0=1;
time2=20;
}
else if(time2==0)
{
if(Relay==1)
{
Relay=0;
time2=5;
}
else
{
Relay=1;
time2=20;
}
}
}
else if(W_ad>Hum_H)
{
TR0=0;
Relay=1;
time2=0;
}
}
void main()
{
float Ad_dat=0;
uchar temp_buf=0;
uchar i=0;
init_1602();
TMOD=0X01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
ET0=1;
TR0=0;
EA=1;
while(1)
{
time_num++;
sum+=A_D();
if(time_num==10)
{
time_num=0;
Ad_dat=(float)(sum/10);
Ad_dat=(255.0-Ad_dat)/2.55;
W_ad=(uint)(Ad_dat);
sum=0;
}
Read_18B20_Temperature();
if(temp_buf==Tem_dispbuf[4])
{
if(i<5)
i++;
}
else
{
i=0;
temp_buf=Tem_dispbuf[4];
}
if(i==5)
{
C_temp=Tem_dispbuf[4];
discop[0]=10;
discop[1]=Tem_dispbuf[2];
discop[2]=Tem_dispbuf[1];
discop[3]=Tem_dispbuf[0];
}
display();
keyscan();
Control();
}
}
void timer0_int() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
time1++;
if(time1>19)
{
time1=0;
if(time2>0)
time2--;
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
本资源内容概要: 这是基于51单片机的土壤温湿度测量自动控制浇水设计,包含了电路图源文件(Altiumdesigner软件打开)、C语言程序源代码(keil软件打开)、元件清单(excel表格打开)。 本资源适合人群: 单片机爱好者、电子类专业学生、电子diy爱好者。 本资源能学到什么: 可以通过查看电路学习电路设计原理,查看代码学习代码编写原理。 本资源使用建议: 建议使用者需要具备一定电子技术基础,掌握一些常用元器件原理,例如三极管、二极管、数码管、电容、稳压器等。了解C语言基础设计原理,能看懂基础的电路图,具备一定的电路图软件使用能力。
资源推荐
资源详情
资源评论
收起资源包目录
65、基于51单片机土壤温湿度测量自动控制浇水.rar (28个子文件)
65、基于51单片机土壤温湿度测量自动控制浇水
土壤温湿度程序
MAIN 20KB
MAIN.hex 7KB
MAIN.uvproj 13KB
土壤温湿度测量.pdf 58KB
MAIN.uvopt 56KB
MAIN.LST 13KB
MAIN_uvopt.bak 56KB
DS18B20.H 2KB
MAIN.C 4KB
MAIN_uvproj.bak 0B
MAIN.plg 546B
ADC0832.H 1KB
LCD1602.H 3KB
MAIN.lnp 40B
MAIN.M51 28KB
MAIN.OBJ 23KB
电路图
土壤温湿度测量.PrjPCB 30KB
土壤温湿度测量.SchDoc 113KB
土壤温湿度测量.OutJob 8KB
__Previews
土壤温湿度测量.SchDocPreview 73KB
土壤温湿度测量.pdf 322KB
土壤温湿度测量.PcbDoc.htm 6KB
土壤温湿度测量.PcbDoc 1002KB
土壤温湿度测量.PcbDocPreview 55KB
土壤温湿度测量.PrjPCBStructure 53B
土壤温湿度测量.sch 34KB
Free Documents.OutJob 4KB
元件清单
土壤温湿度测量.xls 9KB
共 28 条
- 1
资源评论
>行者<
- 粉丝: 209
- 资源: 135
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功