您当前的位置:首页 >> 聚焦 >  >> 
电路方案:基于51单片机的智能花盆设计
来源: 互联网      时间:2023-08-07 14:44:38


【资料图】

项目名:基于单片机的智能花盆设计

单片机:STC89C52 功能: 1、通过显示屏显示花盆中土壤的温度、湿度,花盆外光照强度; 2、通过按键切换显示屏的界面,设置土壤最小温度值、最小湿度值,花盆外光照强度值,输液倒计时,松土倒计时; 3、通过土壤湿度传感器检测土壤湿度,通过DS18B20检测土壤温度; 4、通过继电器控制加热片,水泵,输液,补光灯;

5、通过步进电机来实现松土;

部分程序:#include "main.h"#include "lcd1602.h"#include "key.h"#include "ds18b20.h"#include "adc.h"#include "motor.h"#include "timer.h"/**********************************变量定义**********************************/uchar key_num = 0; //按键扫描标志位 uchar flag_display = 0; //显示模式标志位bit flag_display_cut = 0; //切换界面标志位uint time_num = 0; //10ms计数变量uint temp_value = 0; //温度值uchar temp_min = 10; //最小温度值uint humi_value = 0; //湿度值uchar humi_min = 30; //最小湿度值uint light_value = 0; //光照强度值uchar light_min = 50; //最小光照强度值uchar time_songtu = 0; //松土时间uint time_minus_songtu = 0; //松土倒计时时间uchar time_shuye = 0; //输液时间uint time_minus_shuye = 0; //输液倒计时时间extern bit flag_songtu_begin; //松土开始标志位extern bit flag_songtu_finish; //松土完成标志位extern bit flag_shuye_begin; //输液开始标志位extern bit flag_shuye_finish; //输液完成标志位/**********************************函数声明**********************************/void Delay_function(uint x); //延时函数void Key_function(void); //按键函数void Monitor_function(void); //监测函数void Display_function(void); //显示函数void Manage_function(void); //处理函数/*********** 主函数 *****/void main(){ Lcd1602_Init(); //LCD1602初始化 Delay_function(50); lcd1602_clean(); //清屏 Delay_function(50); Ds18b20_Init(); //DS18B20初始化 Delay_function(50); Timer0_Init(); //定时器0初使化 Delay_function(50); while(1) { Key_function(); //按键函数 Monitor_function(); //监测函数 Display_function(); //显示函数 Manage_function(); //处理函数 Delay_function(10); //延时10ms time_num++; //间隔10ms计时变量+1 if(time_num >= 5000) //计时累加到5000,重新从0开始累加 { time_num = 0; } }}/*********** 延时 x ms函数*****/void Delay_function(uint x){ uint m,n; for(m=x;m>0;m--) for(n=110;n>0;n--);}/***********按键函数*****/void Key_function(void){ key_num = Chiclet_Keyboard_Scan(0); //按键扫描 if(key_num != 0) //有按键按下 { switch(key_num) { case 1: //按键1,切换界面 flag_display++; if(flag_display >= 6) //一共6个界面 flag_display = 0; lcd1602_clean(); //按一下,清屏一次 break; case 2: switch(flag_display) { case 0: //界面为0时,手动松土 Motor_Foreward(); break; case 1: //界面为1时,修改温度最小值+1 if(temp_min < 99) temp_min++; break; case 2: //界面为2时,修改湿度最小值+1 if(humi_min < 99) humi_min++; break; case 3: //界面为3时,修改光照最小值+1 if(light_min < 99) light_min++; break; case 4: //界面为4时,修改松土时间+1 time_songtu++; time_minus_songtu = time_songtu*60; break; case 5: //界面为5时,修改输液时间+1 time_shuye++; time_minus_shuye = time_shuye*60; break; default: break; } break; case 3: //按键3 switch(flag_display) { case 0: //界面为0时,手动输液 RELAY_SHUYE = 0; //闭合输液继电器,开始输液 Delay_function(3000); //输液三秒 RELAY_SHUYE = 1; //断开输液继电器,停止输液 break; case 1: //界面为1时,修改温度最小值-1 if(temp_min > 0) temp_min--; break; case 2: //界面为2时,修改湿度最小值-1 if(humi_min > 0) humi_min--; break; case 3: //界面为3时,修改光照最小值-1 if(light_min > 0) light_min--; break; case 4: //界面为4时,修改松土时间-1 if(time_songtu > 0) { time_songtu--; time_minus_songtu = time_songtu*60; } break; case 5: //界面为5时,修改输液时间-1 if(time_shuye > 0) { time_shuye--; time_minus_shuye = time_shuye*60; } break; default: break; } break; case 4: //按键4,切换界面 flag_display_cut = ~flag_display_cut; lcd1602_clean(); //按一下,清屏一次 break; default: break; } }}
需要完整的资料可以加入我的纷传圈子,里面有资源压缩包的百度网盘下载地址及提取码。
标签:

X 关闭

X 关闭