基于51单片机的大棚温湿度检测系统的设计与实现

{ Nhumi+=1; //按下一次,湿度数值加1

if(Nhumi>=99) {Nhumi=99;}

write_eeprom(); //保存数据,写数据到单片机内部的eeprom中

S_Temp=Nhumi;

set_temp();}}} //调用湿度设置函数

if(!K3) //按下减按键

{ delay_1ms(80); if(!K3) { //光线 if(yemian==1)

{ Nlight-=1; //每按下一次,数值减1

if(Nlight<=1) {Nlight=1;}

write_eeprom(); //保存数据,写数据到单片机内部的eeprom中

Light=Nlight*100; set_light();}

//温度 if(yemian==2)

{ Ntemp-=1; //每按下一次,数值减1

if(Ntemp<=1) {Ntemp=1;}

write_eeprom(); //保存数据,写数据到单片机内部的eeprom中

S_Temp=Ntemp; set_temp();}

//湿度 if(yemian==3)

{ Nhumi-=1; //每按下一次,数值减1

if(Nhumi<=1) {Nhumi=1;}

write_eeprom(); //保存数据,写数据到单片机内部的eeprom中

S_Temp=Nhumi;

31

set_temp();}}}}

4.3.2数据采集模块

系统元件和端口初始化完成,系统稳定之后,开始监测温湿度及光照度,并在LCD1602液晶显示屏上显示温湿度及光照度。 (1)温湿度监测的核心代码如下:

void receive() //接收数据

{ uchar T_H,T_L,R_H,R_L,check,num_check;//定义各参数的高八位、低八位 uchar count;

start(); //开始信号 io=1;

if(!io) //读取DHT11响应信号

{ count=2;

while((!io)&&count++); //DHT11高电平80us是否结束 count=2;

while((!io)&&count++); //DHT11高电平80us是否结束 T_H=receive_byte(); T_L=receive_byte(); check=receive_byte();

io=0; //拉低延时50us delay1();delay1();delay1();delay1();delay1(); io=1;

num_check=R_H+R_L+T_H+T_L; if(num_check=check) { RH=R_H; RL=R_L; TH=T_H; TL=T_L;

check=num_check;}}}

32

(2)光照度监测的核心代码如下:

void Single_Write_BH1750(uchar REG_Address) { BH1750_Start(); //起始信号 BH1750_SendByte(REG_Address); //内部寄存器地址, BH1750_SendByte(REG_data); //内部寄存器数据, BH1750_Stop(); } //发送停止信号 //连续读出BH1750内部数据 void Multiple_read_BH1750(void) { uchar i;

BH1750_Start(); //起始信号

BH1750_SendByte(SlaveAddress+8); //发送设备地址+读信号 for (i=0; i<3; i++) //连续读取2个地址数据,存储中BUF { BUF[i] = BH1750_RecvByte(); //BUF[0]存储0x32地址中的数据 if (i == 3)

{ BH1750_SendACK(1);} //最后一个数据需要回NOACK else{BH1750_SendACK(0); } } //回应ACK BH1750_Stop(); //停止信号 Delay5ms();} 4.3.3 数据接收与显示模块

当系统建立连接之后,接收并显示温湿度和光照度,下面分别介绍温湿度和光照度数据的接收与显示。 (1)温湿度数据接收与显示

单片机控制温湿度传感器监测环境的温湿度并进行分析和处理,结果显示在LCD1602液晶显示屏上,该模块的核心代码如下: void show_dht11()

{ receive(); //调用温湿度采集函数

DisplayOneChar(3,0,RH/10+'0'); //显示湿度数据 DisplayOneChar(4,0,RH+'0');

33

DisplayOneChar(11,0,TH/10+'0'); //显示温度数据 DisplayOneChar(12,0,TH+'0');}

(2)光照度数据接收与显示

单片机控制光照度传感器监测环境的光照强度并进行分析和处理,结果显示在LCD1602液晶显示屏上,该模块的核心代码如下: void working()

{ Single_Write_BH1750(0x01); // power on

Single_Write_BH1750(0x10); // H- resolution mode

Multiple_Read_BH1750(); //连续读出数据,存储在BUF中 dis_data=BUF[0];

dis_data=(dis_data<<8)+BUF[1]; //合成数据,即光照数据 temp=(float)dis_data/1.2;

conversion(temp); //计算数据和显示 DisplayOneChar(7,1,wan); //显示数据 DisplayOneChar(8,1,qian); DisplayOneChar(9,1,bai); DisplayOneChar(10,1,shi); DisplayOneChar(11,1,ge); } 4.3.4 指示灯与继电器模块

当监测的温度、湿度和光照度不在预先设置的范围值时,相应的指示灯亮起,继电器驱动风扇和加湿器开始工作。 void baojing() { //control_temp

if(temp<=Nlight*100 )

{ control_light=0;}//如果监测的光照度小于设置的光照度,光线不足指示灯亮

if(temp>Nlight*100 )

{ control_light=1;}//如果监测的光照度大于设置的光照度,光线不足指示不亮

if(TH>=Ntemp )

34

联系客服:779662525#qq.com(#替换为@)