关于#c语言#的问题:使用ov7670带有FIFO,将采集的数据打印在lcd显示屏上进行显示,但在lcd显示屏上显示的是花屏

使用ov7670带有FIFO,将采集的数据打印在lcd显示屏上进行显示,但在lcd显示屏上显示的是花屏。就算将摄像模组遮挡也是花屏,并不是我所想的黑屏。在将数据打印在lcd上之前已将屏幕初始化为黄色。
希望大家帮帮忙!帮忙看看问题出在哪里。

img

将摄像影像放到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数据,以及您是否在正确的顺序读取数据。