【资源下载】下载地址如下:
https://docs.qq.com/doc/DTlRSd01BZXNpRUxl
设一个温室大棚模型(用鞋盒子模拟),最上层铺上一层透明塑料保鲜膜。
设计由51单片机电路、
1602液晶显示电路、
光照检测电路、
土壤湿度检测电路组成。
A/D模块PCF8591电路、
1颗高亮LED灯补光电路、
温度检测DS18B20电路、
1颗黄色高亮LED灯加热电路、
风扇电路、
水泵灌溉电路、
4位按键电路、
1、通过光敏电阻检测光照强度,然后A/D模块PCF8591处理后,将光照强度值实时显示在液晶上,并且可以按键控制光照的强度值,
当光照低于设定的阈值,1颗白色高亮LED灯亮进行补光,光照高于设定的阈值,就不用管。
2、通过DS18B20检测温度值,并且实时显示在1602液晶上,并且可以通过按键设定温度值,当温度低于设定值时,通过一颗黄色高亮LED灯模拟。当温度超过设定值时,风扇旋转。
3、通过土壤湿度传感器检测土壤的湿度,并且将湿度值实时显示在液晶上,并且可以设定土壤的使读者,当土壤湿度小于设定的阈值,水泵加水。大于阈值时,不动作。
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#include<stdio.h>
#include "1602.h"
#include "delay.h"
#include "sysdefine.h"
#include"18b20.h"
sbit led_l = P1^0;
sbit led_b = P1^1;
sbit fan = P1^4;
sbit relay = P1^3;
sbit key_s = P3^4;
sbit key_a = P3^5;
sbit key_u = P3^6;
void Init_Timer0(void);
unsigned char readTem = FALSE ;//定义读时间标志
unsigned char readADCFlag = FALSE ;
int temp;
float temperature = 0;
char disdat[16]; //打印数组初始化
char disset[16];
unsigned long time_20ms=0; //定时器计数
float Lv=0.0; //光照采集电压
float Tv=0.0; //土壤采集电压
unsigned int Lval =0; //光照强度
unsigned int Rval = 0; //土壤湿度
unsigned int distem;
unsigned char rekey = 0;
unsigned char SetFlag = 0; //设置值
unsigned char setLval = 50;
unsigned char setRval = 50;
unsigned char setTval = 30;
void main (void)
{
unsigned char midval;
Init_Timer0();
LCD_Init(); //初始化液晶
DelayMs(20); //延时有助于稳定
LCD_Clear(); //清屏
sprintf(disdat,"L:%2d R:%2d T:%2d C",Lval,Rval,distem);//打印电压电流值
LCD_Write_String(0,0,disdat);//显示
sprintf(disset," L:%2d R:%2d T:%2d",(unsigned int)setLval,(unsigned int)setRval,(unsigned int)setTval);//打印电压电流值
LCD_Write_String(0,1,disset);
while (1) //主循环
{
来源:oschina
链接:https://my.oschina.net/u/4398646/blog/4721067