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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 8823|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

ATK-OV2640攝像頭模塊說(shuō)明+源碼+封裝庫(kù)等開(kāi)發(fā)資料

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主


該文件夾下包含8個(gè)源碼:
(寄存器版本,適合探索者STM32F4開(kāi)發(fā)板)實(shí)驗(yàn)42 照相機(jī)實(shí)驗(yàn).rar
(庫(kù)函數(shù)版本,適合探索者STM32F4開(kāi)發(fā)板)實(shí)驗(yàn)42 照相機(jī)實(shí)驗(yàn).rar

(寄存器版本,適合戰(zhàn)艦V3和精英STM32開(kāi)發(fā)板)擴(kuò)展實(shí)驗(yàn)6 ATK-OV2640 攝像頭模塊測(cè)試實(shí)驗(yàn).rar
(庫(kù)函數(shù)版本,適合戰(zhàn)艦V3和精英STM32開(kāi)發(fā)板)擴(kuò)展實(shí)驗(yàn)6 ATK-OV2640 攝像頭模塊測(cè)試實(shí)驗(yàn).rar

(寄存器版本,適合阿波羅STM32F429開(kāi)發(fā)板)擴(kuò)展實(shí)驗(yàn)10 ATK-OV2640 攝像頭模塊測(cè)試實(shí)驗(yàn).rar
(庫(kù)函數(shù)版本,適合阿波羅STM32F429開(kāi)發(fā)板)擴(kuò)展實(shí)驗(yàn)10 ATK-OV2640 攝像頭模塊測(cè)試實(shí)驗(yàn).rar

(寄存器版本,適合阿波羅STM32F767開(kāi)發(fā)板)擴(kuò)展實(shí)驗(yàn)10 ATK-OV2640 攝像頭模塊測(cè)試實(shí)驗(yàn).rar
(庫(kù)函數(shù)版本,適合阿波羅STM32F767開(kāi)發(fā)板)擴(kuò)展實(shí)驗(yàn)10 ATK-OV2640 攝像頭模塊測(cè)試實(shí)驗(yàn).rar

包含多款開(kāi)發(fā)板的例程,每個(gè)例程又分為寄存器和庫(kù)函數(shù)兩個(gè)版本,請(qǐng)大家務(wù)必根據(jù)自己的開(kāi)發(fā)板,下載正確的例程!不要下載錯(cuò)了。

例程使用說(shuō)明請(qǐng)看源碼里面的readme.txt或者相關(guān)AN文檔。


單片機(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 "ltdc.h"
  8. #include "string.h"
  9. #include "sdram.h"
  10. #include "malloc.h"
  11. #include "w25qxx.h"
  12. #include "ov2640.h"
  13. #include "dcmi.h"  
  14. #include "pcf8574.h"
  15. #include "ff.h"
  16. #include "exfuns.h"
  17. #include "string.h"
  18. #include "usmart.h"
  19. #include "sdio_sdcard.h"
  20. #include "fontupd.h"
  21. #include "text.h"
  22. #include "piclib.h"       
  23. #include "string.h"               
  24. #include "math.h"

  25. vu8 bmp_request=0;                                                //bmp拍照請(qǐng)求:0,無(wú)bmp拍照請(qǐng)求;1,有bmp拍照請(qǐng)求,需要在幀中斷里面,關(guān)閉DCMI接口.
  26. u8 ovx_mode=0;                                                        //bit0:0,RGB565模式;1,JPEG模式
  27. u16 curline=0;                                                        //攝像頭輸出數(shù)據(jù),當(dāng)前行編號(hào)
  28. u16 yoffset=0;                                                        //y方向的偏移量

  29. #define jpeg_buf_size   4*1024*1024                //定義JPEG數(shù)據(jù)緩存jpeg_buf的大小(4M字節(jié))
  30. #define jpeg_line_size        2*1024                        //定義DMA接收數(shù)據(jù)時(shí),一行數(shù)據(jù)的最大值

  31. u32 *dcmi_line_buf[2];                                        //RGB屏?xí)r,攝像頭采用一行一行讀取,定義行緩存  
  32. u32 *jpeg_data_buf;                                                //JPEG數(shù)據(jù)緩存buf

  33. volatile u32 jpeg_data_len=0;                         //buf中的JPEG有效數(shù)據(jù)長(zhǎng)度
  34. volatile u8 jpeg_data_ok=0;                                //JPEG數(shù)據(jù)采集完成標(biāo)志
  35.                                                                                 //0,數(shù)據(jù)沒(méi)有采集完;
  36.                                                                                 //1,數(shù)據(jù)采集完了,但是還沒(méi)處理;
  37.                                                                                 //2,數(shù)據(jù)已經(jīng)處理完成了,可以開(kāi)始下一幀接收
  38. //處理JPEG數(shù)據(jù)
  39. //當(dāng)采集完一幀JPEG數(shù)據(jù)后,調(diào)用此函數(shù),切換JPEG BUF.開(kāi)始下一幀采集.
  40. void jpeg_data_process(void)
  41. {
  42.         u16 i;
  43.         u16 rlen;                        //剩余數(shù)據(jù)長(zhǎng)度
  44.         u32 *pbuf;
  45.         curline=yoffset;        //行數(shù)復(fù)位
  46.         if(ovx_mode&0X01)        //只有在JPEG格式下,才需要做處理.
  47.         {
  48.                 if(jpeg_data_ok==0)        //jpeg數(shù)據(jù)還未采集完?
  49.                 {
  50.                         __HAL_DMA_DISABLE(&DMADMCI_Handler);//關(guān)閉DMA
  51.                         while(DMA2_Stream1->CR&0X01);        //等待DMA2_Stream1可配置
  52.                         rlen=jpeg_line_size-__HAL_DMA_GET_COUNTER(&DMADMCI_Handler);//得到剩余數(shù)據(jù)長(zhǎng)度       
  53.                         pbuf=jpeg_data_buf+jpeg_data_len;//偏移到有效數(shù)據(jù)末尾,繼續(xù)添加
  54.                         if(DMADMCI_Handler.Instance->CR&(1<<19))for(i=0;i<rlen;i++)pbuf[i]=dcmi_line_buf[1][i];//讀取buf1里面的剩余數(shù)據(jù)
  55.                         else for(i=0;i<rlen;i++)pbuf[i]=dcmi_line_buf[0][i];//讀取buf0里面的剩余數(shù)據(jù)
  56.                         jpeg_data_len+=rlen;                        //加上剩余長(zhǎng)度
  57.                         jpeg_data_ok=1;                                 //標(biāo)記JPEG數(shù)據(jù)采集完按成,等待其他函數(shù)處理
  58.                 }
  59.                 if(jpeg_data_ok==2)        //上一次的jpeg數(shù)據(jù)已經(jīng)被處理了
  60.                 {
  61.             __HAL_DMA_SET_COUNTER(&DMADMCI_Handler,jpeg_line_size);        //傳輸長(zhǎng)度為jpeg_buf_size*4字節(jié)
  62.                         __HAL_DMA_ENABLE(&DMADMCI_Handler); //打開(kāi)DMA
  63.                         jpeg_data_ok=0;                                        //標(biāo)記數(shù)據(jù)未采集
  64.                         jpeg_data_len=0;                                //數(shù)據(jù)重新開(kāi)始
  65.                 }
  66.         }else
  67.         {  
  68.                 if(bmp_request==1)        //有bmp拍照請(qǐng)求,關(guān)閉DCMI
  69.                 {
  70.                         DCMI_Stop();        //停止DCMI
  71.                         bmp_request=0;        //標(biāo)記請(qǐng)求處理完成.
  72.                 }
  73.                 LCD_SetCursor(0,0);  
  74.                 LCD_WriteRAM_Prepare();                                //開(kāi)始寫入GRAM  
  75.         }  
  76. }

  77. //jpeg數(shù)據(jù)接收回調(diào)函數(shù)
  78. void jpeg_dcmi_rx_callback(void)
  79. {  
  80.         u16 i;
  81.         u32 *pbuf;
  82.         pbuf=jpeg_data_buf+jpeg_data_len;//偏移到有效數(shù)據(jù)末尾
  83.         if(DMADMCI_Handler.Instance->CR&(1<<19))//buf0已滿,正常處理buf1
  84.         {
  85.                 for(i=0;i<jpeg_line_size;i++)pbuf[i]=dcmi_line_buf[0][i];//讀取buf0里面的數(shù)據(jù)
  86.                 jpeg_data_len+=jpeg_line_size;//偏移
  87.         }else //buf1已滿,正常處理buf0
  88.         {
  89.                 for(i=0;i<jpeg_line_size;i++)pbuf[i]=dcmi_line_buf[1][i];//讀取buf1里面的數(shù)據(jù)
  90.                 jpeg_data_len+=jpeg_line_size;//偏移
  91.         }
  92. }

  93. //RGB屏數(shù)據(jù)接收回調(diào)函數(shù)
  94. void rgblcd_dcmi_rx_callback(void)
  95. {  
  96.         u16 *pbuf;
  97.         if(DMADMCI_Handler.Instance->CR&(1<<19))//DMA使用buf1,讀取buf0
  98.         {
  99.                 pbuf=(u16*)dcmi_line_buf[0];
  100.         }else                                                 //DMA使用buf0,讀取buf1
  101.         {
  102.                 pbuf=(u16*)dcmi_line_buf[1];
  103.         }        
  104.         LTDC_Color_Fill(0,curline,lcddev.width-1,curline,pbuf);//DM2D填充
  105.         if(curline<lcddev.height)curline++;
  106.         if(bmp_request==1&&curline==(lcddev.height-1))//有bmp拍照請(qǐng)求,關(guān)閉DCMI
  107.         {
  108.                 DCMI_Stop();        //停止DCMI
  109.                 bmp_request=0;        //標(biāo)記請(qǐng)求處理完成.
  110.         }
  111. }

  112. //切換為OV2640模式
  113. void sw_ov2640_mode(void)
  114. {
  115.     GPIO_InitTypeDef GPIO_Initure;
  116.    
  117.     OV2640_PWDN_Set(0); //OV2640 Power Up
  118.         //GPIOC8/9/11切換為 DCMI接口
  119.     GPIO_Initure.Pin=GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_11;  
  120.     GPIO_Initure.Mode=GPIO_MODE_AF_PP;          //推挽復(fù)用
  121.     GPIO_Initure.Pull=GPIO_PULLUP;              //上拉
  122.     GPIO_Initure.Speed=GPIO_SPEED_HIGH;         //高速
  123.     GPIO_Initure.Alternate=GPIO_AF13_DCMI;      //復(fù)用為DCMI   
  124.     HAL_GPIO_Init(GPIOC,&GPIO_Initure);         //初始化
  125. }
  126. //切換為SD卡模式
  127. void sw_sdcard_mode(void)
  128. {
  129.     GPIO_InitTypeDef GPIO_Initure;
  130.       
  131.     OV2640_PWDN_Set(1); //OV2640 Power Down  
  132.         //GPIOC8/9/11切換為 SDIO接口
  133.     GPIO_Initure.Pin=GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_11;  
  134.     GPIO_Initure.Mode=GPIO_MODE_AF_PP;          //推挽復(fù)用
  135.     GPIO_Initure.Pull=GPIO_PULLUP;              //上拉
  136.     GPIO_Initure.Speed=GPIO_SPEED_HIGH;         //高速
  137.     GPIO_Initure.Alternate=GPIO_AF12_SDMMC1;    //復(fù)用為SDIO  
  138.     HAL_GPIO_Init(GPIOC,&GPIO_Initure);
  139. }

  140. //文件名自增(避免覆蓋)
  141. //mode:0,創(chuàng)建.bmp文件;1,創(chuàng)建.jpg文件.
  142. //bmp組合成:形如"0:PHOTO/PIC13141.bmp"的文件名
  143. //jpg組合成:形如"0:PHOTO/PIC13141.jpg"的文件名
  144. void camera_new_pathname(u8 *pname,u8 mode)
  145. {         
  146.         u8 res;                                         
  147.         u16 index=0;
  148.         while(index<0XFFFF)
  149.         {
  150.                 if(mode==0)sprintf((char*)pname,"0:PHOTO/PIC%05d.bmp",index);
  151.                 else sprintf((char*)pname,"0:PHOTO/PIC%05d.jpg",index);
  152.                 res=f_open(ftemp,(const TCHAR*)pname,FA_READ);//嘗試打開(kāi)這個(gè)文件
  153.                 if(res==FR_NO_FILE)break;                //該文件名不存在=正是我們需要的.
  154.                 index++;
  155.         }
  156. }  

  157. //OV2640拍照jpg圖片
  158. //返回值:0,成功
  159. //    其他,錯(cuò)誤代碼
  160. u8 ov2640_jpg_photo(u8 *pname)
  161. {
  162.         FIL* f_jpg;
  163.         u8 res=0,headok=0;
  164.         u32 bwr;
  165.         u32 i,jpgstart,jpglen;
  166.         u8* pbuf;
  167.         f_jpg=(FIL *)mymalloc(SRAMIN,sizeof(FIL));        //開(kāi)辟FIL字節(jié)的內(nèi)存區(qū)域
  168.         if(f_jpg==NULL)return 0XFF;                                //內(nèi)存申請(qǐng)失敗.
  169.         ovx_mode=1;
  170.         jpeg_data_ok=0;
  171.         sw_ov2640_mode();                                                //切換為OV2640模式
  172.         OV2640_JPEG_Mode();                                                //JPEG模式  
  173.         OV2640_ImageWin_Set(0,0,1600,1200);                         
  174.         OV2640_OutSize_Set(1600,1200);          //拍照尺寸為1600*120
  175.         dcmi_rx_callback=jpeg_dcmi_rx_callback;        //JPEG接收數(shù)據(jù)回調(diào)函數(shù)
  176.         DCMI_DMA_Init((u32)dcmi_line_buf[0],(u32)dcmi_line_buf[1],jpeg_line_size,DMA_MDATAALIGN_WORD,DMA_MINC_ENABLE);//DCMI DMA配置        
  177.         DCMI_Start();                         //啟動(dòng)傳輸
  178.         while(jpeg_data_ok!=1);        //等待第一幀圖片采集完
  179.         jpeg_data_ok=2;                        //忽略本幀圖片,啟動(dòng)下一幀采集
  180.         while(jpeg_data_ok!=1);        //等待第二幀圖片采集完,第二幀,才保存到SD卡去.
  181.         DCMI_Stop();                         //停止DMA搬運(yùn)
  182.         ovx_mode=0;
  183.         sw_sdcard_mode();                //切換為SD卡模式
  184.         res=f_open(f_jpg,(const TCHAR*)pname,FA_WRITE|FA_CREATE_NEW);//模式0,或者嘗試打開(kāi)失敗,則創(chuàng)建新文件         
  185.         if(res==0)
  186.         {
  187.                 printf("jpeg data size:%d\r\n",jpeg_data_len*4);//串口打印JPEG文件大小
  188.                 pbuf=(u8*)jpeg_data_buf;
  189.                 jpglen=0;        //設(shè)置jpg文件大小為0
  190.                 headok=0;        //清除jpg頭標(biāo)記
  191.                 for(i=0;i<jpeg_data_len*4;i++)//查找0XFF,0XD8和0XFF,0XD9,獲取jpg文件大小
  192.                 {
  193.                         if((pbuf[i]==0XFF)&&(pbuf[i+1]==0XD8))//找到FF D8
  194.                         {
  195.                                 jpgstart=i;
  196.                                 headok=1;        //標(biāo)記找到j(luò)pg頭(FF D8)
  197.                         }
  198.                         if((pbuf[i]==0XFF)&&(pbuf[i+1]==0XD9)&&headok)//找到頭以后,再找FF D9
  199.                         {
  200.                                 jpglen=i-jpgstart+2;
  201.                                 break;
  202.                         }
  203.                 }
  204.                 if(jpglen)                        //正常的jpeg數(shù)據(jù)
  205.                 {
  206.                         pbuf+=jpgstart;        //偏移到0XFF,0XD8處
  207.                         res=f_write(f_jpg,pbuf,jpglen,&bwr);
  208.                         if(bwr!=jpglen)res=0XFE;
  209.                        
  210.                 }else res=0XFD;
  211.         }
  212.         jpeg_data_len=0;
  213.         f_close(f_jpg);
  214.         sw_ov2640_mode();                //切換為OV2640模式
  215.         OV2640_RGB565_Mode();        //RGB565模式  
  216.         if(lcdltdc.pwidth!=0)        //RGB屏
  217.         {
  218.                 dcmi_rx_callback=rgblcd_dcmi_rx_callback;//RGB屏接收數(shù)據(jù)回調(diào)函數(shù)
  219.                 DCMI_DMA_Init((u32)dcmi_line_buf[0],(u32)dcmi_line_buf[1],lcddev.width/2,DMA_MDATAALIGN_HALFWORD,DMA_MINC_ENABLE);//DCMI DMA配置
  220.         }else                                        //MCU 屏
  221.         {
  222.                 DCMI_DMA_Init((u32)&LCD->LCD_RAM,0,1,DMA_MDATAALIGN_HALFWORD,DMA_MINC_DISABLE);                        //DCMI DMA配置,MCU屏,豎屏
  223.         }
  224.         myfree(SRAMIN,f_jpg);
  225.         return res;
  226. }  

  227. int main(void)
  228. {       
  229.         u8 res;                                                         
  230.         u8 *pname;                                        //帶路徑的文件名
  231.         u8 key;                                                //鍵值                  
  232.         u8 i;                                                 
  233.         u8 sd_ok=1;                                        //0,sd卡不正常;1,SD卡正常.
  234.         u8 scale=1;                                        //默認(rèn)是全尺寸縮放
  235.         u8 msgbuf[15];                                //消息緩存區(qū)
  236.     u16 outputheight=0;
  237.    
  238.     Stm32_Clock_Init(360,25,2,8);   //設(shè)置時(shí)鐘,180Mhz   
  239.     HAL_Init();                     //初始化HAL庫(kù)
  240.     delay_init(180);                //初始化延時(shí)函數(shù)
  241.     uart_init(115200);              //初始化USART
  242.     usmart_dev.init(90);            //初始化USMART
  243.     LED_Init();                     //初始化LED
  244.     KEY_Init();                     //初始化按鍵
  245.     SDRAM_Init();                   //SDRAM初始化
  246.     LCD_Init();                     //LCD初始化
  247.     OV2640_Init();                                    //初始化OV2640
  248.         sw_sdcard_mode();                            //首先切換為SD卡模式
  249.     PCF8574_Init();                 //初始化PCF8574
  250.     W25QXX_Init();                  //初始化W25Q256
  251.     my_mem_init(SRAMIN);            //初始化內(nèi)部?jī)?nèi)存池
  252.     my_mem_init(SRAMEX);            //初始化外部SDRAM內(nèi)存池
  253.     my_mem_init(SRAMCCM);           //初始化內(nèi)部CCM內(nèi)存池
  254.     POINT_COLOR=RED;  
  255.     exfuns_init();                            //為fatfs相關(guān)變量申請(qǐng)內(nèi)存  
  256.     f_mount(fs[0],"0:",1);          //掛載SD卡
  257.         f_mount(fs[1],"1:",1);          //掛載SPI FLASH.
  258.         while(font_init())                         //檢查字庫(kù)
  259.         {            
  260.                 LCD_ShowString(30,50,200,16,16,"Font Error!");
  261.                 delay_ms(200);                                  
  262.                 LCD_Fill(30,50,240,66,WHITE);//清除顯示             
  263.                 delay_ms(200);                                  
  264.         }           
  265.         Show_Str(30,50,200,16,"阿波羅STM32F4/F7開(kāi)發(fā)板",16,0);                                              
  266.         Show_Str(30,70,200,16,"OV2640照相機(jī)實(shí)驗(yàn)",16,0);                                             
  267.         Show_Str(30,90,200,16,"KEY0:拍照(bmp格式)",16,0);                                     
  268.         Show_Str(30,110,200,16,"KEY1:拍照(jpg格式)",16,0);                                     
  269.         Show_Str(30,130,200,16,"KEY2:自動(dòng)對(duì)焦",16,0);                                                     
  270.         Show_Str(30,150,200,16,"WK_UP:FullSize/Scale",16,0);                                             
  271.         Show_Str(30,170,200,16,"2016年1月15日",16,0);
  272.     res=f_mkdir("0:/PHOTO");                //創(chuàng)建PHOTO文件夾
  273.         if(res!=FR_EXIST&&res!=FR_OK)         //發(fā)生了錯(cuò)誤
  274.         {               
  275.                 res=f_mkdir("0:/PHOTO");                //創(chuàng)建PHOTO文件夾               
  276.                 Show_Str(30,190,240,16,"SD卡錯(cuò)誤!",16,0);
  277.                 delay_ms(200);                                  
  278.                 Show_Str(30,190,240,16,"拍照功能將不可用!",16,0);
  279.                 delay_ms(200);                                  
  280.                 sd_ok=0;         
  281.         }
  282.     dcmi_line_buf[0]=mymalloc(SRAMIN,jpeg_line_size*4);        //為jpeg dma接收申請(qǐng)內(nèi)存       
  283.         dcmi_line_buf[1]=mymalloc(SRAMIN,jpeg_line_size*4);        //為jpeg dma接收申請(qǐng)內(nèi)存       
  284.         jpeg_data_buf=mymalloc(SRAMEX,jpeg_buf_size);                //為jpeg文件申請(qǐng)內(nèi)存(最大4MB)
  285.         pname=mymalloc(SRAMIN,30);//為帶路徑的文件名分配30個(gè)字節(jié)的內(nèi)存         
  286.         while(pname==NULL||!dcmi_line_buf[0]||!dcmi_line_buf[1]||!jpeg_data_buf)        //內(nèi)存分配出錯(cuò)
  287.         {            
  288.                 Show_Str(30,190,240,16,"內(nèi)存分配失敗!",16,0);
  289.                 delay_ms(200);                                  
  290.                 LCD_Fill(30,190,240,146,WHITE);//清除顯示             
  291.                 delay_ms(200);                                  
  292.         }   
  293.         while(OV2640_Init())//初始化OV2640
  294.         {
  295.                 Show_Str(30,190,240,16,"OV2640 錯(cuò)誤!",16,0);
  296.                 delay_ms(200);
  297.             LCD_Fill(30,190,239,206,WHITE);
  298.                 delay_ms(200);
  299.         }
  300.     Show_Str(30,210,230,16,"OV2640 正常",16,0);
  301.         //自動(dòng)對(duì)焦初始化
  302.         OV2640_RGB565_Mode();        //RGB565模式
  303.         OV2640_Light_Mode(0);        //自動(dòng)模式
  304.         OV2640_Color_Saturation(3);//色彩飽和度0
  305.         OV2640_Brightness(4);        //亮度0
  306.         OV2640_Contrast(3);                //對(duì)比度0
  307.         DCMI_Init();                        //DCMI配置
  308.         if(lcdltdc.pwidth!=0)        //RGB屏
  309.         {
  310.                 dcmi_rx_callback=rgblcd_dcmi_rx_callback;//RGB屏接收數(shù)據(jù)回調(diào)函數(shù)
  311.                 DCMI_DMA_Init((u32)dcmi_line_buf[0],(u32)dcmi_line_buf[1],lcddev.width/2,DMA_MDATAALIGN_HALFWORD,DMA_MINC_ENABLE);//DCMI DMA配置  
  312.         }else                                        //MCU 屏
  313.         {
  314.                 DCMI_DMA_Init((u32)&LCD->LCD_RAM,0,1,DMA_MDATAALIGN_HALFWORD,DMA_MINC_DISABLE);                        //DCMI DMA配置,MCU屏,豎屏
  315.         }
  316.     if(lcddev.height>800)
  317.         {
  318.                 yoffset=(lcddev.height-800)/2;
  319.                 outputheight=800;
  320.                 SCCB_WR_Reg(0xff,0x01);
  321.                 SCCB_WR_Reg(0x11,0x01);        //需要降低幀率
  322.         }else
  323.         {
  324.                 yoffset=0;
  325.                 outputheight=lcddev.height;
  326.         }
  327.         curline=yoffset;                //行數(shù)復(fù)位
  328.         OV2640_OutSize_Set(lcddev.width,outputheight);        //滿屏縮放顯示
  329.         LCD_Clear(BLACK);
  330.         DCMI_Start();                         //啟動(dòng)傳輸
  331.     while(1)
  332.         {       
  333.                 key=KEY_Scan(0);//不支持連按
  334.                 if((key)&&(key!=KEY2_PRES))
  335.                 {
  336.             if(key==KEY0_PRES)//如果是BMP拍照,則等待1秒鐘,去抖動(dòng),以獲得穩(wěn)定的bmp照片       
  337.             {
  338.                 delay_ms(300);
  339.                 bmp_request=1;                //請(qǐng)求關(guān)閉DCMI
  340.                 while(bmp_request);        //等待請(qǐng)求處理完成
  341.             }else DCMI_Stop();
  342.                         if(key==WKUP_PRES)                //縮放處理
  343.                         {
  344.                                 scale=!scale;  
  345.                                 if(scale==0)
  346.                                 {
  347.                                         OV2640_ImageWin_Set((1600-lcddev.width)/2,(1200-outputheight)/2,lcddev.width,outputheight);//1:1真實(shí)尺寸
  348.                                         sprintf((char*)msgbuf,"Full Size 1:1");
  349.                                 }else
  350.                                 {
  351.                     OV2640_ImageWin_Set(0,0,1600,1200);                                //全尺寸縮放
  352.                                         sprintf((char*)msgbuf,"Scale");
  353.                                 }
  354.                                 OV2640_OutSize_Set(lcddev.width,outputheight);
  355.                                 delay_ms(800);        
  356.                         }else if(sd_ok)//SD卡正常才可以拍照
  357.                         {   
  358.                                 sw_sdcard_mode();        //切換為SD卡模式
  359.                                 if(key==KEY0_PRES)        //BMP拍照
  360.                                 {
  361.                                         camera_new_pathname(pname,0);        //得到文件名       
  362.                                         res=bmp_encode(pname,0,yoffset,lcddev.width,outputheight,0);
  363.                                         sw_ov2640_mode();                                //切換為OV2640模式
  364. ……………………

  365. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼



所有資料51hei提供下載:
ATK-OV2640攝像1頭模塊.rar (19.37 MB, 下載次數(shù): 118)



評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

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

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产在线视频一区二区 | 色婷婷av99xx| 永久看片 | 日日夜夜精品免费视频 | 国产九九精品 | 国产在线1区 | 在线国产一区二区 | 色爱av| 操操日| 国精品一区 | 久久免费福利 | 全免费a级毛片免费看视频免费下 | 91视频在线观看 | 国产99视频精品免视看9 | 国产成人精品午夜 | www一级片| 免费黄网站在线观看 | 亚洲精品国产第一综合99久久 | 久久久久久久久久久久久91 | 精品在线99 | 91免费观看视频 | 婷婷久久综合 | 欧美一级欧美三级在线观看 | 久久久久久精 | 国产精品av久久久久久久久久 | 69视频在线播放 | 国产视频1区2区 | 蜜桃在线播放 | 欧美精品一区二区三区在线播放 | 色综合天天天天做夜夜夜夜做 | 久久里面有精品 | www.黄网 | 国产精品美女久久久久aⅴ国产馆 | 日韩看片| 一级片网站视频 | 欧美精品成人一区二区三区四区 | 三级在线免费 | 亚洲国产日韩欧美 | 午夜影院视频在线观看 | 在线免费观看黄色网址 | 在线视频91|