}
switch(key_h)
{
case 0xee:P0=~smgduan[15];break;
case 0xde:P0=~smgduan[14];break;
case 0xbe:P0=~smgduan[13];break;
case 0x7e:P0=~smgduan[12];break;
case 0xed:P0=~smgduan[11];break;
case 0xdd:P0=~smgduan[10];break;
case 0xbd:P0=~smgduan[9];break;
case 0x7d:P0=~smgduan[8];break;
case 0xeb:P0=~smgduan[7];break;
case 0xdb:P0=~smgduan[6];break;
case 0xbb:P0=~smgduan[5];break;
case 0x7b:P0=~smgduan[4];break;
case 0xe7:P0=~smgduan[3];break;
case 0xd7:P0=~smgduan[2];break;
case 0xb7:P0=~smgduan[1];break;
case 0x77:P0=~smgduan[0];break;
}
}
}
}
void main()
{
u8 key_l,key_h;
while(1)
{
P1=0xf0;
key_l=P1;
if(key_l!=0xf0)
{
delay(10);
if(key_l!=0xf0)
{
key_l=key_l|0x0f;
P1=key_l;
key_h=P1;
}
}
x++;
x%=16;
switch(key_h)
{
case 0xee:P0=~smgduan[x];break;
case 0xde:P0=~smgduan[x];break;
case 0xbe:P0=~smgduan[x];break;
case 0x7e:P0=~smgduan[x];break;
case 0xed:P0=~smgduan[x];break;
case 0xdd:P0=~smgduan[x];break;
case 0xbd:P0=~smgduan[x];break;
case 0x7d:P0=~smgduan[x];break;
case 0xeb:P0=~smgduan[x];break;
case 0xdb:P0=~smgduan[x];break;
case 0xbb:P0=~smgduan[x];break;
case 0x7b:P0=~smgduan[x];break;
case 0xe7:P0=~smgduan[x];break;
case 0xd7:P0=~smgduan[x];break;
case 0xb7:P0=~smgduan[x];break;
case 0x77:P0=~smgduan[x];break;
}
}
}作者: zhb2004xp 时间: 2020-10-31 08:19
你应该使用的是数码管显示键值来验证效果,这样是看不出来是否有松手检测效果的。你的程序没有松手检测,表面看是按了一次(按下时间较长),显示也是对应的键值,其实程序是一直在循环并输出这个键值;有了松手检测,则按一次,不管按下时间多长,程序只经过了1次循环,也只输出1次该键值;
在有些场景中必须有松手检测的:
例如一个设备4个按键,分别是开机、关机、累加和累减,明显的开机和关机的按键可以不用松手检测,这个按键就是一个效果,开机或关机,不管按下多少次都无所谓;但是累加和累减就必须有松手检测,他的效果是重复并累计的,如果没有松手检测,你按下一次,会出现累加或累减多次的效果。作者: wps10025 时间: 2020-10-31 10:46
嗯,明白了。谢谢各位的解释。