你不就是想要把P0的输入转码在P2输出吗!!何必这么麻烦呢?
以下代码少一个while,性能更好,采纳了吧。。。。。
#define uchar unsigned char
#define uint unsigned int
uchar code table1[]={0x67,0x9b,……};
uchar code table2[]={0x9e,0x6d,……};
void main()
{
uchar old_data = P0;
uint index = 0;
while(1)
{
if(old_data != P0) //新数据!=老数据(P0口数据出现变化)
{
old_data = P0; //重新赋值
switch(old_data) //查询输入数据对应的转码后在table2[]中的位置
{
case table1[0]:index=0;break;
case table1[1]:index=1;break;
...............
case table1[15]:index=15;break;
default :index=0; break;
}
}
else
{
P2 = table2[index]; //输出转码后的值
}
}
}