找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4774|回复: 6
打印 上一主题 下一主题
收起左侧

摄像头OV7620(stm32f407)源代码

  [复制链接]
跳转到指定楼层
楼主
ID:314647 发表于 2018-4-23 17:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
废话少说,直接上代码

实验器材:
    F407开发板
   
ATK_QR.lib功能:
    1,支持QR二维码识别。(包括常见的UTF8编码格式和特殊的GBK编码格式)。
    2,支持EAN码、39码、交叉25码、UPC码、128码等编码方式的条码识别。
    3,支持UTF8-OEM转换输出(需要客户自己提供转换码表,OEM一般指GBK编码)。
    4,内存占用:6K(算法内存)+ bmp_heigh* bmp_width(字节,8位灰度图像内存)。
   
硬件资源:
    1,DS0、DS1
    2,蜂鸣器
    3,按键KEY0/KEY1/KEY2/KEY_UP
    4,LCD模块
    5,OV2640摄像头
    6,外部SRAM
   
实验现象:
    编译下载代码,LCD显示当前识别图像。将二维码、条形码图像放在摄像头面前(提示:可
    以网上百度搜索二维码、一维码生成器生成各种格式的码制),手动旋转调节OV2640模块
    镜头直至图像清晰,则系统会扫面图像并识别,如果识别到了则蜂鸣器会“滴”一声,并在
    LCD显示识别结果及发送给串口。通过按钮(KEY2)结束识别。同时DS1闪烁表示OV2640图像帧
    中断,DS0闪烁速度慢表示识别图像模式,闪烁快则表示已结束识别。
   
注意事项:
    1,移植ATK_QR.lib需将堆栈(Stack_Size)设置为0X1000或以上,在startup_stm32f40_41xx.s中设置。
    2,LCD识别结果可打开串口助手XCOM查看。


单片机源程序如下:
  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. //采集完一帧标志
  21. u8 Flag=0;

  22. int main(void)
  23. {
  24.         int i=0,j=0;
  25.         //设置系统中断优先级分组2
  26.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  27.         //初始化延时函数
  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.         //初始化内部内存池
  39.         my_mem_init(SRAMIN);               
  40.          //初始化外部内存池  
  41.          my_mem_init(SRAMEX);
  42.         //初始化W25Q128
  43.         W25QXX_Init();                                 
  44.         //设置字体为黑色
  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*)"二维码识别实验",16,lcddev.width);        
  59.         Show_Str(0,(lcddev.height+240)/2+4,240,16,(u8*)"识别结果:",16,1);
  60.         
  61.         //初始化SCCB接口
  62.         SCCB_GPIO_Config();
  63.         //OV7620寄存器初始化
  64.         //复位
  65.         SCCB_Write_Reg(0x12,0xA4);
  66. //        //测试条纹
  67. //        SCCB_Write_Reg(0x12,0x26);
  68.         //设置输出分辨率240*240的八位灰度数据
  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计数,1秒钟中断一次
  74.         //TIM3_Int_Init(10000-1,8400-1);
  75.         
  76.         //为灰度图像申请内存
  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.         //设置显示窗口
  83.         LCD_Set_Window(0,0,640,480);
  84.         //开始传输
  85.         DCMI_Start();
  86.         
  87.         //设置字体为红色
  88.          POINT_COLOR=RED;

  89.          while(1)
  90.         {        
  91.                 if(Flag)
  92.                 {
  93.                         //清除标志
  94.                         Flag=0;
  95.                         LED0=!LED0;
  96.                         for(j=0;j<240;j++)
  97.                         {
  98.                                 //设置光标
  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. }
复制代码

所有资料51hei提供下载:
摄像头OV7620(stm32f407)代码.rar (1.11 MB, 下载次数: 126)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏5 分享淘帖 顶1 踩1
回复

使用道具 举报

沙发
ID:354134 发表于 2018-6-19 11:06 | 只看该作者
学习一下,感谢分享
回复

使用道具 举报

板凳
ID:365987 发表于 2018-8-15 20:55 | 只看该作者
代码下载后编译有一个错误,
main.c(15): error:  #5: cannot open source input file "atk_qrdecode.h": No such file or directory
把#include "atk_qrdecode.h"屏了之后好了。。。可以屏吗
回复

使用道具 举报

地板
ID:292503 发表于 2018-8-16 15:28 | 只看该作者

学习一下,感谢分享,很实用
回复

使用道具 举报

5#
ID:398629 发表于 2018-9-16 13:55 | 只看该作者
感谢分享,很实用
回复

使用道具 举报

6#
ID:600674 发表于 2019-8-16 17:16 | 只看该作者
能不能搞个图像显示的程序,能检测出人的外形
回复

使用道具 举报

7#
ID:100713 发表于 2020-1-14 15:20 | 只看该作者
学习一下,感谢分享
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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