打印

OV7725与LCD方向不匹配问题,

[复制链接]
495|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
白鹭hu|  楼主 | 2018-7-9 12:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
摄像头和LCD程序是改的原子的例程,OV7725QVGA模式下LCD横屏时才能正常显示,竖屏出现斜杠,但摄像头开VGA模式下LCD竖屏又能够正常显示,LCD是2.8寸240*320,改过LCD扫描方向和对调摄像头起始坐标等都没有成功,研究了几天,实在没法了,希望各位大佬帮忙指点指点。
//OV7725摄像头测试
void OV7725_Test(void)
{
        LCD_Clear(WHITE);        
        DCMI_Init();//DCMI配置        
        DCMI_DMA_Init((u32)&LCD->LCD_RAM,0,1,DMA_MDATAALIGN_HALFWORD,DMA_MINC_DISABLE);

//        LCD_Display_Dir(1);        //1横屏 从上到下,从左到右  OK
//        OV7725_Window_Set(320,240,0);//QVGA模式输出        
        
//        LCD_Display_Dir(1);        //2横屏 从上到下,从左到右  OK
//        OV7725_Window_Set(320,240,1);//VGA模式输出        
        
        LCD_Display_Dir(0);//竖屏
        OV7725_Window_Set(240,320,0);//3竖屏QVGA模式输出  NO!
        
//        LCD_Display_Dir(0);//竖屏
//        OV7725_Window_Set(240,320,1);//4竖屏VGA模式输出        OK

        DCMI_Start(); //启动传输
        while(1)
        {

           DCMI_Stop(); //停止显示
           LCD_ShowString(50,60,240,320,16,"OV7725");
           DCMI_Start(); //启动传输               
          delay_ms(10);        
        }
}
        

//设置图像输出窗口
//width:图像宽度
//height:图像高度
//mode:0,QVGA输出模式;1,VGA输出模式
//QVGA模式可视范围广但近物不是很清晰,VGA模式可视范围小近物清晰
void OV7725_Window_Set(u16 width,u16 height,u8 mode)
{
        u8 raw,temp;
        u16 sx,sy;
        
        if(mode)
        {
                if(width>640) width=640;
                if(height>480) height=480;
                sx=(640-width)/2;
                sy=(480-height)/2;
                OV7725_WR_Reg(COM7,0x06);                //设置为VGA模式
                OV7725_WR_Reg(HSTART,0x23);         //水平起始位置
                OV7725_WR_Reg(HSIZE,0xA0);         //水平尺寸
                OV7725_WR_Reg(VSTRT,0x07);         //垂直起始位置
                OV7725_WR_Reg(VSIZE,0xF0);         //垂直尺寸
                OV7725_WR_Reg(HREF,0x00);
                OV7725_WR_Reg(HOutSize,0xA0); //输出尺寸
                OV7725_WR_Reg(VOutSize,0xF0); //输出尺寸
        }
        else
        {
//                sx=(320-width)/2;//  横屏 原始
//                sy=(240-height)/2;//  or↓
                width = 240;//
                height = 320;
                sx=(240-width)/2;//   竖屏 or↑
                sy=(320-height)/2;//
                OV7725_WR_Reg(COM7,0x46);                //设置为QVGA模式
                OV7725_WR_Reg(HSTART,0x3f);         //水平起始位置
                OV7725_WR_Reg(HSIZE, 0x50);         //水平尺寸
                OV7725_WR_Reg(VSTRT, 0x03);         //垂直起始位置
                OV7725_WR_Reg(VSIZE, 0x78);         //垂直尺寸
                OV7725_WR_Reg(HREF,  0x00);
                OV7725_WR_Reg(HOutSize,0x50);        //输出尺寸
                OV7725_WR_Reg(VOutSize,0x78); //输出尺寸
        }
        raw=OV7725_RD_Reg(HSTART);
        temp=raw+(sx>>2);//sx高8位存在HSTART,低2位存在HREF[5:4]
        OV7725_WR_Reg(HSTART,temp);
        OV7725_WR_Reg(HSIZE,width>>2);//width高8位存在HSIZE,低2位存在HREF[1:0]
        
        raw=OV7725_RD_Reg(VSTRT);
        temp=raw+(sy>>1);//sy高8位存在VSTRT,低1位存在HREF[6]
        OV7725_WR_Reg(VSTRT,temp);
        OV7725_WR_Reg(VSIZE,height>>1);//height高8位存在VSIZE,低1位存在HREF[2]
        
        raw=OV7725_RD_Reg(HREF);
        temp=((sy&0x01)<<6)|((sx&0x03)<<4)|((height&0x01)<<2)|(width&0x03)|raw;
        OV7725_WR_Reg(HREF,temp);
        
        OV7725_WR_Reg(HOutSize,width>>2);
        OV7725_WR_Reg(VOutSize,height>>1);
        
        OV7725_RD_Reg(EXHCH);        
        temp = (raw|(width&0x03)|((height&0x01)<<2));        
        OV7725_WR_Reg(EXHCH,temp);        
}

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

396

主题

396

帖子

0

粉丝