【转载请注明出处: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;
}