久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 10273|回復: 3
打印 上一主題 下一主題
收起左側

OV7670攝像頭實驗,任意窗口輸出,灰度輸出

[復制鏈接]
跳轉到指定樓層
樓主
ID:223055 發(fā)表于 2017-8-9 17:06 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
1.實驗描述:
通過config_ov7670_OutPut(u16 xsta,u16 ysta,u16 width,u16 height,u8 ouput_mode)可以設置攝像頭顯示圖片的位置,窗口的大小,顯示的模式(彩色還是灰度)。

2.說明:
  灰度輸出:將攝像頭設置輸出為YUV格式(YUYV輸出,意思就是第一個字節(jié)是Y,第二個字節(jié)是U,第三個字節(jié)是Y,第四個字節(jié)是V輪流輸出),取Y分量,去掉U,V,并將Y分量轉換為RGB565就可以顯示灰度圖像了。

3.如何提高幀數(shù):
  a:提高攝像頭輸出的幀數(shù)
  當ov_sta==2的時候們才開始顯示圖像。如果攝像頭能輸出30FPS,那么在液晶顯示速度足夠的情況下,最多只能顯示15FPS,所以想要提高顯示幀率可以提高攝像頭輸出的幀率。
  這里有一個公式:1s=510*784*2*2*PCLK*攝像頭輸出幀數(shù)。(至于原理可以看下時序圖) 。這里初始化的代碼設置的像素輸出時鐘PCLK為48MHZ,所以我們只能輸出30FPS,可以通過設置0x6b將PCLK的時鐘設置為96MHZ(最高了,外部輸入時鐘為12MHZ 這了8倍頻),那么就可以輸出60FPS,就可以提高顯示的幀率了。
  b:送數(shù)據(jù)的顯示速度,例如 用FSMC控制液晶,快速IO,移位等等。

4.如何調試:
利用usmart調試攝像頭很方便的哦, 將函數(shù)config_ov7670_OutPut(u16 xsta,u16 ysta,u16 width,u16 height,u8 ouput_mode)和SCCB_WR_Reg(u8 reg,u8 data)添加到usmart_config.c文件就好了^_^


源程序:
  1. #include "led.h"
  2. #include "delay.h"
  3. #include "key.h"
  4. #include "sys.h"
  5. #include "lcd.h"
  6. #include "usart.h"         
  7. #include "string.h"
  8. #include "ov7670.h"
  9. #include "tpad.h"
  10. #include "timer.h"
  11. #include "exti.h"
  12. #include "usmart.h"

  13. extern u8 ov_sta;        //在exit.c里面定義
  14. extern u8 ov_frame;        //在timer.c里面定義       
  15. extern u8 data_ready;       

  16. u16 color_r;
  17. u16 color_g;
  18. u16 color_b;




  19. //設置CPU的頻率
  20. void ov7670_clock_set(u8 PLL)
  21. {
  22.         u8 temp=0;          
  23.         RCC->CFGR&=0XFFFFFFFC;       
  24.         RCC->CR&=~0x01000000;            
  25.         RCC->CFGR&=~(0XF<<18);       
  26.         PLL-=2;//抵消2個單位
  27.         RCC->CFGR|=PLL<<18;          
  28.         RCC->CFGR|=1<<16;                  //PLLSRC ON  
  29.         FLASH->ACR|=0x12;          
  30.         RCC->CR|=0x01000000;          //PLLON
  31.         while(!(RCC->CR>>25));       
  32.         RCC->CFGR|=0x02;       
  33.         while(temp!=0x02)     
  34.         {   
  35.                 temp=RCC->CFGR>>2;
  36.                 temp&=0x03;
  37.         }   
  38. }

  39. //更新LCD顯示
  40. void camera_refresh()
  41. {
  42.         u32 i,j;
  43.         u16 color;
  44.         if(ov_sta==2)
  45.         {
  46.                 LCD_Scan_Dir(U2D_L2R);                //從上到下,從左到右
  47.                 LCD_SetCursor(0x00,0x0000);        //設置光標位置
  48.                 LCD_WriteRAM_Prepare();     //開始寫入GRAM       
  49.                 OV7670_RRST=0;                                //開始復位讀指針
  50.                 OV7670_RCK_L;
  51.                 OV7670_RCK_H;
  52.                 OV7670_RCK_L;
  53.                 OV7670_RRST=1;                                //復位讀指針結束
  54.                 OV7670_RCK_H;  
  55.                 if(ov7670_config.mode){
  56.                         for(i=0; i<ov7670_config.height; i++)
  57.                         {
  58.                         //        LCD_SetCursor(i+ov7670_config.xsta,ov7670_config.ysta);        //設置光標位置
  59.                         //        LCD_WriteRAM_Prepare();     //開始寫入GRAM       
  60.                                 for(j=0; j<ov7670_config.width; j++)
  61.                                 {
  62.                                         OV7670_RCK_L;
  63.                                         color = GPIOC->IDR&0XFF;        //讀數(shù)據(jù)
  64.                                         OV7670_RCK_H;
  65.                                        
  66.                                         color<<=8;
  67.                                         OV7670_RCK_L;//因為設置的是 YUYV輸出,第二個字節(jié)沒用,不需要讀
  68.                                 //        color |= GPIOC->IDR&0XFF;        //
  69.                                         OV7670_RCK_H;
  70.                                        
  71.                                        
  72.                                         color_r = color&0xf800;
  73.                                         color_b = color>>11;
  74.                                         color >>=5;
  75.                                         color_g =color&0x07e0;
  76.                                        
  77.                                         LCD->LCD_RAM= color_r + color_g + color_b;   
  78.                                 }
  79.          
  80.                         }
  81.                 }else{
  82.                         for(i=0; i<ov7670_config.height; i++)
  83.                         {
  84.                         //        LCD_SetCursor(i+ov7670_config.xsta,ov7670_config.ysta);        //設置光標位置
  85.                         //        LCD_WriteRAM_Prepare();     //開始寫入GRAM       
  86.                                 for(j=0; j<ov7670_config.width; j++)
  87.                                 {
  88.                                         OV7670_RCK_L;
  89.                                         color = GPIOC->IDR&0XFF;        //讀數(shù)據(jù)
  90.                                         OV7670_RCK_H;
  91.                                        
  92.                                         color<<=8;
  93.                                         OV7670_RCK_L;
  94.                                         color |= GPIOC->IDR&0XFF;        //讀數(shù)據(jù)
  95.                                         OV7670_RCK_H;
  96.                                        
  97.                                         LCD->LCD_RAM=color;   
  98.                                 }
  99.          
  100.                         }
  101.                 }               
  102.                 EXTI_ClearITPendingBit(EXTI_Line8);  //清除LINE8上的中斷標志位
  103.                 ov_sta=0;                                        //開始下一次采集
  104.                 ov_frame++;
  105.           LCD_Scan_Dir(DFT_SCAN_DIR);        //恢復默認掃描方向
  106.         }
  107. }       


  108. int main(void)
  109. {         
  110.         delay_init();                     //延時函數(shù)初始化          
  111.         NVIC_Configuration();          //設置NVIC中斷分組2:2位搶占優(yōu)先級,2位響應優(yōu)先級
  112.         uart_init(9600);                 //串口初始化為9600
  113.         LED_Init();                             //LED端口初始化
  114.         LCD_Init();       
  115.         KEY_Init();                
  116.         TPAD_Init(72);                        //觸摸按鍵初始化
  117.         usmart_dev.init(72);        //初始化USMART                            
  118.         POINT_COLOR=RED;//設置字體為紅色
  119.         LCD_ShowString(60,50,200,16,16,"WarShip STM32");       
  120.         LCD_ShowString(60,70,200,16,16,"OV7670 TEST");       
  121.         LCD_ShowString(60,90,200,16,16,"ATOM@ALIENTEK");
  122.         LCD_ShowString(60,110,200,16,16,"2012/9/14");           
  123.           LCD_ShowString(60,130,200,16,16,"OV7670 Init...");          
  124.         while(OV7670_Init())//初始化OV7670
  125.         {
  126.                 LCD_ShowString(60,130,200,16,16,"OV7670 Error!!");
  127.                 delay_ms(200);
  128.             LCD_Fill(60,130,239,246,WHITE);
  129.                 delay_ms(200);
  130.         }
  131.         LCD_ShowString(60,130,200,16,16,"OV7670 Init OK");
  132.           

  133.        
  134.         TIM6_Int_Init(10000,7199);                        //10Khz計數(shù)頻率,1秒鐘中斷                                                                          
  135.         EXTI8_Init();                                                //使能定時器捕獲
  136.           OV7670_CS=0;                       
  137.        
  138.         config_ov7670_OutPut(20,60,320,240,1);

  139.         while(1)
  140.         {       
  141.                 camera_refresh();//更新顯示
  142.         }
  143. }

復制代碼
源碼以及參考的文檔見附件:

攝像頭實驗(彩色,灰度,任意窗口).rar (359.28 KB, 下載次數(shù): 126)
ov7670攝像頭分辨率設置方法詳解:
http://www.zg4o1577.cn/bbs/dpj-92272-1.html




分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂1 踩
回復

使用道具 舉報

沙發(fā)
ID:138247 發(fā)表于 2019-4-4 16:16 | 只看該作者

謝謝分享。。。
回復

使用道具 舉報

板凳
ID:545992 發(fā)表于 2019-5-23 23:12 | 只看該作者
謝謝分享
回復

使用道具 舉報

地板
ID:583148 發(fā)表于 2019-7-21 09:41 | 只看該作者
謝謝分享
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 在线播放国产一区二区三区 | 免费特级黄毛片 | 亚洲精品三级 | 在线免费观看黄a | 久草视频在线播放 | 91精品国产一区二区三区 | 国产综合第一页 | 国产综合精品一区二区三区 | 久久免费观看一级毛片 | 自拍偷拍亚洲一区 | 欧美久久久 | 久热电影| 久久精品国产免费高清 | 九九精品视频在线 | 欧美一区二区大片 | 99热这里都是精品 | 亚洲先锋影音 | 国产一区在线视频 | 日日艹夜夜艹 | 视频二区国产 | 国产日日操| 欧美日韩视频在线播放 | 久久久久亚洲精品 | 亚洲一区三区在线观看 | 成人在线观看免费视频 | 麻豆亚洲 | 国产成人免费观看 | 久久伊人一区二区 | 日韩精品一区二区三区第95 | 毛色毛片免费看 | 水蜜桃久久夜色精品一区 | 国产大片一区 | 日韩欧美在线免费观看视频 | 不卡视频在线 | 高清亚洲 | 成人一区二区三区在线观看 | 亚洲精品视频在线 | 91在线精品秘密一区二区 | 欧美国产精品 | 精品三区 | 久久国产精品偷 |