简单易懂 经典按键检测程序(包含长按功能)

来源:互联网 发布:seo外包公司哪家好 编辑:程序博客网 时间:2024/05/16 20:28
    1. //此程序已经经过多年经验验证,如有疑问,请留言,我会尽快回复.
      /**************************************** // 函数名称:Key_scan// 函数功能:检测按键功能// 入口参数:无  // 出口参数:无  // 返 回 值: 无
      //**************************************/void Key_scan(void) // 2毫秒执行一次{ static uint8 key_value0=0;//按键前一次的状态寄存器static uint8 key_delay=0;//延时抖动时间存器static uint8 key_longtime;//长按按键基准时间1static uint8 key_longtime1;//长按按键时间 总时间=key_longtime*key_longtime1*2ms+10ms(10ms为清抖时间)key_value=0; if(!P_K1)//按键扫描SW1{key_value=1; } if(!P_K2)//按键扫描SW2{key_value=2; }if(!P_K3)//按键扫描SW3{key_value=4; } if(!P_K4)//按键扫描SW4{key_value=8; } if(!P_K5)//按键扫描SW5{key_value=16; }   if(key_value==key_value0)//如不相等,保存当前按键值,清抖{if(key_delay>5)//抖动处理{if(key_value>0)//无按键按下确认,等于0时表示无按键,清释放标识位{if(!f_onkey)//判断按键是否释放{f_onkey=1;switch(key_value){case 1://SW1有效执行内容break;case 2://SW2有效执行内容break;case 4://SW3有效执行内容break; case 8://SW4有效执行内容break;case 16://SW5有效执行内容break;default: break;}}else{ if(++key_longtime>90) {key_longtime=0;if(++key_longtime1>6){key_longtime1=0;f_longkey=1;//长按按键有效} }}} else//按键释放{f_onkey=0;f_longkey=0;}}else  //有按键 {key_delay++;}  }
      else//保存当前按键值  {key_value0=key_value;key_delay=0;  }}

        


原创粉丝点击