采用51单片机作为主控CPU;可以采集当前的温湿度,并且LCD1602显示,可以通过按键设置温湿度的上下阈值,当超过此设置阈值,蜂鸣器进行报警提醒,并且继电器启动对应的功能,比如低于温度设置的最低值,开启加温,高于温度设置的最高值,开启降温,低于设置的湿度最低值,开启加湿,高于湿度设置最高值,开启祛湿,文末有资料分享
222-基于51单片机智能加湿器Proteus仿真(程序+仿真+全套资料)
程序部分展示,有中文注释,新手容易看懂
sbit Led_jiashi=P3^6; //加湿
sbit Led_qushi=P3^4; //去湿
sbit Led_jiangwen=P3^2; //降温
sbit Led_shengwen=P3^3; //升温
//定义三个设置按键
sbit Key_SET = P2^0;
sbit Key_ADD = P2^1;
sbit Key_SUB = P2^2;
sbit Key_OK = P2^3;
//定义24C02数据口
sbit SCL = P1^0;
sbit SDA = P1^1;
//定义DHT11数据口
sbit DATA = P1^7;
sbit buzz=P3^5;
//定义LCD1602端口
sbit E=P1^3; //1602使能引脚
//sbit RW=P2^6; //1602读写引脚
sbit RS=P1^2; //1602数据/命令选择引脚
//定义全局变量
/*
sbit Led_jiashi=P1^4; //加湿
sbit Led_qushi=P1^5; //去湿
sbit Led_jiangwen=P1^6; //降温
sbit Led_shengwen=P1^7; //升温
//定义三个设置按键
sbit Key_SET = P1^0;
sbit Key_ADD = P1^1;
sbit Key_SUB = P1^2;
sbit Key_OK = P1^3;
//定义24C02数据口
sbit SCL = P2^1;
sbit SDA = P2^0;
//定义DHT11数据口
sbit DATA = P3^7;
sbit buzz=P3^2;
//定义LCD1602端口
sbit E=P2^7; //1602使能引脚
//sbit RW=P2^6; //1602读写引脚
sbit RS=P2^6; //1602数据/命令选择引脚
sbit RW=P2^5;
*/
uchar U8FLAG,U8temp,U8comdata,U8RH_data_H_temp,U8RH_data_L_temp,U8T_data_H_temp,U8T_data_L_temp,U8checkdata_temp;
uchar U8RH_data_H,U8RH_data_L,U8T_data_H,U8T_data_L,U8checkdata;
uchar Mode,humidity,temperature;
char TH,TL,HH,HL;
bit bdata FlagStartRH,hot,cold,humid,dry,BJ,flag_1,flag_2;//flag_1温度标志是否发短信,flag_2标志湿度报警是否发短信
#define NULL 0
#define RsBuf_N 120
unsigned char idata RsBuf[RsBuf_N]; //定义串口接收数据缓冲区
uchar RsPoint;
unsigned char dianhuahaoma[12]="15046397767\0";
a
//定时器0初始化
void Timer0_Init()
{
ET0 = 1; //允许定时器0中断
TMOD = 0x21; //定时器工作方式选择
TL0 = 0xFF;
TH0 = 0x4B; //定时器赋予初值
TR0 = 1; //启动定时器
}
//定时器0中断
void Timer0_ISR (void) interrupt 1 using 0
{
uchar RHCounter;
TL0 = 0xFF;
TH0 = 0x4B; //定时器赋予初值
RHCounter++;
if(RHCounter%10==0&&BJ==1)
buzz=!buzz;
else if(BJ==0)
buzz=1;
//每2秒钟启动一次温湿度转换
if (RHCounter >= 40)
{
FlagStartRH = 1;
RHCounter = 0;
}
}
/*********************************
BASE DRIVE
**********************************/
void DELAY(unsigned int t)
{
while(t!=0)
t--;
}
/******************************
IIC DRIVE
******************************/
void IICStart(void)
{
SCL=0;
DELAY(1);
SDA=1; SCL=1; DELAY(1);
SDA=0; DELAY(1);
SCL=0;
}
void IICStop(void)
{
SDA=0;SCL=1; DELAY(1);
SDA=1; DELAY(1);
SCL=0;
}
void SEND0(void)
{
SDA=0;
SCL=1;
DELAY(1);
SCL=0;
}