本帖最后由 流年丶 于 2019-7-7 20:52 编辑
游客,如果您要查看本帖隐藏内容请
回复
用了几年的前后台程序框架,稳定可靠,保证每次执行的任务都为最高优先级任务,楼下会对该程序框架做一些说明。
按键状态机:支持短按,长按,双击处理,程序简洁,简单易懂。
LED状态机:支持各个频率的LED闪烁,常亮,常暗操作。
注:该程序是从 基于2G通讯项目中截取下来的两个模块,项目源码不好分享,有兴趣可以加我Q
:842936992。
//本程序只供学习使用,未经作者许可,不得用于其它任何用途
//引用请注明出处,有问题可在本帖中提出讨论,也可加我Q一起交流探讨。
Function name : APP_LED_Config
Description: APP LED模块配置函数,通过调用该函数来操作LED实现各种功能
Input: LedId->LED的编号
OpMode->操作模式APP_LED_OFF/APP_LED_ON/APP_LED_FLASH;
ulTimeOut->当OpMode选择APP_LED_ON时,亮灯的时间;
usPeriod->当OpMode选择APP_LED_FLASH时,闪烁的周期;
ucTime->当OpMode选择APP_LED_FLASH时,闪烁的次数;
Return: NONE
Notes: ¸该函数已使用宏定义重构,详情使用请查看APP_LED.H文档
******************************************************************************/
void APP_LED_Config(U8 LedId, U8 OpMode, U32 ulTimeOut, U16 usPeriod, U8 ucTime)
{
U8 HWOpMode;
if(LedId >= LED_MAX)
{
return;
}
HWOpMode = LED_OFF;
memset((U8*)&s_AppLedTB[LedId], 0, sizeof(APP_LED_TB));
s_AppLedTB[LedId].OpMode = OpMode;
if(APP_LED_FLASH == OpMode)
{
s_AppLedTB[LedId].usPeriod = usPeriod;
s_AppLedTB[LedId].usDelayCnt = usPeriod;
s_AppLedTB[LedId].ucTime = ucTime * 2 - 1;
HWOpMode = LED_TOGGLE;
s_AppLedTB[LedId].HWState = LED_ON;
}
else
{
s_AppLedTB[LedId].ulTimeOut = ulTimeOut;
s_AppLedTB[LedId].ulTimeCnt = ulTimeOut;
if(APP_LED_ON == OpMode)
{
HWOpMode = LED_ON;
s_AppLedTB[LedId].HWState = LED_ON;
}
}
BSP_LED_Operate(LedId, HWOpMode);
}
/*****************************************************************************
Function name : APP_LED_LightDarkConfig
Description: APP LED模块配置函数,通过调用该函数来操作LED实现各种功能
Input:
LedId->LED编号
OpMode->操作模式APP_LED_OFF/APP_LED_ON;
ulTimeOut->当OpMode选择APP_LED_ON时,亮灯的时间,~0表示一直亮灯;
Return: NONE
Notes:
******************************************************************************/
#define APP_LED_LightDarkConfig(LedId, OpMode, ulTimeOut) APP_LED_Config(LedId, OpMode, ulTimeOut, 0, 0)
/*****************************************************************************
Function name : APP_LED_FlickerConfig
Description: APP LED模块配置函数,通过调用该函数来操作LED实现各种功能
Input:
LedId->LED编号
usPeriod->当OpMode选择APP_LED_FLASH时,闪烁的周期;
ucTime->当OpModeÑ选择APP_LED_FLASH时,闪烁的次数,ucTime为U8类型,取值255表示一直闪烁;
Return: NONE
Notes:
******************************************************************************/
#define APP_LED_FlickerConfig(LedId, usPeriod, ucTime) APP_LED_Config(LedId, APP_LED_FLASH, 0, usPeriod, ucTime)
Function name : APP_KEY_Init
Description: APP Key模块的初始化函数,在程序上电初始化的时候调用
Input: NONE
Return: NONE
Notes:
******************************************************************************/
void APP_KEY_Init(void)
{
U8 ucIndex;
memset((U8*)&s_stKeyTcb, 0, sizeof(s_stKeyTcb));
for(ucIndex = 0; ucIndex < KEY_MAX ;ucIndex++)
{
s_stKeyTcb[ucIndex].KeyId = ucIndex;
s_stKeyTcb[ucIndex].process = Key_ProcessTbl[ucIndex];
s_stKeyTcb[ucIndex].ucState = KEY_RELEASE;
}
}
Function name : Read_KeyState
Description: 读取对应KeyId的键值
Input: KeyId->按键编号
Return: 返回按键状态
Notes:
******************************************************************************/
static U8 Read_KeyState(U8 KeyId)
{
if(KeyId >= KEY_MAX)
{
return KEY_ERROR;
}
return ((BSP_ReadKeyValue(KeyId) == 1) ? KEY_PUSH : KEY_RELEASE);
}
一周热门 更多>