標(biāo)題: 攝像頭OV7620(stm32f407)源代碼 [打印本頁]

作者: xiaoxian    時(shí)間: 2018-4-23 17:34
標(biāo)題: 攝像頭OV7620(stm32f407)源代碼
廢話少說,直接上代碼

實(shí)驗(yàn)器材:
    F407開發(fā)板
   
ATK_QR.lib功能:
    1,支持QR二維碼識(shí)別。(包括常見的UTF8編碼格式和特殊的GBK編碼格式)。
    2,支持EAN碼、39碼、交叉25碼、UPC碼、128碼等編碼方式的條碼識(shí)別。
    3,支持UTF8-OEM轉(zhuǎn)換輸出(需要客戶自己提供轉(zhuǎn)換碼表,OEM一般指GBK編碼)。
    4,內(nèi)存占用:6K(算法內(nèi)存)+ bmp_heigh* bmp_width(字節(jié),8位灰度圖像內(nèi)存)。
   
硬件資源:
    1,DS0、DS1
    2,蜂鳴器
    3,按鍵KEY0/KEY1/KEY2/KEY_UP
    4,LCD模塊
    5,OV2640攝像頭
    6,外部SRAM
   
實(shí)驗(yàn)現(xiàn)象:
    編譯下載代碼,LCD顯示當(dāng)前識(shí)別圖像。將二維碼、條形碼圖像放在攝像頭面前(提示:可
    以網(wǎng)上百度搜索二維碼、一維碼生成器生成各種格式的碼制),手動(dòng)旋轉(zhuǎn)調(diào)節(jié)OV2640模塊
    鏡頭直至圖像清晰,則系統(tǒng)會(huì)掃面圖像并識(shí)別,如果識(shí)別到了則蜂鳴器會(huì)“滴”一聲,并在
    LCD顯示識(shí)別結(jié)果及發(fā)送給串口。通過按鈕(KEY2)結(jié)束識(shí)別。同時(shí)DS1閃爍表示OV2640圖像幀
    中斷,DS0閃爍速度慢表示識(shí)別圖像模式,閃爍快則表示已結(jié)束識(shí)別。
   
注意事項(xiàng):
    1,移植ATK_QR.lib需將堆棧(Stack_Size)設(shè)置為0X1000或以上,在startup_stm32f40_41xx.s中設(shè)置。
    2,LCD識(shí)別結(jié)果可打開串口助手XCOM查看。


單片機(jī)源程序如下:
  1. #include "sys.h"
  2. #include "delay.h"
  3. #include "usart.h"
  4. #include "led.h"
  5. #include "key.h"
  6. #include "lcd.h"
  7. #include "timer.h"
  8. #include "dcmi.h"
  9. #include "sccb.h"
  10. #include "sram.h"
  11. #include "malloc.h"
  12. #include "w25qxx.h"
  13. #include "fontupd.h"
  14. #include "text.h"
  15. #include "atk_qrdecode.h"
  16. #include "string.h"
  17. #include "ff.h"


  18. //圖像
  19. u8 * Data;
  20. //采集完一幀標(biāo)志
  21. u8 Flag=0;

  22. int main(void)
  23. {
  24.         int i=0,j=0;
  25.         //設(shè)置系統(tǒng)中斷優(yōu)先級(jí)分組2
  26.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  27.         //初始化延時(shí)函數(shù)
  28.         delay_init(168);  
  29.         //初始化串口波特率為115200
  30.         uart_init(115200);                        
  31.         //初始化LED
  32.         LED_Init();                                       
  33.         //LCD初始化  
  34.          LCD_Init();                                       
  35.         //按鍵初始化
  36.          KEY_Init();
  37.         FSMC_SRAM_Init();                          
  38.         //初始化內(nèi)部內(nèi)存池
  39.         my_mem_init(SRAMIN);               
  40.          //初始化外部內(nèi)存池  
  41.          my_mem_init(SRAMEX);
  42.         //初始化W25Q128
  43.         W25QXX_Init();                                 
  44.         //設(shè)置字體為黑色
  45.         POINT_COLOR=BLACK;
  46.         //清屏        
  47.         LCD_Clear(WHITE);
  48.         
  49.         //檢查字庫
  50.         while(font_init())
  51.         {            
  52.                 LCD_ShowString(60,50,lcddev.width,16,16,(u8*)"Font Error!");
  53.                 delay_ms(200);                                 
  54.                 //清除顯示
  55.                 LCD_Fill(60,50,lcddev.width,66,WHITE);
  56.                 delay_ms(200);
  57.         }
  58.         Show_Str_Mid(0,20,(u8*)"二維碼識(shí)別實(shí)驗(yàn)",16,lcddev.width);        
  59.         Show_Str(0,(lcddev.height+240)/2+4,240,16,(u8*)"識(shí)別結(jié)果:",16,1);
  60.         
  61.         //初始化SCCB接口
  62.         SCCB_GPIO_Config();
  63.         //OV7620寄存器初始化
  64.         //復(fù)位
  65.         SCCB_Write_Reg(0x12,0xA4);
  66. //        //測試條紋
  67. //        SCCB_Write_Reg(0x12,0x26);
  68.         //設(shè)置輸出分辨率240*240的八位灰度數(shù)據(jù)
  69.         SCCB_Write_Reg(0x17,0x43);
  70.         SCCB_Write_Reg(0x18,0xBB);
  71.         SCCB_Write_Reg(0x19,0x42);
  72.         SCCB_Write_Reg(0x1A,0xB9);
  73.         //10Khz計(jì)數(shù),1秒鐘中斷一次
  74.         //TIM3_Int_Init(10000-1,8400-1);
  75.         
  76.         //為灰度圖像申請(qǐng)內(nèi)存
  77.         Data=mymalloc(SRAMEX,57600);
  78.         //初始化DCMI
  79.         My_DCMI_Init();
  80.         //開啟DMA
  81.         DCMI_DMA_Init((u32)Data,57600,DMA_MemoryDataSize_Byte,DMA_MemoryInc_Enable);
  82.         //設(shè)置顯示窗口
  83.         LCD_Set_Window(0,0,640,480);
  84.         //開始傳輸
  85.         DCMI_Start();
  86.         
  87.         //設(shè)置字體為紅色
  88.          POINT_COLOR=RED;

  89.          while(1)
  90.         {        
  91.                 if(Flag)
  92.                 {
  93.                         //清除標(biāo)志
  94.                         Flag=0;
  95.                         LED0=!LED0;
  96.                         for(j=0;j<240;j++)
  97.                         {
  98.                                 //設(shè)置光標(biāo)
  99.                                 LCD_SetCursor(0,j+100);
  100.                                 //開始寫入GRAM
  101.                                 LCD_WriteRAM_Prepare();
  102.                                 for(i=0;i<240;i++)
  103.                                 {
  104.                                         if(Data[j*240+i]>140)
  105.                                         {
  106.                                                 LCD->LCD_RAM=65535;
  107.                                         }
  108.                                         else
  109.                                         {
  110.                                                 LCD->LCD_RAM=0;
  111.                                         }
  112.                                 }
  113.                         }
  114.                         //開啟傳輸
  115.                         DCMI_Start();
  116.                 }
  117.         }
  118. }
復(fù)制代碼

所有資料51hei提供下載:
攝像頭OV7620(stm32f407)代碼.rar (1.11 MB, 下載次數(shù): 126)



作者: 461472634    時(shí)間: 2018-6-19 11:06
學(xué)習(xí)一下,感謝分享
作者: nanvivi    時(shí)間: 2018-8-15 20:55
代碼下載后編譯有一個(gè)錯(cuò)誤,
main.c(15): error:  #5: cannot open source input file "atk_qrdecode.h": No such file or directory
把#include "atk_qrdecode.h"屏了之后好了。。?梢云羻
作者: HRC    時(shí)間: 2018-8-16 15:28

學(xué)習(xí)一下,感謝分享,很實(shí)用
作者: hustye    時(shí)間: 2018-9-16 13:55
感謝分享,很實(shí)用
作者: fan52    時(shí)間: 2019-8-16 17:16
能不能搞個(gè)圖像顯示的程序,能檢測出人的外形
作者: 涼風(fēng)習(xí)習(xí)    時(shí)間: 2020-1-14 15:20
學(xué)習(xí)一下,感謝分享




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1