//一定一定要注意data的值一定要小于128,不然按键无反应,同时Memory model模式选择small
#include <KEY.h>
unsigned char Key_KeyNumber,LastKey,NowKey,OnceKey,KeyNumber;
int KeyTime;
unsigned char Key()
{
unsigned char Temp; //中间变量Temp,便于赋值一次消零
Temp=Key_KeyNumber;
Key_KeyNumber=0;
return Temp;
}
unsigned char KeyData() //读取动态按键变化
{
unsigned char KeyNumber=0;
if(KEY1==0){KeyNumber=1;}
if(KEY2==0){KeyNumber=2;}
if(KEY3==0){KeyNumber=3;}
if(KEY4==0){KeyNumber=4;}
return KeyNumber; //返回按键的值
}
void Loop_Key()
{
LastKey=NowKey; //LastKey:上一次的按键值
NowKey=KeyData(); //NowKey:当前的按键值
if(LastKey) //当按键按下时开始计时
{ KeyNumber=LastKey;
KeyTime++;
if(KeyTime<20 && NowKey==0) //如果按键的时间小于500ms
{
KeyTime=0;
OnceKey++; //OnceKey每松手一次加1
}
else if(KeyTime>=20 && NowKey) //如果按键时间大于500ms且现按键还在按下
{
if(LastKey==1){Key_KeyNumber=9;} //给按键赋值
if(LastKey==2){Key_KeyNumber=10;}
if(LastKey==3){Key_KeyNumber=11;}
if(LastKey==4){Key_KeyNumber=12;}
}
if(NowKey==0 && LastKey && KeyTime>=25) //防止长按后立即被当成短按再次赋值
{
Key_KeyNumber=0;KeyTime=0;
}
}
}