|
为了节省时间,给出键盘扫描的部分代码。程序没有错。
unsigned char code key_code[]={
0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,
0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77 };
uchar keyscan()
{
uchar scan1,scan2,keycode,j;
P1=0xf0;
scan1=P1;
if((scan1&0xf0)!=0xf0) //判键是否按下
{
delayms(30); //延时30ms
scan1=P1;
if((scan1&0xf0)!=0xf0) //二次判键是否按下
{
P1=0x0f;
scan2=P1;
keycode=scan1|scan2; //组合成键编码
for(j=0;j<=15;j++)
{
if(keycode== key_code[j]) //查表得键值
{
key=j;
return(key);
}
}
}
}
else P1=0xff;
return (16);
}
我的疑问是:当按键按下时,不知道scan1与scan2的值。
我说说个人的理解。。。比如按下第一行第一列的键,那scan1=1110 0000 吧?scan2=0000 1111 吧?
那么keycode=scan1|scan2不就等于1110 1111 吗? 那keycode!=key_code[0](0xee)啊
哪位帮我具体分析一下当按下键时,scan1与scan2的值。
谢谢呵!
|
|