📄 kb.c
字号:
#include "pio.h"
#include "intc.h"
unsigned short GetKeycode(void)
{
unsigned short key=0;
key=apd_PIOReadPort(APD_PIOD);
return key;
}
/*
status = 0 - WAITING FOR KEY DOWN
1 - KEY DOWN - START WAITING FOR 2 SEC
2 - KEY DOWN - 2 SEC PASSED - START FOR REPEAT 1 SEC
*/
//KEYSTATUS keystatus[NUM_KEY];
//static unsigned long const holdtime[]=
// {3000/*power key*/, 2000, 2000, 2000, 2000, 2000, 2000};
//static unsigned long const repeattime[]=
// {0xFFFFFFFF, 1000, 1000, 1000, 1000, 1000, 1000};
//unsigned char const key_ctlmask[]=
// {0x15, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F};
enum key_status
{
S_WAIT,
S_KEYDOWN,
S_KEYUP
};
static enum key_status status;
unsigned short gKBDelayControl;
static unsigned char prev_key,key_number,key_down_flag;
void IntKey(void)
{
if(key_down_flag==0)
{
key_down_flag=1;
}
}
unsigned char GetKey(void)
{
unsigned char key=0;
if( key_down_flag )
{ key = GetKeycode();
key_down_flag = 0;
}
return key;
}
unsigned char CheckKeyIntFlag(void)
{
return key_down_flag;
}
void ClrKeyIntFlag(void)
{
key_down_flag=0;
}
///////////////////////////////
void KeyInit(void)
{
unsigned char i;
apd_INTCEnableIRQ(APD_INTC_INT1);
status=S_WAIT;
gKBDelayControl=0;
prev_key=0;
key_down_flag=0;
}
//extern void Delay(unsigned long ms_numbers);//in swi1.c
void Delay(unsigned int m){
unsigned int i,j;
for(i=0;i<=0xffff;i++)
for(j=0;j<m;j++)
;
}
/*
void KeyProcess(void)//TASK=void
{
unsigned char key;//, prev_key;
unsigned char i; //, mystatus;
unsigned short transmit_msg;
{
switch(status)
{
case S_WAIT:
if(key_down_flag==1)
{
key=GetKeycode();
if (key)
{
Delay(10);
key=GetKeycode();
if (key)
{
for(i=0;i<NUM_KEY;i++)
if ((key>>i)&0x01)break;
prev_key=(unsigned char)(0x01<<i);
key_number=i;
status=S_KEYDOWN;
break;
}
}
KeyOn();
key_down_flag=0;
}
break;
case S_KEYDOWN:
key=GetKeycode();
Delay(10);
key=GetKeycode();
if ((key&prev_key)==0)
status=S_WAIT;
}
if(prev_key)
{
switch(keystatus[key_number].status)
{
case K_WAIT:
{
keystatus[key_number].status=K_DOWN;
gKBDelayControl=
(unsigned short)keystatus[key_number].holdtime;
}
break;
case K_DOWNWAIT:
if (key&prev_key)
{
if(gKBDelayControl==0)
{
keystatus[key_number].status=K_HOLD1;
gKBDelayControl=
(unsigned short)keystatus[key_number].repeattime;
}
}
else
{
keystatus[key_number].status=K_UP;
}
break;
case K_HOLDWAIT:
if (key&prev_key)
{
if(gKBDelayControl==0)
{
keystatus[key_number].status=K_HOLD2;
gKBDelayControl=
(unsigned short)keystatus[key_number].repeattime;
}
}
else
{
keystatus[key_number].status=K_UP;
}
break;
}
}
if(prev_key)
{
{
switch(keystatus[key_number].status)
{
case K_WAIT:
case K_DOWNWAIT:
case K_HOLDWAIT:
transmit_msg=K_WAIT;
break;
case K_DOWN:
if ((keystatus[key_number].ctlmask&0x08) //&&
)
{
transmit_msg=K_DOWN;
}
else
transmit_msg=K_WAIT;
keystatus[key_number].status=K_DOWNWAIT;
break;
case K_HOLD1:
if ((keystatus[key_number].ctlmask&0x04) //&&
)
{
transmit_msg=K_HOLD;
}
else
transmit_msg=K_WAIT;
keystatus[key_number].status=K_HOLDWAIT;
break;
case K_HOLD2:
if ((keystatus[key_number].ctlmask&0x02)// &&
)
{
transmit_msg=K_HOLD;
}
else
transmit_msg=K_WAIT;
keystatus[key_number].status=K_HOLDWAIT;
break;
case K_UP:
if ((keystatus[key_number].ctlmask&0x01))
{
transmit_msg=K_UP;
}
else
transmit_msg=K_WAIT;
keystatus[key_number].status=K_WAIT;
break;
}
if (transmit_msg!=K_WAIT)
{
PostMessage((MSGID)MSG_EVT_KEY,
(unsigned long)prev_key,
(unsigned long)transmit_msg);
if(transmit_msg==K_UP)
{prev_key=0;
KeyOn();
key_down_flag=0;
}
}
}
}
}
}*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -