历史上的今天
今天是:2025年05月11日(星期日)
2019年05月11日 | 按键的长按与短按(基于MSP430F5529)
2019-05-11 来源:eefocus
长按与短按的区别只是加上一个适当的延时然后再去判断引脚状态。
定义:
#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);//中断标志位清零
}
史海拾趣
|
在EVC下GetWindowsDirectory()函数的 用法 我在在EVC下调用GetWindowsDirectory()函数为什么为什么会产生如下两个错误: G:\\VCproject\\Test00\\Test00Dlg.cpp(67) : error C2039: \'GetCurrentDirectory\' : is not a member of \'`global namespace\'\' G:\\VCproject\\Test00\\Test0 ...… 查看全部问答> |
|
samsung 2440+wince5.0, 8寸屏上下抖动 由于8寸屏(800×600):AU V.0(版本号)停产,换成V.7的屏, 结果进入wince桌面后,只要操作nandflash屏就上下抖动。 用V.0的屏一点问题也没有,AU那边说V.7就是V.0的升级版。 屏是AU产的,质量应该没问题,可能与V.0的比,抗干扰差了(但这没 ...… 查看全部问答> |
|
大家知道LED照明灯的寿命取决于电容的寿命,而现实用很多产品的光衰很严重,实际使用寿命远远低于电容的寿命,这是为何?温度对LED的使用寿命到底有多大?一切理想的状态下,LED灯珠的寿命又是多少? 就举个例子,这个是3014的曲线图,当温度在4 ...… 查看全部问答> |




