📄 jkeyout.c
字号:
///////////////////////////////////////////////////////////////////////////////
// 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_save1[KEY_SLENTH];
unsigned char key_save2[KEY_SLENTH];
}keybit;
keybit JkeyState;
byte jkState=0,save0,save1,save2,save3,save4,save5=0x7f,save6=0x7f; //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<min_d)
{
if(y>=0x7f){
if((y-0x7f)>(0x7f-x))
output_key =0x02; //up
else output_key =0x04; //left
}
else {
if((0x7f-y)>(0x7f-x))
output_key =0x01; //down*/
else output_key =0x04; //left
}
}
else if(x>max_d)
{
if(y>=0x7f){
if((y-0x7f)>(x-0x7f))
output_key =0x02; //up
else output_key =0x08; //right
}
else{
if((0x7f-y)>(x-0x7f))
output_key =0x01; //down*/
else output_key =0x08; //right
}
}
else {
if(y>max_d)
output_key =0x02; //up
else if(y<min_d)
output_key =0x01; //down*/
else output_key =0x00;
}
return (output_key);
/* 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 =0x20;
} //right and down
//----------------------------------
else if(x<min_d&&y>max_d)
{ output_key =0x40;
} //up and left
//----------------------------------
else if(x>max_d&&y>max_d)
{ output_key =0x80;
} //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;
if(Joystick==1){
save0=JkeyState.key_save1[0];
save1=JkeyState.key_save1[1];
save2=JkeyState.key_save1[2];
save3=JkeyState.key_save1[3];
save4=JkeyState.key_save1[4];
}
if(Joystick==2){
save0=JkeyState.key_save2[0];
save1=JkeyState.key_save2[1];
save2=JkeyState.key_save2[2];
save3=JkeyState.key_save2[3];
save4=JkeyState.key_save2[4];
}
//——————————————————————————————————————————————————————————————————————
for(i=0;i<8;i++)
{
//——————————————————————————————————————————————————————————————————————
if(JkeyState.key_state[0]&Groupbit[i]) //
{
if((save0&Groupbit[i])==0) //有键按下
{
outputbuffer[lenth] = ((i+1)<<1)+1;
if(lenth<*outlength)
lenth++;
}
}
else{
if(save0&Groupbit[i]) //有键松起
{
outputbuffer[lenth] = (i+1)<<1;
if(lenth<*outlength)
lenth++;
}
}
//————————————————————————————————————————————————————————————————
if(JkeyState.key_state[1]&Groupbit[i])
{
if((save1&Groupbit[i])==0) // 有键按下
{
outputbuffer[lenth]= ((i+5)<<1)+1;
if(lenth<*outlength)
lenth++;
}
}
else{
if(save1&Groupbit[i]) //有键松起
{
outputbuffer[lenth]= (i+5)<<1;
if(lenth<*outlength)
lenth++;
}
}
//——————————————————————————————————————————————————————————————————
if(JkeyState.key_state[2]&Groupbit[i])
{
if((save2&Groupbit[i])==0) // 有键按下
{
outputbuffer[lenth] = ((i+13)<<1)+1;
if(lenth<*outlength)
lenth++;
}
}
else{
if(save2&Groupbit[i]) //有键松起
{
outputbuffer[lenth] = (i+13)<<1;
if(lenth<*outlength)
lenth++;
}
}
//——————————————————————————————————————————————————————————————————————
if(JkeyState.key_state[3]&Groupbit[i])
{
if((save3&Groupbit[i])==0x00) // 有键按下
{
outputbuffer[lenth] = ((i+20)<<1)+1;
if(lenth<*outlength)
lenth++;
}
}
else{
if(save3&Groupbit[i]) //有键松起
{
outputbuffer[lenth]= (i+20)<<1;
if(lenth<*outlength)
lenth++;
}
}
//——————————————————————————————————————————————————————————————————————
if(JkeyState.key_state[4]&Groupbit[i])
{
if((save4&Groupbit[i])==0x00) // 有键按下
{
outputbuffer[lenth] = ((i+28)<<1)+1;
if(lenth<*outlength)
lenth++;
}
}
else{
if(save4&Groupbit[i]) //有键松起
{
outputbuffer[lenth]= (i+28)<<1;
if(lenth<*outlength)
lenth++;
}
}
//——————————————————————————————————————————————————————————————————————
}
if(Joystick==1){
JkeyState.key_save1[0] = JkeyState.key_state[0];
JkeyState.key_save1[1] = JkeyState.key_state[1];
JkeyState.key_save1[2] = JkeyState.key_state[2];
JkeyState.key_save1[3] = JkeyState.key_state[3];
JkeyState.key_save1[4] = JkeyState.key_state[4];
}
if(Joystick==2){
JkeyState.key_save2[0] = JkeyState.key_state[0];
JkeyState.key_save2[1] = JkeyState.key_state[1];
JkeyState.key_save2[2] = JkeyState.key_state[2];
JkeyState.key_save2[3] = JkeyState.key_state[3];
JkeyState.key_save2[4] = JkeyState.key_state[4];
}
if(lenth==0){
if((save5==inbuffer[0])&&(save6==inbuffer[1])) {
if((save5==0x7f)&&(save6==0x7f)) {
outputbuffer[0] = 40;
* outlength = 1;
return 1;
} //最后修改日期2006-08-08
}
outputbuffer[0] = 40;
outputbuffer[1] = 56;
save5=inbuffer[0];
save6=inbuffer[1];
* outlength = 2;
return 2;
}
// jkState=0;
save5=inbuffer[0];
save6=inbuffer[1];
* outlength = lenth;
return 1;
}
void Joystick_KeyInit()
{
byte i;
for(i=0;i<KEY_SLENTH;i++)
{
JkeyState.key_save1[i]=0x00;
JkeyState.key_save2[i]=0x00;
JkeyState.key_state[i]=0x00;
}
// jkState= 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -