废话少说,直接上代码
实验器材:
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查看。
单片机源程序如下:
- #include "sys.h"
- #include "delay.h"
- #include "usart.h"
- #include "led.h"
- #include "key.h"
- #include "lcd.h"
- #include "timer.h"
- #include "dcmi.h"
- #include "sccb.h"
- #include "sram.h"
- #include "malloc.h"
- #include "w25qxx.h"
- #include "fontupd.h"
- #include "text.h"
- #include "atk_qrdecode.h"
- #include "string.h"
- #include "ff.h"
- //图像
- u8 * Data;
- //采集完一帧标志
- u8 Flag=0;
- int main(void)
- {
- int i=0,j=0;
- //设置系统中断优先级分组2
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
- //初始化延时函数
- delay_init(168);
- //初始化串口波特率为115200
- uart_init(115200);
- //初始化LED
- LED_Init();
- //LCD初始化
- LCD_Init();
- //按键初始化
- KEY_Init();
- FSMC_SRAM_Init();
- //初始化内部内存池
- my_mem_init(SRAMIN);
- //初始化外部内存池
- my_mem_init(SRAMEX);
- //初始化W25Q128
- W25QXX_Init();
- //设置字体为黑色
- POINT_COLOR=BLACK;
- //清屏
- LCD_Clear(WHITE);
-
- //检查字库
- while(font_init())
- {
- LCD_ShowString(60,50,lcddev.width,16,16,(u8*)"Font Error!");
- delay_ms(200);
- //清除显示
- LCD_Fill(60,50,lcddev.width,66,WHITE);
- delay_ms(200);
- }
- Show_Str_Mid(0,20,(u8*)"二维码识别实验",16,lcddev.width);
- Show_Str(0,(lcddev.height+240)/2+4,240,16,(u8*)"识别结果:",16,1);
-
- //初始化SCCB接口
- SCCB_GPIO_Config();
- //OV7620寄存器初始化
- //复位
- SCCB_Write_Reg(0x12,0xA4);
- // //测试条纹
- // SCCB_Write_Reg(0x12,0x26);
- //设置输出分辨率240*240的八位灰度数据
- SCCB_Write_Reg(0x17,0x43);
- SCCB_Write_Reg(0x18,0xBB);
- SCCB_Write_Reg(0x19,0x42);
- SCCB_Write_Reg(0x1A,0xB9);
- //10Khz计数,1秒钟中断一次
- //TIM3_Int_Init(10000-1,8400-1);
-
- //为灰度图像申请内存
- Data=mymalloc(SRAMEX,57600);
- //初始化DCMI
- My_DCMI_Init();
- //开启DMA
- DCMI_DMA_Init((u32)Data,57600,DMA_MemoryDataSize_Byte,DMA_MemoryInc_Enable);
- //设置显示窗口
- LCD_Set_Window(0,0,640,480);
- //开始传输
- DCMI_Start();
-
- //设置字体为红色
- POINT_COLOR=RED;
- while(1)
- {
- if(Flag)
- {
- //清除标志
- Flag=0;
- LED0=!LED0;
- for(j=0;j<240;j++)
- {
- //设置光标
- LCD_SetCursor(0,j+100);
- //开始写入GRAM
- LCD_WriteRAM_Prepare();
- for(i=0;i<240;i++)
- {
- if(Data[j*240+i]>140)
- {
- LCD->LCD_RAM=65535;
- }
- else
- {
- LCD->LCD_RAM=0;
- }
- }
- }
- //开启传输
- DCMI_Start();
- }
- }
- }
复制代码
所有资料51hei提供下载:
摄像头OV7620(stm32f407)代码.rar
(1.11 MB, 下载次数: 126)
|