技术中心
 
 

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

   日期:2015-05-26    
核心提示:键的闭合与否,反应在口线的电平上,即口线的电平是呈现高电平还是低电平状态。因此,可以通过口线电平高、低状态的检测,来确认按键是否按下。

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

但如果在触点抖动期间检测按键的通与断状态,可能导致判断出错,即按键一次按下或释放被错误地认为是多次操作,这种情况是不允许出现的。为了克服按键触点机械抖动所致的检测误判,确保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++)

{

}

}

}

 
标签: 单片机
  
  
  
  
 
更多>同类技术
 
全年征稿 / 资讯合作
 
推荐图文
推荐技术
可能喜欢