资讯详情

单片机按键处理总结

按键检测方法处理不同事件的对比,所有按键都以PIC16F505的RC4为输入端口作为例子。 方法1: Void scan() { if(RC4==0) { Delay(50); if(RC4==0) { num++;//多事件跳转变量num RC0=1;//按键有效后要做的事情,比如点亮RC0上的LED } } while(!RC4);//松手检测 } 此类按键扫描函数,合适离散型事件,比如一键多能,等。假如把松手检测部分去掉,则合适做LED无极调光,因为,只要按键按住不放,整个函数会一直检测是否有按键按下,并且执行按键有效后的语句。 方法2: void scan() { while(!RC4) { delay(10); i++; } if(i>10)//如果改成if(i>50)则认为是按键长击。否则是短击。 { i=0; RC0=0;//按键有效后腰做的事情 } }

此类函数,灵敏度很高,合适处理松手后有效的事件,同样也是散转型事件,此函数如果把i的条件变一下可以改成长按有效的功能。可以让LED从静态工作状态进入动态工作状态,从单亮转到渐变等等。 方法3: void scan() { static bit key_push; static bit s1_push; static bit s2_push; if(RC4&&RC5)key_push=0;//无按键按下,标志清零 if(!RC4&&!key_push)//如果某个键按下 { key_push=1; s1_push=1; RC0=1;//按键有效后做的事情 } else s1_push=0; if(!RC5&&!key_push)//如果某个键按下 { key_push=1; s2_push=1; RC0=1;//按键有效后做的事情 } else s2_push=0; } 灵敏度高,单次触发,长按无效。一次可以检测7个以上独立按键。 方法4: void KEY1() { static bit valid=0; static bit finish=0; if(valid==0) { if(RC5==0) { if(finish==0) { finish=1; RC1=1; delay(50); RC1=0; RC0=0; PWM+=4; } } else { valid=0; finish=0; } } else { if(RC5==0)valid=1; } } 上面按键处理是一段LED台灯分段调光的代码。单次触发,长按无效,按住不放,LED不会闪烁。 以上是实际工作中经常用到的按键处理方法,随着工作进展,更多的按键检测方法慢慢会被记载。

-电子元器件采购网(www.ruidan.com)是本土元器件目录分销商,采用“小批量、现货、样品”销售模式,致力于满足客户多型号、高质量、快速交付的采购需求。 自建高效智能仓储,拥有自营库存超过50,000种,提供一站式正品现货采购、个性化解决方案、选型替代等多元化服务。
锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台