//键盘求值程序
uncharscankey(void)
{
unchartemp,c,d;
P2=0x0f;
temp=P2;
temp=temp&0x0f;//屏蔽高四位,取列值
temp=~(temp|0xf0);//将temp中的内容与0xf0进行相加,最后求反可得到是那列按下
if(temp==1)
c=0;//P2.0位低电平
elseif(temp==2)
c=1;//P2.1位低电平
elseif(temp==4)
c=2;//P2.2位低电平
elseif(temp==8)
c=3;//P2.3位低电平
else
c=0;//否则给返回值C=0
P2=0xf0;//给P2的行为高电平,以来判断是高四为的那位为低电平
delay(1);
temp=P2;
temp=temp&0xf0;//屏蔽低四位
temp=~((temp>>4)|0xf0);//将temp中的高四位向右移动4位,与0xf0相加,最后求反可以得到是那行按下
if(temp==1)
c=c+0;//将行P2.4的值加上列的值
elseif(temp==2)
c=c+4;//将行P2.5的值加上列的值
elseif(temp==4)
c=c+8;//将行P2.6的值加上列的值
elseif(temp==8)
c=c+12;//将行P2.7的值加上列的值
else
c=0;
d=tab2[c];
return(d);//最后返回行加列的值
}
你把这个程序看懂了。估计你的问题也就解决了。希望对你有所帮助哦!!