stm32f407从外部flash获取二进制图片数据,显示在tft液晶屏上,出来的图像很多横线黑线,什么原因?

2019-07-20 06:25发布

u16 image_getcolor(u8 mode,u8 *str)
{
        u16 color;
        if(mode)
        {
                color=((u16)*str++)<<8;
                color|=*str;
        }else
        {
                color=*str++;
                color|=((u16)*str)<<8;
        }
        return color;       
}

void image_show(u16 xsta,u16 ysta,u16 width,u16 height,u8 scan,u8 *p)
{
        u8* a;
        u32 i;
        u32 len=0;
        u32 number = 0;
        u32 u;       
        u8  Buffer[4096];
        u32 picaddr=PCADDR1;
       
        LCD_WriteRAM_Prepare();          
        if((scan&0x03)==0)
        {
                LCD_Scan_Dir(L2R_U2D);
                LCD_Set_Window(0,0,800,480);
                LCD_SetCursor(0,0);
                               
        }else
        {  
                LCD_Scan_Dir(U2D_L2R);
                LCD_Set_Window(0,0,800,480);
                LCD_SetCursor(0,0);
        }
        LCD_WriteRAM_Prepare();           //&#191;aê&#188;D′è&#235;GRAM

        len=800*480*2;
       
        if(len%4096 == 0)
    {
        number = len/4096;
        for(u=0;u<number;u++)
        {        
            W25QXX_Read(Buffer,0x19BE38+(u*4096),4096);
                                                a=Buffer;
            for(i=0;i<100;i++)
            {
                if(i%2 == 0)
                {
                                                                       
                                                                                LCD_WR_DATA(image_getcolor(scan&(1<<4),a));
                                                                                a+=2;
                                                                          

       
              }
                                                 
                                                                                               
                                        }

                        }
                               
    }
  else
    {
       number = len/4096 +1;
       for(u=0;u<number-1;u++)
       {
                                 
                                         W25QXX_Read(Buffer,0x19BE38+(u*254), 254);                                 
                                         a=Buffer;
                                         for(i=0;i<254;i++)
                                         {
             if(i%2 == 0)
             {

                                                          LCD_WR_DATA(image_getcolor(scan&(1<<4),a));
                                                          a+=2;

             }
                                         }        
                       

                                }
                                W25QXX_Read(Buffer, 0x19BE30+(254*(number-1)), len-(254*(number-1)));
                                a=Buffer;
                                for(i=0;i<len-(254*(number-1));i++)
                                {
                                        if(i%2 == 0)
                                        {
                                                               
                                                                LCD_WR_DATA(image_getcolor(scan&(1<<4),a));
                                                                a+=2;

                                        }
                                }
                        }

        LCD_Set_Window(0,0,800,480);              
}  


void image_display(u16 x,u16 y,u8 * imgx)
{
        HEADCOLOR *imginfo;
        u8 ifosize=sizeof(HEADCOLOR);
        imginfo=(HEADCOLOR*)imgx;
        image_show(x,y,800,480,imginfo->scan,imgx+ifosize);               
}

void LCD_ShowPic(u16 xstart, u16 ystart, u16 xend, u16 yend,u32 pic_add)
{
        u8  Head[8];
        u8 *a;
        W25QXX_Read(Head,0x19BE30,8);       
        a=Head;
  image_display(0,0,a);       

       
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。