16x16点阵、、看不懂啊、、、、帮帮忙吧、、、、

2019-07-16 01:17发布

本帖最后由 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]是第一个字的数组、、、、


QQ截图20130419184503.png
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
高振宇
1楼-- · 2019-07-16 03:44
 精彩回答 2  元偷偷看……
lioe001
2楼-- · 2019-07-16 06:53
高振宇 发表于 2013-4-19 20:05
其实我也不懂啊

害得我、、、还激动一下下、、、
←™RETI™→
3楼-- · 2019-07-16 11:21
怎样把8x8的点阵弄成16x16的啊,求指教
dongyumin
4楼-- · 2019-07-16 13:29
                        for(tmp=8;tmp>0;tmp--)
                        {                                   
                                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;                //缓冲区左移一位。以便再移入下一位
                                }

一周热门 更多>