请问各位大侠,高手。在这个按键程序中是如何分析的?

/*键扫描子程序*/
void keyscan(void)
{
P1=0x0F; //低四位输入
delay(1);
temp=P1; //读P1口
temp=temp&0x0F;
temp=~(temp|0xF0);
if(temp==1)
key=0;
else if(temp==2)
key=1;
else if(temp==4)
key=2;
else if(temp==8)
key=3;
else
key=16;

P1=0xF0; //高四位输入
delay(1);
temp=P1; //读P1口
temp=temp&0xF0;
temp=~((temp>>4)|0xF0);
if(temp==1)
key=key+0;
else if(temp==2)
key=key+4;
else if(temp==4)
key=key+8;
else if(temp==8)
key=key+12;
else
key=16;

dis_buf=table[key]; //查表得键值
}

你这个应该是4*4的矩阵键盘扫描程序
你可以用假设的方法来理解这个程序 假设有个按键按下(否则就是全ff)
有按键按下那么 当低4位输入1的时候应该有一个输出和其他的不一样(键盘的另一端应该是接地) 同理输入高的时候也有唯一对应的一个值 这样就得到了唯一的按键值 查表既得键值
温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答
大家正在搜