本帖最后由 lioe001 于 2013-4-19 18:45 编辑
void xmove(char dir,unsigned char *ptr,char n,char speed)
{ /* 方向 n是要移动的汉字个数 移动速度*/
unsigned char i=0, ib=0;
unsigned int tmp=0, speedm=0;
unsigned char buffer2[16]; //半个汉字的缓存
n*=2; //左半字和右半字,所以要x2
for(i=0;i<16;i++) //清零
buffer2
=0;
if(dir == 1)
{
/**** 向左移动 ****/
for(n;n>0;n--)
{
if(ptr != 0)
{
tmp = n%2; //判断是左半字还是右半字
for(i=0;i<16;i++)
buffer2=ptr[i*2+tmp];
if(tmp) //tmp为1时,将地址指向下一个汉字
ptr+=32;
}
for(tmp=8;tmp>0;tmp--) //要移动8列
{
ib=0;
for(i=0;i<16;i++)
{ //要移16行,共16个字节
buffer[ib] <<=1; //移第一个半字
if(buffer[ib+1] & 0x80) //
buffer[ib]++; //
ib++; //
buffer[ib]<<=1; //移后半字 //
if(buffer2 & 0x80)
buffer[ib]++;
ib++;
buffer2<<=1; //缓冲左半字向左移一位
}
speedm=speed; //更新点阵
while(speedm--)
display();
}
}
}
就是到了红 {MOD}字体中看不懂、、、
PS:buffer[ib]是第一个字的数组、、、、
-
害得我、、、还激动一下下、、、
{
ib=0;
for(i=0;i<16;i++)//
{
buffer[ib] <<=1; //显示缓冲区左移一位。
if(buffer[ib+1] & 0x80) // 看到这句,我觉得应该是16x16点阵的左移。
//把后面一个字节的最高位补到前面一个字节的最低位
buffer[ib]++; //如果后字节最高位是1,则前面一个字节最低位补个1
ib++; //地址加一
buffer[ib]<<=1; //后一个字节的左移1位
if(buffer2 & 0x80) //和上面一样,把缓冲的最高位补进显示缓存
buffer[ib]++; //同上
ib++;//同上
buffer2<<=1; //缓冲区左移一位。以便再移入下一位
}
一周热门 更多>