微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 16x16点阵、、看不懂啊、、、、帮帮忙吧、、、、

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

时间:10-02 整理:3721RD 点击:

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();
                        }
                }
        }
就是到了红色字体中看不懂、、、
PS:buffer[ib]是第一个字的数组、、、、


其实我也不懂啊

害得我、、、还激动一下下、、、

怎样把8x8的点阵弄成16x16的啊,求指教

                        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;                //缓冲区左移一位。以便再移入下一位
                                }

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top