板子是战舰v3的板子,在照相机实验的基础上做的修改,设想是不用LCD屏直接把数据从ov7670读出后以16进制直接写到sd卡的文件中
现在的问题是我写进的文件有300k(正常拍是150k)而且电脑读不出来,而我用网络调试助手把这个文件当作文件源发出,再接收转向文件就正常了,是150k的文件并且图片没有问题,也就说明数据没错,应该是存储方式的问题?我也不知道我又没有表达清楚= =
就是说写bmp文件数据时我直接把数据以16进制写入好像不行啊,应该怎么写呢?
[mw_shl_code=c,true] f_open (file,"0://PHOTO//PIC0000.bmp",FA_WRITE);
sprintf(buf,"424D4258020000000000420000002800000040010000F00000000100100003000000000000000000000000000000000000000000000000F80000E00700001F000000");
f_write(file,(u8*)buf,132,&bw);
for(k=0;k<240;k++)
{
f_lseek(file,1280*k+132);
for(j=0;j<320;j++)
{
OV7670_RCK_L;
color1=GPIOC->IDR&0XFF; //读数据
OV7670_RCK_H;
OV7670_RCK_L;
color1|=(GPIOC->IDR&0XFF)<<8; //读数据
OV7670_RCK_H;
if(color1==0x0000)
{
printf("0000");
f_write(file,"0000",4,&bw);
}
else if(color1<0x000F)
{
printf("000%x",color1);
sprintf(buf,"000%x",color1);
f_write(file,(u8*)buf,4,&bw);
}
else if(color1<0x00FF)
{
printf("00%x",color1);
sprintf(buf,"00%x",color1);
f_write(file,(u8*)buf,4,&bw);
}
else if(color1<0x0FFF)
{
printf("0%x",color1);
sprintf(buf,"0%x",color1);
f_write(file,(u8*)buf,4,&bw);
}
else
{
printf("%x",color1);
sprintf(buf,"%x",color1);
f_write(file,(u8*)buf,4,&bw);
}
}
}
f_close (file);[/mw_shl_code]
还有0a总是写成a...我这样解决总感觉不是很好,有什么好方法吗?
|