46-基于51单片机智能苗圃温室大棚自动恒温抽水系统源程序、原理图、PCB、元器件清单实物制作

功能介绍:采用51单片机作为主控CPU,采用ds18b20采集当前的温度,采用YL-69传感器采集土壤湿度,采用继电器驱动风扇进行排气,采用加热电阻进行加热升温,采用水泵进行抽水加湿,采用按键设置温湿度的阈值,当湿度低于阈值,水泵打开抽水,当温度小于下限阈值,加热电阻导通进行升温,当温度大于上限阈值,风扇打开进行排气,相关数据显示到LCD1602屏幕上面,文末有资料分享:

46-基于51单片机智能苗圃温室大棚自动恒温抽水系统(程序+原理图+PCB+元器件清单全套资料)

程序打开办法:特别注意:下载资料包以后一定要先解压!(建议解压到桌面上,文件路径太深会导致程序打开异常),解压后再用keil5打开。  

 

sbit key1=P3^2;//设置键
sbit key2=P3^3;//功能键
sbit jiare=P3^7;//加热
sbit fengshan=P3^4;//风扇
sbit choushui=P3^5;//抽水

void delay9(unsigned int a) //延时函数
{
unsigned int i;
while (--a!=0)
for(i=600;i>0;i--);   
}

void ADC_Init()//ADC初始化
{
P1ASF=0x07;
AUXR1=0x00;
ADC_RES=0;
ADC_RESL=0;
ADC_CONTR=0x80;
delay9(2);
}

uint ADC_Get(uchar Channel)//读取ADC值
{
ADC_CONTR=0x88|Channel;
_nop_(); _nop_(); _nop_(); _nop_();
while(!(ADC_CONTR&0x10));  
ADC_CONTR&=0xe7;      
return(ADC_RES*4+ADC_RESL);   
}

float ADC_Value(uchar Channel)//读取ADC通道值
{
	
float AD_Value;
uint i;
		ADC_Init();//ADC初始化
	delay_ms(100);
for(i=0;i<10;i++) 
AD_Value+=ADC_Get(Channel); 
AD_Value/=10;
AD_Value=(AD_Value*5)/1024;
return AD_Value;
}


void USART_Init()
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd; //波特率9600
SCON=0x50; 
TR1=1;
	TI=1;
}

void  delay_m(int ms)//延时函数
{
     int i;
	 do{
	      i = 11059200L / 13000;
		  while(--i)	;   //14T per loop
     }while(--ms);
}


void main()
{
	//jiare=fengshan=choushui=1;
	USART_Init();
		ADC_Init();//ADC初始化
	init();//LCD初始化
	delay_m(500);

    while (1)
		{
			if(key1==0)//设置按键
			{
				while(key1!=1);
				buf++;
				if(buf>2) buf=0;
			}
			if(buf==0&&key2==0)//设置温度下限
			{
				wendu_l++;
				if(wendu_l>wendu_h)
					wendu_l=1;
			}
			if(buf==1&&key2==0)//设置温度上限
			{
					wendu_h++;
				if(wendu_h>99) wendu_h=20;
			}		
			if(buf==2&&key2==0)//设置湿度下限
			{
				shidu++;
				if(shidu>99) shidu=1;
			}		

			nongdu=(500-(ADC_Value(3)*100)*0.2);	//湿度
		
						
			write_1602(13, nongdu%100/10+0x30);		//显示湿度 	
			write_1602(14, nongdu%10+0x30);

			Get_Tmp();	//读取温度

			write_1602(5, wendu%1000/100+0x30);//显示温度
			write_1602(6, wendu%100/10+0x30);	
			write_1602(8, wendu%10+0x30);
					

			write1_1602(3, wendu_l%100/10+0x30);	//显示温度下限
			write1_1602(4, wendu_l%10+0x30);

			write1_1602(9, wendu_h%100/10+0x30);	//显示温度上限
			write1_1602(10, wendu_h%10+0x30);
			
			write1_1602(14, shidu%100/10+0x30);	  //显示湿度下限
			write1_1602(15, shidu%10+0x30);			

下面是原理图展示: 

下面是PCB文件展示: 

百度云盘资料分享链接 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值