中级会员
 
- 积分
- 322
- 金钱
- 322
- 注册时间
- 2016-8-21
- 在线时间
- 37 小时
|
5金钱
以下是我的拍照程序:
u8 ov2640_jpg_photo(char *pname)
{
FIL* f_jpg;
u8 res=0;
u32 bwr;
u32 i=0;
u32 jpeglen=0;
char* pbuf;
f_jpg=(FIL *)malloc(sizeof(FIL)); //开辟FIL字节的内存区域
if(f_jpg==NULL)return 0XFF; //内存申请失败.
OV2640_JPEG_Mode(); //切换为JPEG模式
OV2640_OutSize_Set(OV2640_JPEG_WIDTH,OV2640_JPEG_HEIGHT);
SCCB_WR_Reg(0XFF,0X00);
SCCB_WR_Reg(0XD3,30);
SCCB_WR_Reg(0XFF,0X01);
SCCB_WR_Reg(0X11,0X08);
for(i=0;i<10;i++) //丢弃10帧,等待OV2640自动调节好(曝光白平衡之类的)
{
while(OV2640_VSYNC==1);
while(OV2640_VSYNC==0);
}
while(OV2640_VSYNC==1) //开始采集jpeg数据
{
while(OV2640_HREF)
{
while(OV2640_PCLK==0);
ov2640_framebuf[jpeglen]=OV2640_DATA;
while(OV2640_PCLK==1);
jpeglen++;
}
}
f_unlink(pname);
res=f_open(f_jpg,(const TCHAR*)pname,FA_WRITE|FA_CREATE_NEW);//模式0,或者尝试打开失败,则创建新文件
if(res==0)
{
printf("jpeg data size:%d\r\n\r\n\r\n",jpeglen); //串口打印JPEG文件大小
pbuf=ov2640_framebuf;
for(i=0;i<jpeglen;i++)//查找0XFF,0XD8
{
if(pbuf[i]==0xFF);
if(pbuf[i+1]==0xD8)
while(1)
{
f_write(f_jpg,&pbuf[i],1,&bwr);
printf("%c",ov2640_framebuf[i]);
i++;
if(pbuf[i-1]==0xFF)
if(pbuf[i]==0xD9)
{
f_write(f_jpg,&pbuf[i],1,&bwr);
break;
}
}
if(pbuf[i-1]==0xFF)
if(pbuf[i]==0xD9);//文件创建成功
{
f_close(f_jpg);
OV2640_RGB565_Mode(); //RGB565模式
free(f_jpg);
return 1;
}
}
}
return 0;
}
|
-
拍下的图片
|