按键检测方法处理不同事件的对比,所有按键都以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不会闪烁。以上是实际工作中经常用到的按键处理方法,随着工作进展,更多的按键检测方法慢慢会被记载。
关键字:PIC16F505 单片机 按键处理
引用地址:PIC16F505单片机按键处理总结
方法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不会闪烁。以上是实际工作中经常用到的按键处理方法,随着工作进展,更多的按键检测方法慢慢会被记载。
上一篇:单片机按键处理总结
下一篇:PIC单片机定时器初值计算方法及几种周期小结
小广播
热门活动
换一批
更多
设计资源 培训 开发板 精华推荐
最新单片机文章
更多精选电路图
更多热门文章
更多每日新闻
更多往期活动
11月22日历史上的今天
厂商技术中心