一个按键扫描算法

来源:互联网 发布:堆排序算法 编辑:程序博客网 时间:2024/06/04 19:49

【转载请注明出处:blog.csdn.net/lanmanck】

int i=0,port,trigger,continues=0,cnt=0;    int trigger_long=0;    uint32_t last_keys=0,this_keys=0;while(1){for(port=0xFF,i=0;i<ARRAY_SIZE(g_keys);i++){            if(GPIO_ReadInputDataBit(g_keys[i].port, g_keys[i].gpio)==1){                port &= ~g_keys[i].val;            }        }        this_keys = port;        if(last_keys == this_keys){            port = port ^ 0xFF;            trigger = port & (port^continues);            continues = port; /* 只要按键没有松开,这个值永远是0x01 */            if(trigger){                //trace_debug(MID_KEY,"press 0x%X\r\n",trigger);                trigger_long |= trigger;            }            if(continues){                             if(++cnt == 200){                    trace_debug(MID_KEY,"long press 0x%X\r\n",continues);                    trigger_long = 0;                }            }else{                cnt = 0;                if(trigger_long){                    trace_debug(MID_KEY,"press 0x%X\r\n",trigger_long);                    trigger_long = 0;                }            }        }        last_keys = this_keys;}


原创粉丝点击