1、主要功能
该系统由AT89C51单片机+LCD1602模块+DHT11温湿度传感器模块+DS1302时间模块+电机驱动模块+报警模块构成。
可实现功能:
1、LCD1602显示温度+湿度+时间
2、DHT11采集温湿度数据
3、DS1302采集时间数据
4、通过按键来调整温湿度上下限报警值
5、超出限制时蜂鸣器和LED光电报警,对应继电器驱动电机转动,进行加热/降温/除湿/加湿
2、仿真
protues 仿真使用的是8.10版本,由于该软件版本迭代原因,不能确保其他版本软件能够正常运行,请安装好对应软件(版本一致或者高于这个版本都可以)
3、程序代码
只是放上来了部分代码,仅供参考。
/******************************************************
** 函数名:key_scan
** 描述 :按键扫描
** 输入 :无
** 输出 :无
******************************************************/
void key_scan(void)
{
static unsigned char key_in_flag = 0;//按键按下标志
unsigned char key_l;//存储扫描到行列值。
key_value = 20;//按键值清除
if((P3 & 0x0f) != 0x0f)//按键按下
{
delay_ms(1);//按键消抖动
if(((P3 & 0x0f) != 0x0f) && (key_in_flag == 1))
{
key_in_flag = 0;//松手检测防止一直触发
P3 = 0x0f;
//delay_ms(1);//按键消抖动
key_l = P3;//扫描得到按键值
switch(key_l)
{
//获取按键值
case 0x0e:
{
key_value = 1;
}
break;
case 0x0d:
{
key_value = 2;
}
break;
case 0x0b:
{
key_value = 3;
}
break;
//case 0x70:
//break;
}
}
}
else
{
key_in_flag = 1;//(按键松开标志)
}
}
/*******************************************************************************
* 函 数 名 : LcdWriteCom
* 函数功能 : 向LCD写入一个字节的命令
* 输 入 : u8com
* 输 出 : 无
*******************************************************************************/
void lcd_wri_com(unsigned char com) //写入命令
{
E = 0; //使能清零
RS = 0; //选择写入命令
RW = 0; //选择写入
DB = com;
delay_ms(1);
E = 1; //写入时序
delay_ms(5);
E = 0;
}
void main(void)
{
get_1302(time_1302);//获取时间
change(); //时间转换
init_all_hardware();//初始化硬件,IO和定时器
while(1)
{
get_1302(time_1302);//获取时间
change(); //时间转换
if(temp ==0)
{
wri_string(1,0,times);//初始化显示
}
key_scan();//按键扫描
key_service();//按键服务处理函数
time_service();//时间处理函数
}
}
4、原理图
5、参考报告
内含5k字,21页的相关报告一份,纯手打,内容一致
6、常见问题汇总
里面包含了我对各个模块的详细解析,可以结合代码一起理解。如果正巧老师问题多,这个可以帮到你哦。(不定时更新,讲解模块也会越来越多)
7、资源获取
扫描如下二维码,后台回复"51温湿度检测"获取~
项目没有开源,浅浅一杯奶茶💴,支持答疑~
希望可以对你有所帮助哈!