廢話少說,直接上代碼
實驗器材:
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)
2018-4-23 18:06 上傳
點擊文件名下載附件
|