系统功能:
此设计采用51核单片机STC8系列来完成,系统采集环境温湿度光照强度土壤湿度等数据显示在OLED上,并将这些信息上报至手机蓝牙APP。
系统分为手动和自动模式,上电默认为自动模式,自动模式下如获取到的土壤湿度AD值大于设定的土壤湿度AD值时自动开启继电器,手动模式下可通过按键或手机APP手动开关继电器。
系统功能框图:

主要功能模块原理图:



系统主要功能模块代码
初始化代码:
//========================================================================
// 系统初始化
//========================================================================
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三个版本),源代码,系统框图,主程序流程图,物料清单(包含使用到的器件手册),功能操作说明等。


1887

被折叠的 条评论
为什么被折叠?



