scankey

//-----------键值定义--------------
#define NOKEY 0
#define ENTERKEY 1
#define DOTKEY 2
#define DOWNKEY 3
#define UPKEY 4
#define RIGHTKEY 5
#define MKEY 6
#define MENTERKEY 7
#define MDOTKEY 8
#define MDOWNKEY 9
#define MUPKEY 10
#define PRESSKEY -1//按键未释放,在压下状态
#define RELEASEKEY -2//按键释放
#define ERRKEY -3//非法按键
//-----------P0口原始键值表
#define MKEYV 0xfe
#define RIGHTKEYV 0xfd
#define UPKEYV 0xfb
#define DOWNKEYV 0xf7
#define DOTKEYV 0xef
#define ENTERKEYV 0xdf
#define MDOTKEYV ((uchar)(((uchar)(MKEYV))&((uchar)(DOTKEYV)))) /*0xee//0xfe&0xef //组合键M+DOTKEY*/
#define MDOWNKEYV ((uchar)(((uchar)(MKEYV))&((uchar)(DOWNKEYV)))) /*0xf6//0xfe&0xf7/ //组合键M+DOWNKEY*/
#define MENTERKEYV ((uchar)(((uchar)(MKEYV))&((uchar)(ENTERKEYV))))/*0xde//0xfe&0xdf//组合键M+ENTERKEY*/
#define MUPKEYV ((uchar)(((uchar)(MKEYV))&((uchar)(UPKEYV)))) /*0xf90xfe&0xfb //组合键M+UPKEY*/
#define UPDOWNKEYV ((uchar)(((uchar)(DOWNKEYV))&((uchar)(UPKEYV))))/*0xf3/(0xfb)&(0xf7)//组合键DOWNKEY+UPKEY*/
//--------------------------------------
//键盘扫描子程序
//返回键值
//--------------------------------------
uchar ScanKey(void)
{
static bit keyflag;
uchar c;
//static uchar keycnt;
P0=0xff; //P0口输入
c=KEYPORTR; //P0|0xc0; //读回键状态(P06,P07无用)
if(c==0xff) {//无按键,或按键已释放
if(keyflag==1) {//已取过键值
if(t10mskeycnt>10) {//防抖动20MS
keyflag=0;
//t1keycnt=0;
return RELEASEKEY;//按键释放
}
else return 0;//20MS之内,防抖动
}
t10mskeycnt=0;
return NOKEY;//无按键
}
if(keyflag==1) {
t10mskeycnt=0;
return PRESSKEY;
}//按键未释放,在压下状态
if(t10mskeycnt<20) return 0;//防抖动20*10MS
keyflag=1;
//查表,取键值
if(c==MKEYV/*0xfe*/) return MKEY;
if(c==RIGHTKEYV/*0xfd*/) return RIGHTKEY;
if(c==UPKEYV/*0xfb*/) return UPKEY;
if(c==DOWNKEYV/*0xf7*/) return DOWNKEY;//
if(c==DOTKEYV/*0xef*/) return DOTKEY;//
if(c==ENTERKEYV/*0xdf*/) return ENTERKEY;
if(c==(MDOTKEYV/*0xee/0xfe&0xef*/)) return MDOTKEY; //组合键M+DOTKEY
if(c==(MDOWNKEYV/*0xf6/0xfe&0xf7*/)) return MDOWNKEY; //组合键M+DOWNKEY
if(c==(MENTERKEYV/*0xde/0xfe&0xdf*/)) return MENTERKEY;//组合键M+ENTERKEY
if(c==(MUPKEYV/*0xf9/0xfe&0xfb*/)) return MUPKEY; //组合键M+UPKEY
return ERRKEY;
}

相关主题
相关文档
最新文档