易码技术论坛

 找回密码
 加入易码
搜索
查看: 245314|回复: 6

[源码] [源码]CheckKey的工作原理

[复制链接]
发表于 2007-6-17 13:34:25 | 显示全部楼层
好深奥啊,俺看的一头雾水!
发表于 2007-6-17 13:37:30 | 显示全部楼层
{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};

详细看一下,其他基本都能看懂一点,就是这个用十六进制的数组元素的数组不知是干啥的。经常在一些代码里看到类似的数组,现在看见就有一种恐惧感!C语言好难啊!!
 楼主| 发表于 2007-6-17 14:16:34 | 显示全部楼层
键盘上的按键对应的键值。比如: 输入键对应13
发表于 2007-6-19 13:18:05 | 显示全部楼层
13对应的十六数就是0x0d
发表于 2007-6-20 11:48:50 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
 楼主| 发表于 2007-6-17 09:41:53 | 显示全部楼层 |阅读模式
//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(&#39;q&#39;))break;
}
}
发表于 2008-1-5 17:07:06 | 显示全部楼层

看似很深奥的函数~

想不到这么简单就可以了~!
真是没有做不到
只有想不到啊`!
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2024-4-20 12:11 , Processed in 0.013913 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表