按键的长按与短按(基于MSP430F5529)

来源:互联网 发布:阿里云api 编辑:程序博客网 时间:2024/05/20 02:28

长按与短按的区别只是加上一个适当的延时然后再去判断引脚状态。

定义:

#define KEYDIR P2DIR
#define KEYIN P2IN
#define KEYIFG P2IFG
#define KEYIE P2IE
#define KEYIES P2IES
#define KEYREN P2REN
#define S1 BIT0

extern unsigned char key_key;

在中断中处理长按与短按:

#pragma vector=PORT2_VECTOR  //声明中断向量地址
__interrupt void GPIOIntHandler(void)
{
unsigned int IntState,vextend,cv;
unsigned long i;
IntState=KEYIFG;
if (IntState & S1)//按键按下时
{
vextend=0;
cv=0;//长按标志位清零
while (KEYIN& S1==S1)//按键处于按下状态则一直循环
{
for(i=1000;i>0;i--);//适当的延时
vextend++;//计数值加1
if(vextend==2500)//如果计数值等于2500,则说明处于长按状态(此处时间可以根据自己的需求进行设定)
{
vextend=0;//计数值清零
while(KEYIN& S1==S1)//按键依然处于按下状态
{//进入长按状态处理
if(key_key==99)
key_key=0;
else
key_key++;
LCD_ShowNum(0,0,key_key,3);
for(i=2000000;i>0;i--);//适当的延时为了不让显示过快的变化
cv=1;//长按状态的标志置1(表示进入过长按处理程序)
}
}
}
if(cv==0)//长按状态的标志为0时
{
if(key_key==99)
key_key=0;
else
key_key++;
LCD_ShowNum(0,0,key_key,3);
}
}
KEYIFG &=~(S1);//中断标志位清零
}

0 0
原创粉丝点击