📄 jkeyout.c.bak
字号:
///////////////////////////////////////////////////////////////////////////////
// pate 1 //
///////////////////////////////////////////////////////////////////////////////
#define min_d (90)//79+10
#define max_d (164)//175-20
//#define JK_LENGTH 0x08
#define KEY_SLENTH 0x05
typedef struct {
unsigned char key_state[KEY_SLENTH];
unsigned char key_save[KEY_SLENTH];
}keybit;
keybit JkeyState;
byte jkState=0; //right or left jk data state
//static JkeyState key;
//+++++++++++++++++++++++++++++++++++++++++++++++++++
/*********************************************************************
* Function: byte Joystick_Waykey(byte x,byte y)
*
* Input: x:joystick x analog value.
y:joystick y analog value.
*
* Output: joystick transfered direction key value .
*
* Side Effects: None
*
*
* Note: None
********************************************************************/
byte Joystick_Waykey(byte x,byte y)
{
byte output_key;
if(x<max_d&&x>min_d&&y<min_d)
{ output_key =0x01;
} //down
//----------------------------------
else if(x>min_d&&x<max_d&&y>max_d)
{ output_key =0x02;
} //up
//----------------------------------
else if(x<min_d&&y>min_d&&y<max_d)
{ output_key =0x04;
} //left
//----------------------------------
else if(x>max_d&&y<max_d&&y>min_d)
{ output_key =0x08;
} //right
//----------------------------------
else if(x<min_d&&y<min_d)
{ output_key =0x10;
} //down and left
//----------------------------------
else if(x>max_d&&y<min_d)
{ output_key =0x80;
} //right and down
//----------------------------------
else if(x<min_d&&y>max_d)
{ output_key =0x20;
} //up and left
//----------------------------------
else if(x>max_d&&y>max_d)
{ output_key =0x40;
} //up and right
//----------------------------------
else {
output_key =0x00;
}
return (output_key);
}
//+++++++++++++++++++++++++++++++++++++++++++++++++++
/*********************************************************************
* Function: byte Joystick_Waykey(byte x,byte y)
*
* Input: inbuffer:joystick data buffer.
inlength:joystick data length.
outputbuffer: joystick key out data buffer.
outlength: joystick key out data length.
*
* Output: joystick transfered direction key value .
*
*
*
* Note: *outength is outbuffer max length.when put data into
outputbuffer,should chekc input data length less than
*outength.in case outputbuffer overflow
output : 0: no key map.1:normal key map.2:especial key map
********************************************************************/
byte Joystick_KeyFilter(byte *inbuffer,byte inlength,byte *outputbuffer,byte* outlength)//,byte *outputbuffer
{
unsigned char key_r,key_l,i,lenth=0;
//——————————————————————————————————————————————————————————————————————
if(inlength!=JK_LENGTH)
{
* outlength = 0;
return 0;
}
if(*outlength==0)
{
return 0;
}
key_r = Joystick_Waykey(inbuffer[0],inbuffer[1]);
key_l = Joystick_Waykey(inbuffer[2],inbuffer[3]);
JkeyState.key_state[0] = inbuffer[4]>>4;
JkeyState.key_state[1] = inbuffer[5];
JkeyState.key_state[2] = inbuffer[6];
JkeyState.key_state[3] = key_l;
JkeyState.key_state[4] = key_r;
//——————————————————————————————————————————————————————————————————————
for(i=0;i<8;i++)
{
//——————————————————————————————————————————————————————————————————————
if(JkeyState.key_state[0]&Groupbit[i]) //
{
if((JkeyState.key_save[0]&Groupbit[i])==0) //有键按下
{
outputbuffer[lenth] = ((i+1)<<1)+1;
if(lenth<*outlength)
lenth++;
}
}
else{
if(JkeyState.key_save[0]&Groupbit[i]) //有键松起
{
outputbuffer[lenth] = (i+1)<<1;
if(lenth<*outlength)
lenth++;
}
}
//————————————————————————————————————————————————————————————————
if(JkeyState.key_state[1]&Groupbit[i])
{
if((JkeyState.key_save[1]&Groupbit[i])==0) // 有键按下
{
outputbuffer[lenth]= ((i+5)<<1)+1;
if(lenth<*outlength)
lenth++;
}
}
else{
if(JkeyState.key_save[1]&Groupbit[i]) //有键松起
{
outputbuffer[lenth]= (i+5)<<1;
if(lenth<*outlength)
lenth++;
}
}
//——————————————————————————————————————————————————————————————————
if(JkeyState.key_state[2]&Groupbit[i])
{
if((JkeyState.key_save[2]&Groupbit[i])==0) // 有键按下
{
outputbuffer[lenth] = ((i+13)<<1)+1;
if(lenth<*outlength)
lenth++;
}
}
else{
if(JkeyState.key_save[2]&Groupbit[i]) //有键松起
{
outputbuffer[lenth] = (i+13)<<1;
if(lenth<*outlength)
lenth++;
}
}
//——————————————————————————————————————————————————————————————————————
if(JkeyState.key_state[3]&Groupbit[i])
{
if((JkeyState.key_save[3]&Groupbit[i])==0x00) // 有键按下
{
outputbuffer[lenth] = ((i+20)<<1)+1;
if(lenth<*outlength)
lenth++;
}
}
else{
if(JkeyState.key_save[3]&Groupbit[i]) //有键松起
{
outputbuffer[lenth]= (i+20)<<1;
if(lenth<*outlength)
lenth++;
}
}
//——————————————————————————————————————————————————————————————————————
if(JkeyState.key_state[4]&Groupbit[i])
{
if((JkeyState.key_save[4]&Groupbit[i])==0x00) // 有键按下
{
outputbuffer[lenth] = ((i+28)<<1)+1;
if(lenth<*outlength)
lenth++;
}
}
else{
if(JkeyState.key_save[4]&Groupbit[i]) //有键松起
{
outputbuffer[lenth]= (i+28)<<1;
if(lenth<*outlength)
lenth++;
}
}
//——————————————————————————————————————————————————————————————————————
}
JkeyState.key_save[0] = JkeyState.key_state[0];
JkeyState.key_save[1] = JkeyState.key_state[1];
JkeyState.key_save[2] = JkeyState.key_state[2];
JkeyState.key_save[3] = JkeyState.key_state[3];
JkeyState.key_save[4] = JkeyState.key_state[4];
if(lenth==0){
/* if(jkState==1)
return 0;
jkState =1; */
outputbuffer[0] = 40;
outputbuffer[1] = 56;
* outlength = 2;
return 2;}
// jkState=0;
* outlength = lenth;
return 1;
}
void Joystick_KeyInit()
{
byte i;
for(i=0;i<KEY_SLENTH;i++)
{
JkeyState.key_save[i]=0x00;
JkeyState.key_state[i]=0x00;
}
// jkState= 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -