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

2019-07-20 22:17发布

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

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



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
49条回答
流年丶
2019-07-21 13:02
/*****************************************************************************
Function name : APP_LED_Task
Description: APP LED模块的任务函数,在HCI_Task中当HCI_LED事件被置位的时候,将被执行
Input: NONE               
Return: NONE     
Notes:
******************************************************************************/
void APP_LED_Task(void)
{
    U8 HWOpMode;
    U8 ucIndex;
    for(ucIndex = 0; ucIndex < LED_MAX; ucIndex++)
    {
        HWOpMode = LED_OFF;
        if(APP_LED_FLASH == s_AppLedTB[ucIndex].OpMode)
        {
            if(s_AppLedTB[ucIndex].usDelayCnt >= TASK_HCI_LED_TB)
            {
                s_AppLedTB[ucIndex].usDelayCnt -= TASK_HCI_LED_TB;
            }
            else
            {
                s_AppLedTB[ucIndex].usDelayCnt = 0;
            }
            
            if(s_AppLedTB[ucIndex].usDelayCnt > 0)
            {
                continue;
            }
            
            HWOpMode = ((LED_ON == s_AppLedTB[ucIndex].HWState) ? (LED_OFF) : (LED_ON));
            s_AppLedTB[ucIndex].usDelayCnt =  s_AppLedTB[ucIndex].usPeriod;
            
            
            if(255 == s_AppLedTB[ucIndex].ucTime)
            {
                continue;  
            }
            if(--s_AppLedTB[ucIndex].ucTime == 0)
            {
                s_AppLedTB[ucIndex].OpMode = APP_LED_OFF;
            }   
        }
        else
        {
            
            if(s_AppLedTB[ucIndex].ulTimeCnt >= TASK_HCI_LED_TB)
            {
                s_AppLedTB[ucIndex].ulTimeCnt -= TASK_HCI_LED_TB;
            }
            else
            {
                s_AppLedTB[ucIndex].ulTimeCnt = 0;
            }
            
            if((s_AppLedTB[ucIndex].ulTimeCnt > 0) || (~0 == s_AppLedTB[ucIndex].ulTimeOut))
            {
                continue;
            }
            HWOpMode = LED_OFF;
        }
        
        if(HWOpMode == s_AppLedTB[ucIndex].HWState)
        {
            continue;
        }
        BSP_LED_Operate(ucIndex, HWOpMode);
        s_AppLedTB[ucIndex].HWState = HWOpMode;        
    }
}

一周热门 更多>