【单片机毕业设计选题24073】-基于51单片机的智能浇花系统

系统功能:

系统分为自动和手动模式,自动模式下根据获取到的土壤湿度值和设定的土壤湿度值

对比来自动开关水泵,手动模式下通过按键手动开关水泵。

系统上电后OLED显示如下:

第一行显示获取到的温湿度

第二行显示获取到的光照和和土壤湿度值

第三行显示设定的土壤湿度值

第四行显示系统模式和水泵开关状态

自动模式下短按SW1开关水泵

短按SW2增加土壤湿度设定值

短按SW3减小土壤湿度设定值

短按SW4切换系统模式(手动或自动模式切换)

蓝牙连接后,如果系统处于自动状态则每隔5秒钟上报一次系统状态。

如果系统处于手动状态下则可通过蓝牙下发控制命令,

资料获取地址

发送字符P开关继电器系统功能框图:

主要功能模块原理图:

系统主要功能模块代码

初始化代码:

//========================================================================

//                                系统初始化

//========================================================================

void InitSystem(void)

{

    InitVar();

         InitGPIO();

         InitTimer();

    InitUart();

    InitADC();

    ResetDHT11();

    InitOled();

    InitOledDisp();

    DelayMs(50);

         EA = 1;

}

系统控制代码:
 

//系统信息更新

void SystemControl(void)

{

    static uint8_t updateCnt = 0;

   

    updateCnt++;   

    if(updateCnt>=SYSTEM_UPDATE_INTER)

    {

        updateCnt = 0;

        if(DHT11ReadData()==0)  //DHT11温湿度读取OK

        {

            ;

        }

    }

    ReadSensorVal();

//自动模式下定时上报系统信息

    if(sysMode==AUTO_MODE)

    {

        UpdateBleData();

    }

}

按键检测代码:

/*********************************************************************************

  * @brief  Scan key board

  * @param  None

  * @retval None

  *********************************************************************************/

void ScanKeyBoard(void)

{

         uint8_t keyVal;

        

         keyVal = CheckKeyVal();

         if(KeyInfo.OldVal!=keyVal)     //first time enter after key changed

         {

                  KeyInfo.ReleaseCnt = 0;    //clear key release time count

                  if(keyVal!=NO_KEY_PRESSED_DEF)

                  {

                          KeyInfo.HoldCnt = 0;

                  }

                  KeyInfo.OldVal = keyVal;

         }

         else 

         {

                  if(keyVal!=NO_KEY_PRESSED_DEF)    //have key press

                  { 

//                       if(KeyInfo.HoldDelayCnt<254)

            if(KeyInfo.HoldCnt<1000)

                          {

                                   KeyInfo.HoldCnt++;

                          }                        

                          if(KeyInfo.HoldCnt==SHORT_PRESS_TIME_DEF) //pressed for a short time

                          {

                                   KeyInfo.TempNewVal = KeyInfo.OldVal;

                          }

                  }

                  else    //release

                  {  

                          if(KeyInfo.ReleaseCnt<254) 

                          {

                                   KeyInfo.ReleaseCnt++;

                      }

                          if(KeyInfo.ReleaseCnt==RELEASE_TIME_DEF)

                          {

                if(KeyInfo.HoldCnt>=LONG_PRESS_TIME_DEF)    //长按键

                {

                    KeyInfo.LongPress = KEY_LONG_PRESS;

                }

                else    //短按键

                                   {

                                       KeyInfo.LongPress = KEY_SHORT_PRESS;

                                   }                                 

                KeyInfo.ConfirmVal = KeyInfo.TempNewVal;

                                   KeyInfo.HoldCnt = 0;

                                   KeyInfo.TempNewVal = NO_KEY_PRESSED_DEF;

                          }

                  }

         }

}

实物图片:

此设计提供的资料包含原理图PCB(包含PDF,AD,立创EDA三个版本),源代码,系统框图,主程序流程图,物料清单(包含使用到的器件手册),功能操作说明等。

  • 11
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

单片机毕业设计-远望创客学堂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值