使用ov7670带有FIFO,将采集的数据打印在lcd显示屏上进行显示,但在lcd显示屏上显示的是花屏。就算将摄像模组遮挡也是花屏,并不是我所想的黑屏。在将数据打印在lcd上之前已将屏幕初始化为黄色。
希望大家帮帮忙!帮忙看看问题出在哪里。
将摄像影像放到lcd中显示
//将摄像影像放到lcd中显示
void display_ov7670()
{
unsigned short temp_imge;
if(2==i)
{
FIF0_OE = 0;
FIF0_RRST = 0; //开始复位读指针
FIF0_RCK = 0;
FIF0_RCK = 1;
FIF0_RCK = 0;
FIF0_RRST = 1; //结束复位读指针
FIF0_RCK = 1;
lcd_write_memory(0,0,128,160);
for(unsigned char u = 0; u < 160; u++)
{
HREF = 1;
for(unsigned char j = 0; j < 128; j++)
{
FIF0_RCK = 0;
FIF0_RCK =1;
temp_imge = GPIO_ReadInputData(GPIOD); //读取的是高八位
temp_imge <<= 8;
FIF0_RCK = 0;
FIF0_RCK = 1;
temp_imge = temp_imge | GPIO_ReadInputData(GPIOD); //读取低八位 并 与高八位放到一起
//imge[u][j] = temp_imge ; //将获取到的图片数据 保存到 imge数组中
lcd_write_data_color_16bit(temp_imge);
}
HREF = 0;
}
FIF0_OE = 1;
//将图片打印到lcd屏幕上
// for(unsigned char u = 0; u < 160; u++)
// {
// for(unsigned char j = 0; j < 128; j++)
// {
// lcd_write_data_color_16bit(imge[u][j]);
// }
// }
i = 0;//采集完一帧图像后将 i 赋值 0 准备下一帧图片
}
}
写入数据
//写入数据
unsigned char WrCmos7670(unsigned char regID, unsigned char regDat)
{
//IIC_start();
if(0==IIC_write_data(OV7670_DEVICE_WRITE_ADDRESS)) //CMOS器件地址(写)
{
return(0);
}
delay_us(100);
if(0==IIC_write_data(regID)) //CMOS寄存器地址
{
return(0);
}
delay_us(100);
if(0==IIC_write_data(regDat)) //待写入指定寄存器的值
{
return(0);
}
//IIC_stop();
return(1);
}
读取数据 这个函数没有用到
//读取数据
unsigned char read_cmos_7670(unsigned char registeraddree) //形参应写入要读取的寄存器
{
unsigned char shuju;
IIC_start();
if(IIC_write_data(OV7670_DEVICE_WRITE_ADDRESS))
{
return 0;
}
delay_us(100);
if(IIC_write_data(registeraddree))
{
return 0;
}
delay_us(100);
if(IIC_write_data(OV7670_DEVICE_READ_ADDRESS)) //发送读命令
{
return 0;
}
delay_us(100);
shuju = IIC_read_data();
IIC_stop();
return shuju;
}
unsigned char Cmos7670_init(void)
{
unsigned char mmm;
FIFO_GPIO_init(); //FIFO控制引脚初始化
pixel_GPIO_init(); //像素数据输出引脚初始化
//InitI2C0();
mmm=0x80;
if(0==WrCmos7670(0x12, mmm))
{
return 0 ;
}
delay_ms(10);
set_ov7670();
return 1;
}
这个问题可能是由多个因素造成的。首先,请确保OV7670的配置是正确的。比如分辨率,帧率等。如果配置没有问题,请确保LCD显示器的初始化代码是正确的。
此外,如果使用的是带FIFO的OV7670,请确保您的读取FIFO数据的代码是正确的。如果您使用的是SPI或者其他接口读取数据,请确保接口配置是正确的。
最后,可以检查一下您是否在正确的时刻读取FIFO数据,以及您是否在正确的顺序读取数据。