赞
踩
本项目使用Proteus8仿真STM32单片机控制器,使用LCD1602液晶、按键、蜂鸣器、DHT11温湿度传感器、水位传感器、PCF8591 ADC、继电器、加湿装置等。
主要功能:
系统运行后,LCD1602显示温湿度、液位值极其阈值;
可通过按键K3进入阈值设置模式,K1和K2调节对应阈值,K4确认;如果检测有人,液位正常,如果检测湿度低于阈值,则打开加湿器;如果检测湿度正常,关闭加湿器;如果检测无人,当前处于加湿状态也将关闭;
/* 作者:嗨小易(QQ:3443792007) */ //系统数据显示 void sys_data_show(void) { while(1) { //温度显示 lcd1602_show_nums(3,0,sys_ctrl.temp,2,0); //液位显示 lcd1602_show_nums(9,0,sys_ctrl.level,2,0); //湿度显示 lcd1602_show_nums(3,1,sys_ctrl.humi,2,0); //液位阈值显示 lcd1602_show_nums(13,0,sys_ctrl.levell,2,0); //湿度阈值显示 lcd1602_show_nums(7,1,sys_ctrl.humil,2,0); //阈值设置位置闪烁 switch(sys_ctrl.mode) { case 1://液位 lcd1602_show_string(13,0," "); delay_ms(100); lcd1602_show_nums(13,0,sys_ctrl.levell,2,0); break; case 2://湿度 lcd1602_show_string(7,1," "); delay_ms(100); lcd1602_show_nums(7,1,sys_ctrl.humil,2,0); break; } //有无人状态显示 if(sys_ctrl.man==1)lcd1602_show_string(15,1,"Y"); else lcd1602_show_string(15,1,"N"); break; } } //系统数据设置 void sys_data_set(void) { u8 key=0; key=KEY_Scan(0); //模式设置 if(key==KEY3_PRESS) { sys_ctrl.mode++; if(sys_ctrl.mode>2)sys_ctrl.mode=1; } //在设置模式下,加 else if(key==KEY1_PRESS) { switch(sys_ctrl.mode) { case 1://液位 sys_ctrl.levell++; if(sys_ctrl.levell>99)sys_ctrl.levell=0; break; case 2://湿度 sys_ctrl.humil++; if(sys_ctrl.humil>99)sys_ctrl.humil=0; break; } } //在设置模式下,减 else if(key==KEY2_PRESS) { switch(sys_ctrl.mode) { case 1://液位 sys_ctrl.levell--; if(sys_ctrl.levell<0)sys_ctrl.levell=99; break; case 2://湿度 sys_ctrl.humil--; if(sys_ctrl.humil<0)sys_ctrl.humil=99; break; } } //确定 else if(key==KEY4_PRESS) { sys_ctrl.mode=0; } } //系统功能控制 void sys_fun_ctrl(void) { //正常模式下 if(sys_ctrl.mode==0) { //有人 if(sys_ctrl.man==1) { //如果液位低于阈值,声光报警 if(sys_ctrl.level<sys_ctrl.levell) { beep_alarm(4,2000); JS_PIN=1;//关闭加湿器 } //正常液位 else { //如果湿度低于阈值,开启加湿,打开报警指示灯 if(sys_ctrl.humi<sys_ctrl.humil) { JS_PIN=0;//打开加湿器 } //如果湿度高于阈值,关闭加湿和指示灯 else { JS_PIN=1;//关闭加湿器 } } } //无人 else { JS_PIN=1;//关闭加湿器 } } } //应用控制系统 void appdemo_show(void) { u8 i=5; sys_parm_init();//系统参数初始化 KEY_Init(); BEEP_Init(); DHT11_Init(); ctrl_pin_init(); pcf8591_init(); lcd1602_init();//LCD1602初始化 //读取数据,等待稳定 while(i--) { sys_data_get(); delay_ms(100); } sys_open_show();//系统初始界面显示 while(1) { sys_data_get();//系统数据获取 sys_data_show();//系统数据显示 sys_data_set();//系统数据设置 sys_fun_ctrl();//系统功能控制 } }
B站演示视频:https://space.bilibili.com/444388619
视频地址:https://space.bilibili.com/444388619/video
专注于51单片机、STM32、国产32、DSP、Proteus、ardunio、ESP32、物联网软件开发,PCB设计,视频分享,技术交流。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。