您的位置 首页 嵌入式

关于单片机独立按键的详解

键的闭合与否,反应在口线的电平上,即口线的电平是呈现高电平还是低电平状态。因此,可以通过口线电平高、低状态的检测,来确认按键是否按

键的闭合与否,反应在口线的电平上,即口线的电平是呈现高电平仍是低电平状况。因而,能够经过口线电平高、低状况的检测,来承认按键是否按下。

但假如在触点颤动期间检测按键的通与断状况,或许导致判别犯错,即按键一次按下或开释被过错地以为是屡次操作,这种状况是不允许呈现的。为了战胜按键触点机械颤动所造成的的检测误判,保证CPU对一次按键动作只承认一次按键,有必要采取去颤动办法。


消除按键颤动的办法:

具体办法可从硬件、软件两方面予以考虑。在键数较少时,可选用硬件去抖,而当键数较多时,选用软件去抖。

软件办法:

在第一次检测到有键按下时,履行一段延时10ms的子程序,之后,

再次检测该键的电平状况,假如该键电平仍坚持闭合状况电平,

则承以为真实有键按下。不然,以为无键按下;

同理,在检测到该键开释后,也应选用相同的过程进行承认,
然后可消除颤动的影响。

code:

/*独立按键,选用共阳极数码管*/
#include
#include
#define uint unsigned int
#define uchar unsigned char
sbit key1=P2^3;
sbit ledA=P1^0;
uchar num;
void delay(uint z);

uchar code dutable[]={
0xc0,0xf9,0xa4,0xb0,0x99,
0x92,0x82,0xf8,0x80,0x90};//段选0~9

void main()
{
while(1)
{
if(key1==0)
{
delay(10);//去按下颤动延时
if(key1==0)
{
ledA=0;
num++;
if(num==10)
{
num=0;
}
}
while(!key1);//等候按键开释
delay(10);//去开释颤动延时
while(!key1);//确认现已开释
}
else
{
ledA=1;
}
P0=dutable[num];
}
}

void delay(uint z)
{
uint x,y;
for(x=z;x>0;x–)
{
for(y=0;y<=110;y++)
{
}
}
}

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

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

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

微信扫一扫关注我们

返回顶部