OV7670在LCD上显示之后出现分屏

2019-08-14 16:38发布

OV7670在LCD上显示之后出现分屏,效果如下,程序如下,各位大佬求解
extern u8 ov_sta;        //Ôúexit.càïÃ涨òå
extern u8 ov_frame;        //Ôútimer.càïÃ涨òå

//¸üDÂLCDÏÔê¾
void camera_refresh(void)
{
        u32 j;
         u16 color;         
        if(ov_sta==2)
        {
          LCD_Set_Window(0,0,120,160);
                LCD_Scan_Dir(U2D_L2R);                //′óéÏμ½ÏÂ,′ó×óμ½óò
                LCD_SetCursor(0x00,0x0000);        //éèÖÃ1a±êλÖÃ
                LCD_WriteRAM_Prepare();     //¿aê¼D′èëGRAM        
                 OV7670_CS=0;         
                 OV7670_RRST=0;                                //¿a꼸′λ¶áÖ¸Õë
                OV7670_RCK=0;
                OV7670_RCK=1;
                OV7670_RCK=0;
                OV7670_RRST=1;                                //¸′λ¶áÖ¸Õë½áêø
                OV7670_RCK=1;  
                for(j=0;j<19200;j++)
                {
                        GPIOB->CRL=0X88888888;                  
                        OV7670_RCK=0;
                        color=OV7670_DATA;                //&#182;áêy&#190;Y
                        OV7670_RCK=1;         
                        color<<=8;                                          
                         OV7670_RCK=0;
                        color|=OV7670_DATA;                //&#182;áêy&#190;Y                  
                        OV7670_RCK=1;
                        GPIOB->CRL=0X33333333;
//      if(color<25000)                                         //
//      color=0x0000;                                        //
//      else                                                       //
//      color=0xffff;                                                             //
                        LCD_WR_DATA(color);         
                }  
                 OV7670_CS=1;                                                         
                OV7670_RCK=0;
                OV7670_RCK=1;
                EXTI->R=1<<15;                     //&#199;&#229;3yLINE8é&#207;μ&#196;&#214;D&#182;&#207;±ê&#214;&#190;&#206;&#187;
                ov_sta=0;                                        //&#191;aê&#188;&#207;&#194;ò&#187;′&#206;2é&#188;ˉ
                 ov_frame++;
                LCD_Scan_Dir(DFT_SCAN_DIR);        //&#187;&#214;&#184;′&#196;&#172;è&#207;é¨&#195;è·&#189;&#207;ò                                                     
        }
}         
int main(void)
{        
        u8 i;        
        delay_init();                     //&#209;óê±oˉêy3&#245;ê&#188;&#187;ˉ
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// éè&#214;&#195;&#214;D&#182;&#207;ó&#197;&#207;è&#188;&#182;·&#214;×é2
        uart_init(9600);
        OV7670_Init();        
        LED_Init();                                  //3&#245;ê&#188;&#187;ˉó&#235;LEDá&#172;&#189;óμ&#196;ó2&#188;t&#189;ó&#191;ú
        LCD_Init();                                   //3&#245;ê&#188;&#187;ˉLCD
        if(lcddev.id==0X6804||lcddev.id==0X5310||lcddev.id==0X5510||lcddev.id==0X1963) //&#199;&#191;&#214;&#198;éè&#214;&#195;&#198;á&#196;&#187;·&#214;±&#230;&#194;ê&#206;a320*240.ò&#212;&#214;§3&#214;3.5′&#231;′ó&#198;á
        {
                lcddev.width=120;                  //240
                lcddev.height=160;                 //320
        }
        usmart_dev.init(72);        //3&#245;ê&#188;&#187;ˉUSMART        
        
         POINT_COLOR=RED;//éè&#214;&#195;×&#214;ì&#229;&#206;aoìé&#171;
        LCD_ShowString(60,50,200,200,16,"Mini STM32");        
        LCD_ShowString(60,70,200,200,16,"OV7670 TEST");        
        LCD_ShowString(60,90,200,200,16,"ATOM@ALIENTEK");
        LCD_ShowString(60,110,200,200,16,"2014/3/27");           
        LCD_ShowString(60,130,200,200,16,"Use USMART To Set!");         
          LCD_ShowString(60,150,200,200,16,"OV7670 Init...");         
        while(OV7670_Init())//3&#245;ê&#188;&#187;ˉOV7670
        {
                LCD_ShowString(60,150,200,200,16,"OV7670 Error!!");
                delay_ms(200);
            LCD_Fill(60,150,239,166,WHITE);
                delay_ms(200);
        }
         LCD_ShowString(60,150,200,200,16,"OV7670 Init OK");
        delay_ms(1500);                              
        TIM3_Int_Init(10000,7199);                        //TIM3,10Khz&#188;&#198;êy&#198;μ&#194;ê,1&#195;&#235;&#214;ó&#214;D&#182;&#207;                                                                          
        EXTI15_Init();                                                //ê1&#196;ü&#182;¨ê±&#198;÷2&#182;&#187;&#241;
        OV7670_Window_Set(10,174,120,160);        //éè&#214;&#195;′°&#191;ú                                  //   160   240  

          OV7670_CS=0;                                                         
         while(1)
        {        
                 camera_refresh();        //&#184;üD&#194;&#207;&#212;ê&#190;         
                 if(i!=ov_frame)                //DS0éá&#203;&#184;.
                {
                        i=ov_frame;
                        LED0=!LED0;
                 }
        }           
}

分屏 分屏
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
我不想说
1楼-- · 2019-08-14 22:36
肯定分屏啊,你摄像头只扫描了120*160,但是你的屏的分辨率目测320*240,你只改了摄像头扫描不改屏不出事才怪。
xiaopikadi
2楼-- · 2019-08-15 02:41
[mw_shl_code=applescript,true]extern u8 ov_sta;        //&#212;úexit.cà&#239;&#195;&#230;&#182;¨ò&#229;
extern u8 ov_frame;                                                       //&#212;útimer.cà&#239;&#195;&#230;&#182;¨ò&#229;

                                                                                        //&#184;üD&#194;LCD&#207;&#212;ê&#190;
void camera_refresh(void)
{
        u32 j;
        u16 color;         
        if(ov_sta==2)
        {
          LCD_Set_Window(0,0,120,160);
                LCD_Scan_Dir(U2D_L2R);                                                      //′óé&#207;μ&#189;&#207;&#194;,′ó×óμ&#189;óò
                LCD_SetCursor(0x00,0x0000);                                                   //éè&#214;&#195;1a±ê&#206;&#187;&#214;&#195;
                LCD_WriteRAM_Prepare();                                               //&#191;aê&#188;D′è&#235;GRAM       
                OV7670_CS=0;         
                OV7670_RRST=0;                                //&#191;aê&#188;&#184;′&#206;&#187;&#182;á&#214;&#184;&#213;&#235;
                OV7670_RCK=0;
                OV7670_RCK=1;
                OV7670_RCK=0;
                OV7670_RRST=1;                                                                   //&#184;′&#206;&#187;&#182;á&#214;&#184;&#213;&#235;&#189;áê&#248;
                OV7670_RCK=1;   
                for(j=0;j<19200;j++)
                {
                        GPIOB->CRL=0X88888888;                  
                        OV7670_RCK=0;
                        color=OV7670_DATA;                //&#182;áêy&#190;Y
                        OV7670_RCK=1;        
                        color<<=8;                                          
                        OV7670_RCK=0;
                        color|=OV7670_DATA;                                                          //&#182;áêy&#190;Y                  
                        OV7670_RCK=1;
                        GPIOB->CRL=0X33333333;
//      if(color<25000)                                         //
//      color=0x0000;                                        //
//      else                                                       //
//      color=0xffff;                                                             //
                        LCD_WR_DATA(color);         
                }  
                OV7670_CS=1;                                                          
                OV7670_RCK=0;
                OV7670_RCK=1;
                EXTI->PR=1<<15;                                                     //&#199;&#229;3yLINE8é&#207;μ&#196;&#214;D&#182;&#207;±ê&#214;&#190;&#206;&#187;
                ov_sta=0;                                                                        //&#191;aê&#188;&#207;&#194;ò&#187;′&#206;2é&#188;ˉ
                ov_frame++;
                LCD_Scan_Dir(DFT_SCAN_DIR);                                //&#187;&#214;&#184;′&#196;&#172;è&#207;é¨&#195;è·&#189;&#207;ò                                                     
        }
}          
int main(void)
{       
        u8 i;       
        delay_init();                                                                                               //&#209;óê±oˉêy3&#245;ê&#188;&#187;ˉ
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);                         // éè&#214;&#195;&#214;D&#182;&#207;ó&#197;&#207;è&#188;&#182;·&#214;×é2
        uart_init(9600);
        OV7670_Init();       
        LED_Init();                                                                                             //3&#245;ê&#188;&#187;ˉó&#235;LEDá&#172;&#189;óμ&#196;ó2&#188;t&#189;ó&#191;ú
        LCD_Init();                                                                                              //3&#245;ê&#188;&#187;ˉLCD
        if(lcddev.id==0X6804||lcddev.id==0X5310||lcddev.id==0X5510||lcddev.id==0X1963)                                         //&#199;&#191;&#214;&#198;éè&#214;&#195;&#198;á&#196;&#187;·&#214;±&#230;&#194;ê&#206;a320*240.ò&#212;&#214;§3&#214;3.5′&#231;′ó&#198;á
       
{
                lcddev.width=120;                  //240
                lcddev.height=160;                 //320
        }
        usmart_dev.init(72);        //3&#245;ê&#188;&#187;ˉUSMART       
       
        POINT_COLOR=RED;//éè&#214;&#195;×&#214;ì&#229;&#206;aoìé&#171;
        LCD_ShowString(60,50,200,200,16,"Mini STM32");       
        LCD_ShowString(60,70,200,200,16,"OV7670 TEST");       
        LCD_ShowString(60,90,200,200,16,"ATOM@ALIENTEK");
        LCD_ShowString(60,110,200,200,16,"2014/3/27");           
        LCD_ShowString(60,130,200,200,16,"Use USMART To Set!");         
          LCD_ShowString(60,150,200,200,16,"OV7670 Init...");          
        while(OV7670_Init())//3&#245;ê&#188;&#187;ˉOV7670
        {
                LCD_ShowString(60,150,200,200,16,"OV7670 Error!!");
                delay_ms(200);
            LCD_Fill(60,150,239,166,WHITE);
                delay_ms(200);
        }
        LCD_ShowString(60,150,200,200,16,"OV7670 Init OK");
        delay_ms(1500);                              
        TIM3_Int_Init(10000,7199);                        //TIM3,10Khz&#188;&#198;êy&#198;μ&#194;ê,1&#195;&#235;&#214;ó&#214;D&#182;&#207;                                                                          
        EXTI15_Init();                                                //ê1&#196;ü&#182;¨ê±&#198;÷2&#182;&#187;&#241;
        OV7670_Window_Set(10,174,120,160);        //éè&#214;&#195;′°&#191;ú                                  //   160   240  

          OV7670_CS=0;                                                          
        while(1)
        {       
                camera_refresh();        //&#184;üD&#194;&#207;&#212;ê&#190;         
                if(i!=ov_frame)                //DS0éá&#203;&#184;.
                {
                        i=ov_frame;
                        LED0=!LED0;
                }
        }          
}

[/mw_shl_code]
xiaopikadi
3楼-- · 2019-08-15 06:26
我不想说 发表于 2017-8-7 16:22
肯定分屏啊,你摄像头只扫描了120*160,但是你的屏的分辨率目测320*240,你只改了摄像头扫描不改屏不出事才 ...

我把能改的基本都改为120*160的了,,还有就是屏的分辨率具体在哪改
我不想说
4楼-- · 2019-08-15 09:42
xiaopikadi 发表于 2017-8-8 15:42
我把能改的基本都改为120*160的了,,还有就是屏的分辨率具体在哪改

if(lcddev.id==0X6804||lcddev.id==0X5310||lcddev.id==0X5510||lcddev.id==0X1963)                                         //&#199;&#191;&#214;&#198;éè&#214;&#195;&#198;á&#196;&#187;·&#214;±&#230;&#194;ê&#206;a320*240.ò&#212;&#214;§3&#214;3.5′&#231;′ó&#198;á
     
{
        lcddev.width=120;                  //240
        lcddev.height=160;                 //320



这条语句你看懂了吗?关键就在这儿。他为什么不对9341判断?因为9341是它默认的,

一周热门 更多>