📄 keypaddrive.h
字号:
//---------------------------------------------
// the 4*4 keypad driver
// write by liujianwei 2005-6-25
// e-mail:liujianwei@ruyi.com
// qq:361299856
//---------------------------------------------
#include <absacc.h>
#define ENTER_KEY 0x0d
#define ESC_KEY 0x01
#define UP_KEY 0x80
#define DOWN_KEY 0x81
#define LEFT_KEY 0x82
#define RIGHT_KEY 0x83
#define KEY_ROW_PORT 0x2000
#define KEY_VERTICAL_PORT 0xA000
#define unchar unsigned char
#define KEY_ROW XBYTE[KEY_ROW_PORT]
#define KEY_VERTICAL XBYTE[KEY_VERTICAL_PORT]
#define EMPTY 0
#define NOTEMPTY 2
#define FULL 1
#define NOTFULL 3
//-------------------------------------------
// the globle varible declar here
//---------------------------------------------
unchar KeyBuf[16];
unchar idata KeyPadStatus=0;
unchar idata Front=0;
unchar idata Real=0;
unchar BufFlag=EMPTY; //0= empty
const unchar code Row[4]={ 0x01,0x02,0x04,0x08};
const unchar code KeyElement0[4]={'1','2','3','4'};
const unchar code KeyElement1[4]={'5','6','7','8'};
const unchar code KeyElement2[4]={'9','0',ESC_KEY,ENTER_KEY};
const unchar code KeyElement3[4]={UP_KEY,DOWN_KEY,LEFT_KEY,RIGHT_KEY};
unchar bdata Key;
sbit Vertical0= Key^0;
sbit Vertical1= Key^1;
sbit Vertical2= Key^2;
sbit Vertical3= Key^3;
unchar idata Temp,Temp1;
unchar Delay10ms;
//--------------------------------------
// put the char into the key buffer
//--------------------------------------
PutInBuf(unchar x)
{
if (BufFlag!=FULL)
{
KeyBuf[Real]=x;
Real++;
Real&=0x0f;
BufFlag=NOTEMPTY;
if (Real==Front)
BufFlag=FULL;
}
}
//----------------------------------------
// get char from the key bufffer
//---------------------------------------
unchar GetKey()
{ unchar x;
if (BufFlag!=EMPTY)
{
x=KeyBuf[Front];
Front++;
Front&=0x0f;
BufFlag=NOTFULL;
if (Real==Front)
BufFlag=EMPTY;
return(x);
}
//else
return(0);
}
//--------------------------------------
// key scan function
// scan the key and put the key into key buffer
//-----------------------------------------------
KeyScan()
{unchar x0,x1,x2,x3;
switch(KeyPadStatus)
{
case 0 :
//--------------------------------------------------------------------------
// scan the first row
//--------------------------------------------------------------------------
KEY_ROW = Row[0];
Key=KEY_VERTICAL;
// while(1);
if (Key )
{
if (Vertical0)
{
Temp=KeyElement0[0];
KeyPadStatus=1;
break;
}
if (Vertical1)
{
Temp=KeyElement0[1];
KeyPadStatus=1;
break;
}
if (Vertical2)
{
Temp=KeyElement0[2];
KeyPadStatus=1;
break;
}
if (Vertical3)
{
Temp=KeyElement0[3];
KeyPadStatus=1;
break;
}
}
//------------------------------------------------------------------------------
// scan the secend row
//------------------------------------------------------------------------------
KEY_ROW = Row[1];
Key=KEY_VERTICAL;
if (Key)
{
if (Vertical0)
{
Temp=KeyElement1[0];
KeyPadStatus=1;
break;
}
if (Vertical1)
{
Temp=KeyElement1[1];
KeyPadStatus=1;
break;
}
if (Vertical2)
{
Temp=KeyElement1[2];
KeyPadStatus=1;
break;
}
if (Vertical3)
{
Temp=KeyElement1[3];
KeyPadStatus=1;
break;
}
}
//------------------------------------------------------------------------------
// scan the third row
//------------------------------------------------------------------------------
KEY_ROW = Row[2];
Key=KEY_VERTICAL;
if (Key)
{
if (Vertical0)
{
Temp=KeyElement2[0];
KeyPadStatus=1;
break;
}
if (Vertical1)
{
Temp=KeyElement2[1];
KeyPadStatus=1;
break;
}
if (Vertical2)
{
Temp=KeyElement2[2];
KeyPadStatus=1;
break;
}
if (Vertical3)
{
Temp=KeyElement2[3];
KeyPadStatus=1;
break;
}
}
//------------------------------------------------------------------------------
// scan the fourth row
//------------------------------------------------------------------------------
KEY_ROW = Row[3];
Key=KEY_VERTICAL;
if (Key)
{
if (Vertical0)
{
Temp=KeyElement3[0];
KeyPadStatus=1;
break;
}
if (Vertical1)
{
Temp=KeyElement3[1];
KeyPadStatus=1;
break;
}
if (Vertical2)
{
Temp=KeyElement3[2];
KeyPadStatus=1;
break;
}
if (Vertical3)
{
Temp=KeyElement3[3];
KeyPadStatus=1;
break;
}
}
///FirstScan();
break;
case 1:
if (Temp!=0)
{
Delay10ms=0;
KeyPadStatus=2;
}
break;
case 2:
if (Delay10ms>=1)
{
Delay10ms=0;
//--------------------------------------------------------------------------
// scan the first row
//--------------------------------------------------------------------------
KEY_ROW = Row[0];
Key=KEY_VERTICAL;
if (Key)
{
if (Vertical0)
{
Temp1=KeyElement0[0];
if (Temp==Temp1)
{
PutInBuf(Temp1);
KeyPadStatus=4;
break;
}
KeyPadStatus=0;
Temp=0;
break;
}
if (Vertical1)
{
Temp1=KeyElement0[1];
if (Temp==Temp1)
{
PutInBuf(Temp1);
KeyPadStatus=4;
break;
}
KeyPadStatus=0;
Temp=0;
break;
}
if (Vertical2)
{
Temp1=KeyElement0[2];
if (Temp==Temp1)
{
PutInBuf(Temp1);
KeyPadStatus=4;
break;
}
KeyPadStatus=0;
Temp=0;
break;
}
if (Vertical3)
{
Temp1=KeyElement0[3];
if (Temp==Temp1)
{
PutInBuf(Temp1);
KeyPadStatus=4;
break;
}
KeyPadStatus=0;
Temp=0;
break;
}
}
//------------------------------------------------------------------------------
// scan the secend row
//------------------------------------------------------------------------------
KEY_ROW = Row[1];
Key=KEY_VERTICAL;
if (Key)
{
if (Vertical0)
{
Temp1=KeyElement1[0];
if (Temp==Temp1)
{
PutInBuf(Temp1);
KeyPadStatus=4;
break;
}
KeyPadStatus=0;
Temp=0;
break;
}
if (Vertical1)
{
Temp1=KeyElement1[1];
if (Temp==Temp1)
{
PutInBuf(Temp1);
KeyPadStatus=4;
break;
}
KeyPadStatus=0;
Temp=0;
break;
}
if (Vertical2)
{
Temp1=KeyElement1[2];
if (Temp==Temp1)
{
PutInBuf(Temp1);
KeyPadStatus=4;
break;
}
KeyPadStatus=0;
Temp=0;
break;
}
if (Vertical3)
{
Temp1=KeyElement1[3];
if (Temp==Temp1)
{
PutInBuf(Temp1);
KeyPadStatus=4;
break;
}
KeyPadStatus=0;
Temp=0;
break;
}
}
//------------------------------------------------------------------------------
// scan the third row
//------------------------------------------------------------------------------
KEY_ROW = Row[2];
Key=KEY_VERTICAL;
if (Key)
{
if (Vertical0)
{
Temp1=KeyElement2[0];
if (Temp==Temp1)
{
PutInBuf(Temp1);
KeyPadStatus=4;
break;
}
KeyPadStatus=0;
Temp=0;
break;
}
if (Vertical1)
{
Temp1=KeyElement2[1];
if (Temp==Temp1)
{
PutInBuf(Temp1);
KeyPadStatus=4;
break;
}
KeyPadStatus=0;
Temp=0;
break;
}
if (Vertical2)
{
Temp1=KeyElement2[2];
if (Temp==Temp1)
{
PutInBuf(Temp1);
KeyPadStatus=4;
break;
}
KeyPadStatus=0;
Temp=0;
break;
}
if (Vertical3)
{
Temp1=KeyElement2[3];
if (Temp==Temp1)
{
PutInBuf(Temp1);
KeyPadStatus=4;
break;
}
KeyPadStatus=0;
Temp=0;
break;
}
}
//------------------------------------------------------------------------------
// scan the fourth row
//------------------------------------------------------------------------------
KEY_ROW = Row[3];
Key=KEY_VERTICAL;
if (Key)
{
if (Vertical0)
{
Temp1=KeyElement3[0];
if (Temp==Temp1)
{
PutInBuf(Temp1);
KeyPadStatus=4;
break;
}
KeyPadStatus=0;
Temp=0;
break;
}
if (Vertical1)
{
Temp1=KeyElement3[1];
if (Temp==Temp1)
{
PutInBuf(Temp1);
KeyPadStatus=4;
break;
}
KeyPadStatus=0;
Temp=0;
break;
}
if (Vertical2)
{
Temp1=KeyElement3[2];
if (Temp==Temp1)
{
PutInBuf(Temp1);
KeyPadStatus=4;
break;
}
KeyPadStatus=0;
Temp=0;
break;
}
if (Vertical3)
{
Temp1=KeyElement3[3];
if (Temp==Temp1)
{
PutInBuf(Temp1);
KeyPadStatus=4;
break;
}
KeyPadStatus=0;
Temp=0;
break;
}
}
KeyPadStatus=0;
Temp=0;
break;
}
//---------------------------------------------------------------------------
// case 3:
case 4:
KEY_ROW = Row[0];
x0=KEY_VERTICAL&0x0f;
KEY_ROW = Row[1];
x1=KEY_VERTICAL&0x0f;
KEY_ROW = Row[2];
x2=KEY_VERTICAL&0x0f;
KEY_ROW = Row[3];
x3=KEY_VERTICAL&0x0f;
if ((x0==0)&(x1==0)&(x2==0)&(x3==0))
{
KeyPadStatus=0;
Temp=0;
}
break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -