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(); //¿aê¼D′èë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);
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
原子哥,我用烧录机烧录进去的,起始地址是0x19BE30,末尾是0x230B02,我算了下,一共也才609490个数据,而800*480的包括头部信息数据得有768008个,是烧进去的时候就已经数据丢失了?程序部分错误是忘记修改的原因,还是同样的结果的。
一周热门 更多>