分享一个不错的【程序框架】+【按键状态机】+【LED状态机】程序

2019-07-20 22:17发布

本帖最后由 流年丶 于 2019-7-7 20:52 编辑

游客,如果您要查看本帖隐藏内容请回复
用了几年的前后台程序框架,稳定可靠,保证每次执行的任务都为最高优先级任务,楼下会对该程序框架做一些说明。
按键状态机:支持短按,长按,双击处理,程序简洁,简单易懂。
LED状态机:支持各个频率的LED闪烁,常亮,常暗操作。
注:该程序是从 基于2G通讯项目中截取下来的两个模块,项目源码不好分享,有兴趣可以加我Q:842936992
//本程序只供学习使用,未经作者许可,不得用于其它任何用途
//引用请注明出处,有问题可在本帖中提出讨论,也可加我Q一起交流探讨



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
49条回答
流年丶
1楼-- · 2019-07-21 14:22
/*****************************************************************************
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);
}
流年丶
2楼-- · 2019-07-21 18:37
重构后的LED配置函数
/*****************************************************************************
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)
流年丶
3楼-- · 2019-07-22 00:20
 精彩回答 2  元偷偷看……
流年丶
4楼-- · 2019-07-22 04:35
/*****************************************************************************
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;
    }
}
流年丶
5楼-- · 2019-07-22 07:50
 精彩回答 2  元偷偷看……
流年丶
6楼-- · 2019-07-22 11:47
/*****************************************************************************
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);
}

一周热门 更多>