按键处理的函数

2019-10-16 07:59发布

u8 get_key_state(void)
{
        static u8  temp_key_state = KEY_STATE_UP;
    static u8  temp_key_value = 0;
    static u32 temp_key_dealy_count = 0;                //消抖计时
    static key_value_truct temp_key_value_mode;
        if (temp_key_state == KEY_STATE_UP)        //按键为弹起状态                          /* 按键为弹起状态             */
    {
        temp_key_value = get_key_value(&temp_key_value_mode);
        if(temp_key_value > 0)
        {
            temp_key_dealy_count = 0;
            temp_key_state = KEY_STATE_DOWN;
        }
        }
        if (temp_key_state == KEY_STATE_DOWN)                           /* 判断按键是否按下           */
    {
        temp_key_dealy_count++;                                                                                //消抖计时自加
        if (temp_key_dealy_count > KEY_DELAY_COUNT)                                        //如果大于消抖计数器数值则进行清零
        {
            temp_key_dealy_count = 0;                                                               
            if (temp_key_value == get_key_value(&temp_key_value_mode))   /* 判断按键是否为按下状态     */
            {   
                if (temp_key_value_mode.key_mode == KEY_MODE_COMBO)      /* 判断按键是否为连击模式     */
                {
                    return  temp_key_value;                                                               
                }
                else
                {
                    return  0x00;
                }
            }
            else                                                      
            {
                temp_key_state = KEY_STATE_UP;                                                         /* 按键弹起                    */
                if (temp_key_value_mode.key_mode == KEY_MODE_NORMAL)    /* 如果按键为单击模式返回键值  */
                {
                    return  temp_key_value;
                }
                else
                {
                    return  0x00;
                }   
            }   
        }
    }
        return 0x00;
}


这是一个函数,但是不明白啥意思,谁能帮我讲解一下

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。