OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3677|回复: 7

关于OV7670摄像头,原来可以获取图像,但想给获取到的像素点排个序,自己改了一下程序就无法获取图像了,求大神们帮解决一下

[复制链接]

3

主题

5

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2017-9-27
在线时间
9 小时
发表于 2017-10-20 16:57:14 | 显示全部楼层 |阅读模式
3金钱
本人初学者,关于OV7670摄像头,用的是战舰开发板,原来用配套的程序可以获取图像,但想给获取到的像素点排个序,自己改了一下程序就无法获取图像了,求大神们帮解决一下

可以获取图像的程序如下:
void camera_refresh(void)
{
        u16 color_r;
        u16 color_g;
        u16 color_b;
        u32 i,j;
        u16        color;

        if(ov_sta)//óDÖ¡ÖD¶Ï¸üD£¿
        {
                LCD_Scan_Dir(U2D_L2R);                //′óéÏμ½ÏÂ,′ó×óμ½óò  
                if(lcddev.id==0X1963)LCD_Set_Window((lcddev.width-240)/2,(lcddev.height-320)/2,240,320);//½«ÏÔê¾ÇøóòéèÖÃμ½ÆáÄ»ÖDÑë
                else if(lcddev.id==0X5510||lcddev.id==0X5310)LCD_Set_Window((lcddev.width-320)/2,(lcddev.height-240)/2,320,240);//½«ÏÔê¾ÇøóòéèÖÃμ½ÆáÄ»ÖDÑë
                LCD_WriteRAM_Prepare();     //¿aê¼D′èëGRAM       
                OV7670_RRST=0;                                //¿a꼸′λ¶áÖ¸Õë
                OV7670_RCK_L;
                OV7670_RCK_H;
                OV7670_RCK_L;
                OV7670_RRST=1;                                //¸′λ¶áÖ¸Õë½áêø
                OV7670_RCK_H;
                for(i=0;i<320;i++){
                        for(j=0;j<240;j++)
                                {
                                                        OV7670_RCK_L;
                                                        color = GPIOC->IDR&0XFF;        //&#182;áêy&#190;Y
                                                        OV7670_RCK_H;
                                                       
                                                        color <<=8;
                                                        OV7670_RCK_L;//
                                                        color  |= GPIOC->IDR&0XFF;        //&#182;áêy&#190;Y
                                                        OV7670_RCK_H;
                                                       
                                                       
                                                        color_r =  color &0xf800;
                                                        color_b = color >>11;
                                                        color  >>=5;
                                                        color_g =color &0x07e0;
                                                       
                                                        color         =        color_r + color_g + color_b;       
                                                       
                                               
                                                LCD->LCD_RAM = color ;        
                                               
                                }
                }
                ov_sta=0;                                        //&#199;&#229;á&#227;&#214;&#161;&#214;D&#182;&#207;±ê&#188;&#199;
                ov_frame++;
                LCD_Scan_Dir(DFT_SCAN_DIR);        //&#187;&#214;&#184;′&#196;&#172;è&#207;é¨&#195;è·&#189;&#207;ò
        }
}          

我把里面的color重新定义成color[][],然后重新编译程序没有报错,但是LCD上一片黑的,并没有显示图像,我改动的程序如下:
void camera_refresh(void)
{
        u16 color_r;
        u16 color_g;
        u16 color_b;
        u32 i,j;
        u16        color[320][240];

        if(ov_sta)//óD&#214;&#161;&#214;D&#182;&#207;&#184;üD&#194;£&#191;
        {
                LCD_Scan_Dir(U2D_L2R);                //′óé&#207;μ&#189;&#207;&#194;,′ó×óμ&#189;óò  
                if(lcddev.id==0X1963)LCD_Set_Window((lcddev.width-240)/2,(lcddev.height-320)/2,240,320);//&#189;&#171;&#207;&#212;ê&#190;&#199;&#248;óòéè&#214;&#195;μ&#189;&#198;á&#196;&#187;&#214;D&#209;&#235;
                else if(lcddev.id==0X5510||lcddev.id==0X5310)LCD_Set_Window((lcddev.width-320)/2,(lcddev.height-240)/2,320,240);//&#189;&#171;&#207;&#212;ê&#190;&#199;&#248;óòéè&#214;&#195;μ&#189;&#198;á&#196;&#187;&#214;D&#209;&#235;
                LCD_WriteRAM_Prepare();     //&#191;aê&#188;D′è&#235;GRAM       
                OV7670_RRST=0;                                //&#191;aê&#188;&#184;′&#206;&#187;&#182;á&#214;&#184;&#213;&#235;
                OV7670_RCK_L;
                OV7670_RCK_H;
                OV7670_RCK_L;
                OV7670_RRST=1;                                //&#184;′&#206;&#187;&#182;á&#214;&#184;&#213;&#235;&#189;áê&#248;
                OV7670_RCK_H;
                for(i=0;i<320;i++){
                        for(j=0;j<240;j++)
                                {
                                                        OV7670_RCK_L;
                                                        color[i][j] = GPIOC->IDR&0XFF;        //&#182;áêy&#190;Y
                                                        OV7670_RCK_H;
                                                       
                                                        color [i][j]<<=8;
                                                        OV7670_RCK_L;//
                                                        color[i][j]  |= GPIOC->IDR&0XFF;        //&#182;áêy&#190;Y
                                                        OV7670_RCK_H;
                                                       
                                                       
                                                        color_r =  color[i][j] &0xf800;
                                                        color_b = color[i][j] >>11;
                                                        color[i][j]  >>=5;
                                                        color_g =color[i][j]&0x07e0;
                                                       
                                                        color[i][j]         =        color_r + color_g + color_b;       
                                                       
                                               
                                                LCD->LCD_RAM = color[i][j] ;        
                                               
                                }
                }
                ov_sta=0;                                        //&#199;&#229;á&#227;&#214;&#161;&#214;D&#182;&#207;±ê&#188;&#199;
                ov_frame++;
                LCD_Scan_Dir(DFT_SCAN_DIR);        //&#187;&#214;&#184;′&#196;&#172;è&#207;é¨&#195;è·&#189;&#207;ò
        }
}          


求各路大神帮忙解决我的问题,感激不尽!!!

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

7

主题

50

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
216
金钱
216
注册时间
2016-2-24
在线时间
39 小时
发表于 2017-11-8 11:09:09 | 显示全部楼层
顶。@正点原子

楼主解决了吗?

我也想用二维数组保存数据。
回复

使用道具 举报

7

主题

50

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
216
金钱
216
注册时间
2016-2-24
在线时间
39 小时
发表于 2017-11-8 11:11:44 | 显示全部楼层
另外可不可以  ov7670的数据以二维数组的形式存入fifo。
回复

使用道具 举报

2

主题

123

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1472
金钱
1472
注册时间
2014-4-8
在线时间
172 小时
发表于 2017-11-8 15:11:58 | 显示全部楼层
这样改你的程序运行会变慢,是不是变慢导致的呢???
回复

使用道具 举报

2

主题

13

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2017-10-11
在线时间
7 小时
发表于 2017-11-22 17:10:38 | 显示全部楼层
那两个for循环是不是有点问题  按照LCD的刷新方向先上后下,先左后右   那应该是外面是240  里面是320吧  ,是不是这样啊
回复

使用道具 举报

2

主题

13

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2017-10-11
在线时间
7 小时
发表于 2017-11-22 17:23:41 | 显示全部楼层
还有就是LCD_RAM只是更新一个像素点吧,LCD->LCD_RAM = color[i][j] ; 这样直接给他赋一个二维数组 不合适吧
回复

使用道具 举报

2

主题

13

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2017-10-11
在线时间
7 小时
发表于 2017-11-22 17:24:58 | 显示全部楼层
就是说  数据可能已经存在二维数组里了   但是显示不出来
回复

使用道具 举报

5

主题

14

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2020-4-19
在线时间
10 小时
发表于 2020-4-19 18:30:34 来自手机 | 显示全部楼层
楼主现在解决了吗,有同样的问题
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-25 16:48

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表