我是这样做的的移动。每移位一次就刷新。
//左移显示函数:
void P10DisplayLeftMobile(unsigned char x,unsigned char num,const unsigned char *p)
{
//x-左移动终点的位置,从0开始;num-汉字个数;p-汉字点阵数组
unsigned char i, j, k, l, m, len;
for(k=0;k<num;k++)//汉字个数
{
for(j=0;j<16;j++)//一个16*16点阵的汉字要移16位,每移完一位后显示缓冲区的数据
{
for(m=x;m<N-1;m++)//对缓冲区里的汉字点阵数据左移处理
{
for(i=0;i<16;i++)//移完32字节
{
//左边字节左移一位,右边字节的最高位补上
buf[m*32+i]=(buf[m*32+i]<<1)|(buf[m*32+i+16]>>7);
//前字右边字节左移一位,下一个汉字的左边字节的最高位补上
buf[m*32+i+16]=(buf[m*32+i+16]<<1)|(buf[(m+1)*32+i]>>7);
}
}
for(i=0;i<16;i++)//将显示汉字逐个移入最后一个缓冲区
{
buf[(N-1)*32+i]=(buf[(N-1)*32+i]<<1)|(buf[(N-1)*32+i+16]>>7);//
if(j<8)
buf[(N-1)*32+i+16]=(buf[(N-1)*32+i+16]<<1)|(p[k*32+i]>>(7-j));//移入汉字的左半边
else
buf[(N-1)*32+i+16]=(buf[(N-1)*32+i+16]<<1)|(p[k*32+i+16]>>(7-j%8));//移入汉字的右半边
}
for(l=0;l<MS;l++)//这部分最好放在定时中断函数里
{
P10DisplayBufDat();//显示缓冲区的数据
if(ENableKey){ENableKey=0;return;}
}
}
}
}
|