一、设计简介:
本设计是基于51单片机DHT11温湿度4个继电器控制 LCD1602系统设计,主要实现以下功能:
1. 单片机型号:STC89C52/51、AT89C52/51、AT89S52/51 都可通用
2.产品自带单片机上电复位电路、手动复位电路(复位按键)、晶振电路(给单片机提供时钟周期)。
3.采集LCD1602液晶显示温度和湿度值,报警参数可以同时显示出来,直观明了。
4.有4个报警指示灯,分别代表温度过高、温度过低、湿度过高、湿度过低。
5.可以设置温度和湿度的上下限报警范围,并具有掉电保存功能,保存在STC单片机内部,上电无需重新设置。
6.当DHT11测出来的温湿度超出设置的范围时,蜂鸣器会报警,同时对应的报警指示灯会变亮。
7.DHT11传感器湿度测量范围:10%~95%RH;温度测量范围:0~50℃
主要硬件组成:
51单片机+液晶LCD1602显示屏+DHT11温湿度传感器+按键+继电器+蜂鸣器+LED灯
二、原理图
三、PCB图
四、Proteus仿真
五、程序源码
部分代码:
/********************独立按键程序*****************/
uchar key_can; //按键值
void key() //独立按键程序
{
key_can = 0; //按键值还原成0
if(key1 == 0 || key2 == 0 || key3 == 0) //有按键按下
{
delay_1ms(1); //按键延时消抖动
if(key1 == 0) //确认是按键按下
key_can = 3; //得到按键值
if(key2 == 0) //确认是按键按下
key_can = 2; //得到按键值
if(key3 == 0) //确认是按键按下
key_can = 1; //得到按键值
}
}
/****************按键设置函数***************/
void key_with()
{
if(key_can == 1) //设置键
{
menu_1 ++;
if(menu_1 > 4)
{
menu_1 = 0; //menu_1 = 0 退出设置了,在正常显示界面下
init_1602(); //lcd1602初始化显示
}
}
if(menu_1 == 1) //设置温度上限报警值
{
if(key_can == 2) //加键
{
t_high ++ ; //设置温度上限报警值 加1
if(t_high > 99)
t_high = 99;
}
if(key_can == 3) //减键
{
t_high -- ; //设置温度上限报警值 减1
if(t_high <= t_low)
t_high = t_low + 1; //限制温度上限不能低于温度下限
}
write_lcd2(1,8,t_high); //显示上限报警值
write_com(0x80+8); //将光标移动到第1行第8位
write_com(0x0f); //显示光标并且闪烁
}
if(menu_1 == 2) //设置温度下限报警值
{
if(key_can == 2) //加键
{
t_low ++ ; //设置温度下限报警值 加1
if(t_low >= t_high)
t_low = t_high - 1; //限制温度下限不能高于温度上限
}
if(key_can == 3) //减键
{
t_low -- ; //设置温度下限报警值 减1
if(t_low <= 1)
t_low = 1;
}
write_lcd2(1,13,t_low); //显示温度下限报警值
write_com(0x80+13); //将光标移动到第1行第13位
write_com(0x0f); //显示光标并且闪烁
}
if(menu_1 == 3) //设置湿度上限报警值
{
if(key_can == 2) //加键
{
s_high ++ ; //设置湿度上限报警值加1
if(s_high > 99)
s_high = 99;
}
if(key_can == 3) //减键
{
s_high -- ; //设置湿度上限报警值减1
if(s_high <= s_low)
s_high = s_low + 1; //限制湿度上限不能低于湿度下限
}
write_lcd2(2,8,s_high); //显示湿度上限报警值
write_com(0x80+0x40+8); //将光标移动到第2行第8位
write_com(0x0f); //显示光标并且闪烁
}
if(menu_1 == 4) //设置湿度下限报警值
{
if(key_can == 2) //加键
{
s_low ++ ; //设置湿度下限报警值 加1
if(s_low >= s_high)
s_low = s_high - 1; //限制湿度下限不能高于湿度上限
}
if(key_can == 3) //减键
{
s_low -- ; //设置湿度下限报警值 减1
if(s_low <= 1)
s_low = 1;
}
write_lcd2(2,13,s_low); //显示湿度下限报警值
write_com(0x80+0x40+13); //将光标移动到第2行第13位
write_com(0x0f); //显示光标并且闪烁
}
}
/*****************读温湿度传感器程序****************/
void dht11_dis()
{
uchar i,j;
dht11 = 0; //DHT11端口复位,发出起始信号
delay_1ms(20);
dht11 = 1;
delay_uint(4);
if(dht11 == 0) //判断是否响应
{
while(dht11 == 0); //等待低电平时间过完
while(dht11 == 1); //等待高电平时间过完
for(i=0;i<5;i++)
{
for(j=0;j<8;j++)
{
table_dht11[i] <<= 1; //数据左移一位低位自动补0
while(dht11 == 0); //等待低电平时间过完
delay_uint(4); //数据1的高电平时间
if(dht11 == 1)
{
table_dht11[i] |= 0x01;
while(dht11 == 1); //等待高电平时间过完
六、资源获取
本项目包含的所有文件都可以点击下面的名片,发送 “ 59、基于51单片机DHT11温湿度4个继电器控制 LCD1602系统设计 ” 获取!
项目纯手打,不是免费的哦~
希望可以帮到你哈!