📄 key.c
字号:
#include"key.h"
unsigned char ReadKey(void)
{
unsigned char keyPadBuf[2];
/*keyPad detect*/
static unsigned char keyState = 0, keyValue, keyLine,keyTime=0;
unsigned char keyReturn = NOKEY,keyTemp,i;
switch (keyState)
{
case 0: //if any key discovered,switch to keyState 1
keyHit = 0;
P7 = 0x00;
PM7 = 0x00; //output
PM2 = PM2 | 0x07; //input
//dlyN100us(7);
keyValue = P2&KEYMASK;
if(keyValue != KEYMASK)
{
keyState++;
keyHit = 1;
}
break;
case 1: // just delay 600us for least; not a KEYSTATE
P7 = 0x00;
PM7 = 0x00; //output
PM2 = PM2 | 0x07; //input
//dlyN100us(7);
if(keyValue==P2&KEYMASK)
{
P2 = P2&0xf8;
PM2 = PM2&0xf8; //output
PM7 = 0xff; //input
keyState++;
keyValue<<=4;
}
else
{
keyState--;
}
break;
case 2: //confirm keyhit and keep the key value
P2 = P2&0xf8;
PM2 = PM2&0xf8; //output
PM7 = 0xff; //input
//dlyN100us(7);
NOP();
keyValue = keyValue+P7;
keyState++;
break;
case 3: //release or start longkey timer
P7 = 0x00;
PM7 = 0x00; //output
PM2=PM2 | 0x07; //input
//dlyN100us(7);
keyTemp=P2&KEYMASK;
if( keyTemp == KEYMASK ) //key has been up
{
keyState=0;
switch( keyValue )
{
case 0b01101110:
keyReturn = KEY1_1;
break;
case 0b01101101:
keyReturn = KEY1_2;
break;
case 0b01101011:
keyReturn = KEY1_3;
break;
case 0b01100111:
keyReturn = KEY1_4;
break;
case 0b01011110:
keyReturn = KEY2_1;
break;
case 0b01011101:
keyReturn = KEY2_2;
break;
case 0b01011011:
keyReturn = KEY2_3;
break;
case 0b01010111:
keyReturn = KEY2_4;
break;
case 0b00111110:
keyReturn = KEY3_1;
break;
case 0b00111101:
keyReturn = KEY3_2;
break;
case 0b00111011:
keyReturn = KEY3_3;
break;
case 0b00110111:
keyReturn = KEY3_4;
break;
default:
keyReturn = NOKEY;
}
}
else if(++keyTime>=80) // queue inputing the same number
{
//keyValue<<=4;
keyTime=0;
//keyState=0; //repeat long key
//keyState++; //just for first time of long key
// P2 = P2&0xf8;
// PM2 = PM2&0xf8; //output
// PM7 = 0xff; //input
// dlyN100us(7); //delay for key
// keyValue = keyValue+P7;// read P7
switch(keyValue)
{
case 0b00111110:
keyReturn=KEY3_1LONG;
break;
case 0b00110111:
keyReturn=KEY3_4LONG;
break;
default:
keyState=0; //so repeat of 0~9
}
}
break;
case 4: //longkey step 2 and release longkey
keyLine=0b11110000;
P7 = keyLine;
PM7 = 0x00; //output
PM2=PM2 | 0x07; //input
//dlyN100us(7);
keyValue=P2&KEYMASK;
if( keyValue == KEYMASK )
{
keyState=0;
}
// else if(++keyTime>=30) //longkey step 2
// {
// keyReturn=KEY3_1LONG;
// keyTime=0;
// }
break;
default:
keyState = 0;
}
return keyReturn;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -