0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于51单片机的智能花盆设计

白茶茶668 来源:白茶茶668 作者:白茶茶668 2023-08-01 00:52 次阅读

项目名:

基于单片机智能花盆设计

单片机:STC89C52

功能:

1、通过显示屏显示花盆中土壤的温度、湿度,花盆外光照强度;

2、通过按键切换显示屏的界面,设置土壤最小温度值、最小湿度值,花盆外光照强度值,输液倒计时,松土倒计时;

3、通过土壤湿度传感器检测土壤湿度,通过DS18B20检测土壤温度;

4、通过继电器控制加热片,水泵,输液,补光灯;

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

wKgaomTH5tqAV4B0AAQ1lveAWqA823.png

部分程序:

#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;

}

}

}

wKgZomTH5tuACJthAAJgjJJ9BdU096.png

wKgZomTH5tyASY-JAAZ65dpYf3o323.png

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 继电器
    +关注

    关注

    132

    文章

    5363

    浏览量

    149689
  • 单片机
    +关注

    关注

    6044

    文章

    44632

    浏览量

    639386
  • 51单片机
    +关注

    关注

    274

    文章

    5705

    浏览量

    124492
收藏 人收藏

    评论

    相关推荐

    怎样去设计基于STM32F103C8T6单片机智能花盆远程浇水系统

    基于STM32F103C8T6单片机智能花盆远程浇水补光设计一、产品介绍1、本产品由STM32F103C8T6单片机核心电路+温湿度传感器DHT11电路+LCD1602液晶显示电路+继电器控制电路
    发表于 12-06 06:29

    基于单片机智能花盆的设计资料分享

    设计简介:本设计是基于单片机智能花盆,主要实现以下功能:LCD1602显示当前温度、土壤湿度以及光照值继电器控制加热、水泵、输液以及补光步进电机模拟松土可通过按键设置温度、土壤湿度、光照度、松土
    发表于 01-24 07:05

    基于51单片机循迹智能小车

    基于51单片机循迹智能小车基于51单片机循迹智能小车基于51
    发表于 11-13 15:55 0次下载

    基于51单片机循迹智能小车

    基于51单片机的循迹智能小车设计方案 仅供初学者参考
    发表于 11-20 15:46 278次下载

    基于51单片机循迹智能小车

    基于51单片机循迹智能小车程序加原理加仿真。
    发表于 05-05 14:06 19次下载

    基于51单片机智能循迹小车的设计

    基于51单片机智能循迹小车的设计,智能车设计
    发表于 06-02 16:16 182次下载

    51单片机教程

    51单片机学习详细教程,学习51单片机必备
    发表于 08-31 17:02 98次下载

    基于51单片机智能台灯

    电子发烧友网站提供《基于51单片机智能台灯.zip》资料免费下载
    发表于 05-26 08:00 189次下载

    什么是51单片机?又该如何自学51单片机

    51 单片机是目前使用最多的单片机之一,那么什么是 51 单片机呢?作为新手,又该如何自学 51
    的头像 发表于 11-03 21:14 7381次阅读

    51单片机是什么?应该如何学习51单片机

    51 单片机是目前使用最多的单片机之一,那么什么是 51 单片机呢?作为新手,又该如何自学 51
    发表于 12-23 07:57 73次下载

    51单片机(一)—— 51单片机简介

    一、51单片机标识信息 通常我们所说的51单片机是指以51内核扩展出的单片机。生产
    发表于 11-11 18:06 245次下载
    <b class='flag-5'>51</b><b class='flag-5'>单片机</b>(一)—— <b class='flag-5'>51</b><b class='flag-5'>单片机</b>简介

    468【毕设课设】基于STM32单片机远程智能花盆GSM短信浇水补光设计

    468【毕设课设】基于STM32单片机远程智能花盆GSM短信浇水补光设计
    发表于 11-23 18:21 31次下载
    468【毕设课设】基于STM32<b class='flag-5'>单片机</b>远程<b class='flag-5'>智能</b><b class='flag-5'>花盆</b>GSM短信浇水补光设计

    基于单片机智能花盆

    设计简介:本设计是基于单片机智能花盆,主要实现以下功能:LCD1602显示当前温度、土壤湿度以及光照值 继电器控制加热、水泵、输液以及补光 步进电机模拟松土 可通过按键设置温度、土壤湿度、光照度
    发表于 11-29 10:36 20次下载
    基于<b class='flag-5'>单片机</b>的<b class='flag-5'>智能</b><b class='flag-5'>花盆</b>

    基于51单片机智能鱼缸设计

    电子发烧友网站提供《基于51单片机智能鱼缸设计.rar》资料免费下载
    发表于 01-07 09:45 4次下载

    基于51单片机智能鱼缸设计

    电子发烧友网站提供《基于51单片机智能鱼缸设计.rar》资料免费下载
    发表于 01-12 10:32 7次下载