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