本帖最后由 victor3l 于 2012-7-26 15:58 编辑
我想实现一个长按键的功能,具体做法如下:
我写一个键盘扫描函数
void KeyScan()
{
static uchar keyCount = 0;
static uchar keyCode = 0;
static bit keyFlag = 0;
uchar temp ;
temp = P1 & 0x3f;
if(0x3f != temp)
{
keyCount++;
if(10 == keyCount )
{
keyFlag = 1;
keyCode = temp;
}
}
else
{
keyCount = 0;
if(keyFlag)
{
switch(keyCode)
{
case 0x3e: keyVal = 1;break;//mod键按下
case 0x3d: keyVal = 2;break;//left键按下
case 0x3b: keyVal = 3;break;//取消键
case 0x37: keyVal = 4;break;//清零键按下
case 0x2f: keyVal = 5;break;//up键按下
case 0x1f: keyVal = 6;break;//设定键按下
default:break;
}
keyFlag = 0;
}
}
}
然后用定时器定时20ms,在中断中调用上面的按键扫描函数
在我检测到一个键如第6个键,我想把他长按3秒钟在执行相关操作,代码写成下面的形式:
if(6 == keyVal)
{
keyVal = 0;
timeCount++;
if(timeCount > 150)
{
timeCount = 0;
长按标志位置位;
}
}
为什么我的程序时钟不能走到长按标志位那里,我的思路对吗?请大侠给我点思路,谢谢。 |