- 注册时间
- 2005-2-11
- 最后登录
- 1970-1-1
|
//NC3000的CheckKey的工作原理
//其他机型应该只需要改动一下key_table就可以了
#define KEY_IO 0xbf
#define KEY 0xc7
char mask[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//掩码
char key_table[64]=//键值表
{0x0A,0x00,0x25,0x16,0x69,0x6B,0x13,0x17,
0x08,0x00,0x26,0x0E,0x75,0x6A,0x6D,0x20,
0x06,0x00,0x0F,0x0D,0x79,0x68,0x6E,0x2E,
0x18,0x00,0x27,0x70,0x74,0x67,0x62,0x30,
0x00,0x00,0x1F,0x15,0x72,0x66,0x76,0x1B,
0x02,0x00,0x1E,0x14,0x65,0x64,0x63,0x12,
0x04,0x00,0x1D,0x6C,0x77,0x73,0x78,0x1A,
0x0C,0x00,0x1C,0x6F,0x71,0x61,0x7A,0x19};
int checkkey(char key)
{char key_buf[8];
char i,j;
memmove(key_buf,KEY_IO,8);
if(key<128)
{for(i=0;i<64;i++)
{if(key==key_table)
{i=mask[i&7]&key_buf[i>>3];
if(i)return(0);
else return(-1);
}
}
return(0);
}
for(i=0;i<8;i++)
{if(key_buf!=0xFF)
{for(j=0;j<8;j++)
{
if(((key_buf>>j)&1)==0)return(key_table[(i<<3)+j]);
}
}
}
}
void main()
{int key;
SetScreen(1);
for(;;)
{key=checkkey(128);
printf("%d %c\n",key,key);
if(checkkey('q'))break;
}
} |
|