对8*8点阵,有一个特性,是引脚分布与我们正常思考不同,因此我通过一些代码解决这个问题。首先,使8*8点阵有刻印的一面正对我们,使我们引脚用杜邦线从P2^0到P2^7顺序连到Pin1到Pin8,使我们引脚从P1^0到P1^7顺序连到Pin9到Pin16。
void timer0(uchar k)
{
while(k--)
{
for(i=0;i<n;i++)//for(i=0;i<SNAKE+1;i++)
{
tP2=mux(x[i]);
tP1=255-mux(y[i]);
P2=((tP2&0x10)>>4)+((tP2&0x40)>>5)+((tP1&0x02)<<1)+((tP1&0x04)<<1)+((tP2&0x80)>>3)+((tP1&0x10)<<1)+((tP2&0x20)<<1)+((tP2&0x04)<<5);
P1=(tP2&0x01)+((tP1&0x08)>>2)+((tP1&0x20)>>3)+(tP2&0x08)+((tP1&0x01)<<4)+((tP2&0x02)<<4)+(tP1&0x40)+(tP1&0x80);
turnkey(); //上下左右键位处理
delay(TIME); //显示延迟
//tP2=0x00;tP1=0xff;
//while(1);
P1=0xd6;
P2=0x2c;
}
}
}
重点的代码是对P1,P2的处理,我们可以通过正常的思维把数据给tP1,tP2。然后通过
P2=((tP2&0x10)>>4)+((tP2&0x40)>>5)+((tP1&0x02)<<1)+((tP1&0x04)<<1)+((tP2&0x80)>>3)+((tP1&0x10)<<1)+((tP2&0x20)<<1)+((tP2&0x04)<<5);
P1=(tP2&0x01)+((tP1&0x08)>>2)+((tP1&0x20)>>3)+(tP2&0x08)+((tP1&0x01)<<4)+((tP2&0x02)<<4)+(tP1&0x40)+(tP1&0x80);
使我们的代码得到我们想象中的效果