您的位置 首页 电源

单片机按键去抖

我们首先要清楚为什么要按键去抖。先看先按键按下的波形图通过这个图形就很清楚为什么要按键去抖了,要是不去抖的话,当按下按…

咱们首先要清楚为什么要按键去抖。先看先按键按下的波形图

经过这个图形就很清楚为什么要按键去抖了,要是不去抖的话,当按下按键的时分就会在0~5ms内呈现颤动,相当于在不停地按下按键而就不是只按了一次了。安稳闭合时刻大约是10ms,松手颤动的时刻和按下颤动的时刻差不多。

去抖的办法有硬件去抖和软件去抖

咱们常用献身CPU的时刻来软件去抖,便是按下按键后延时5~10ms时刻后再来查看是否有按键按下,松手检测也相同。

硬件去抖的办法如图所示

独立按键的去抖办法很简单,便是在按下和松手后分别加一小段延时再来判别。

例:

sbit key=P1^1;

……………………

…………………..

if(!key) //如果有按键按下

{

delay(10); //延时一小段时刻

if(!key) //真有按键按下

{

。。。。。。。。// 履行按键按下后的操作

}

while(!key); // 松手检测,要是没有松手的话就一向履行while循环

}

原理便是这样,去抖的办法许多。

按键的松手检测首要依据键盘扫描的方法来决议,今日写了一个矩阵键盘扫描的程序,然后加了松手检测。成果没到达料想的要求。后来才发现是检测方法错了。

程序是这样的

uchar keyscan()
{
static uchar H,L,temp;
P1=0Xf0;
L=P1&0xf0;
if(L!=0xf0)
{
delay(18);
if(L!=0xf0)
{
L=P1&0xf0;
P1=L|0x0f; //P1口从头赋值了
H=P1&0X0F;
}
}
/*

P1=0XF0;

L=P1&0XF0;

while(L1!=0XF0) //松手检测

{

L=P1&0XF0;

}
*/
temp=H+L;

switch(temp)
{
case 0xee:key=1;get1=!get1;break;
case 0xed:key=2;get1=!get1;break;
case 0xeb:key=3;get1=!get1;break;
case 0xe7:key=4;get1=!get1;break;
case 0xde:key=5;get1=!get1;break;
case 0xdd:key=6;get1=!get1;break;
case 0xdb:key=7;get1=!get1;break;
case 0xd7:key=8;get1=!get1;break;
case 0xbe:key=9;get1=!get1;break;
case 0xbd:key=0;get1=!get1;break;
case 0xbb:key=0xee;get1=!get1;break;
}
return key;

}

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

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

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

微信扫一扫关注我们

返回顶部