TFT上显示出来的图像为好久个,而且色彩以及图像大小不对,只能看出一个大概的轮廓(我的手。。。),不知道是为什么。。。?T,T求帮助
程序根据例程36摄像头改编
[mw_shl_code=c,true]//更新LCD显示
void camera_refresh(void)
{
u32 i,j;
u16 color;
LCD_Scan_Dir(U2D_L2R); //从上到下,从左到右
LCD_SetCursor(0x00,0x0000); //设置光标位置
LCD_WriteRAM_Prepare(); //开始写入GRAM
while(OV7670_VSYNC==0);//0-1
while(OV7670_VSYNC==1);//1-0 只有在VSYNC为低时,才写入数据
//240*320=76800 每个像素用RGB565表示,即每个像素占两个字节,一个像素需传递两次
for(i=0;i<240;i++)
{
while(OV7670_HREF==0);//0-1 只有在HERE为高时,才传递数据
for(j=0;j<320;j++)
{
//读取高8位
while(OV7670_PCLK==0);
//0-1 数据在PCLK上升沿保持稳定,在此时读取数据
color=GPIOC->IDR&0XFF; //读数据
while(OV7670_PCLK==1); //1-0
//左移高八位
color<<=8;
//读取低8位
while(OV7670_PCLK==0); //0-1
color|=GPIOC->IDR&0XFF; //读数据
while(OV7670_PCLK==1); //1-0
//显示LCD
LCD->LCD_RAM=color;
}
while(OV7670_HREF==1); //1-0
}
//ov_frame++;
LCD_Scan_Dir(DFT_SCAN_DIR); //恢复默认扫描方向
} [/mw_shl_code]
附上两张时序图
另外求DMA解决方式,以及将OV7670数据直接传给TFT显存解决方式
|