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

2019-07-20 22:17发布

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

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



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
49条回答
流年丶
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);
}

一周热门 更多>