您的位置 首页 芯闻

单片机按键处理总结

按键检测方法处理不同事件的对比,所有按键都以PIC16F505的RC4为输入端口作为例子。方法1:Voidscan(){if(RC4==0){Delay(50);if(RC4

按键检测办法处理不同作业的比照,一切按键都以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;
staticbitfinish=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不会闪耀。
以上是实践作业中常常用到的按键处理办法,跟着作业进展,更多的按键检测办法渐渐会被记载。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/news/xinwen/318448.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部