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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5546|回復: 2
打印 上一主題 下一主題
收起左側

STM32+ov7725照相機源碼

[復制鏈接]
跳轉到指定樓層
樓主
ID:251714 發表于 2018-4-10 21:58 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
STM32單片機照相機源程序如下:
  1. #include "sys.h"
  2. #include "delay.h"
  3. #include "usart.h"
  4. #include "led.h"                           
  5. #include "lcd.h"  
  6. #include "key.h"     
  7. #include "usmart.h"
  8. #include "malloc.h"
  9. #include "sdio_sdcard.h"  
  10. #include "w25qxx.h"   
  11. #include "ff.h"  
  12. #include "exfuns.h"   
  13. #include "text.h"
  14. #include "piclib.h"       
  15. #include "string.h"               
  16. #include "math.h"         
  17. #include "ov7670.h"
  18. #include "beep.h"
  19. #include "timer.h"
  20. #include "exti.h"
  21. #include "ov7725.h"



  22. #define  OV7725 1
  23. #define  OV7670 2

  24. extern u8 ov_sta;        //在exit.c里面定義
  25. extern u8 ov_frame;        //在timer.c里面定義


  26. //更新LCD顯示(OV7725)
  27. void OV7725_camera_refresh(void)
  28. {
  29.         u32 i,j;
  30.         u16 color;         
  31.         if(ov_sta)//有幀中斷更新
  32.         {
  33.                 LCD_Scan_Dir(U2D_L2R);//從上到下,從左到右
  34.                 LCD_Set_Window((lcddev.width-320)/2,(lcddev.height-240)/2,320,240);//將顯示區域設置到屏幕中央
  35.                 if(lcddev.id==0X1963)
  36.                         LCD_Set_Window((lcddev.width-320)/2,(lcddev.height-240)/2,240,320);//將顯示區域設置到屏幕中央
  37.                 LCD_WriteRAM_Prepare();     //開始寫入GRAM       
  38.                 OV7725_RRST=0;                                //開始復位讀指針
  39.                 OV7725_RCK_L;
  40.                 OV7725_RCK_H;
  41.                 OV7725_RCK_L;
  42.                 OV7725_RRST=1;                                //復位讀指針結束
  43.                 OV7725_RCK_H;
  44.                 for(i=0;i<240;i++)
  45.                 {
  46.                         for(j=0;j<320;j++)
  47.                         {
  48.                                 OV7725_RCK_L;
  49.                                 color=GPIOC->IDR&0XFF;        //讀數據
  50.                                 OV7725_RCK_H;
  51.                                 color<<=8;  
  52.                                 OV7725_RCK_L;
  53.                                 color|=GPIOC->IDR&0XFF;        //讀數據
  54.                                 OV7725_RCK_H;
  55.                                 LCD->LCD_RAM=color;  
  56.                         }
  57.                 }
  58.                 ov_sta=0;                                        //清零幀中斷標記
  59.                 ov_frame++;
  60.                 LCD_Scan_Dir(DFT_SCAN_DIR);        //恢復默認掃描方向
  61.         }
  62. }

  63. //更新LCD顯示(OV7670)
  64. void OV7670_camera_refresh(void)
  65. {
  66.         u32 j;
  67.         u16 color;         
  68.         if(ov_sta)//有幀中斷更新
  69.         {
  70.                 LCD_Scan_Dir(U2D_L2R);//從上到下,從左到右  
  71.                 if(lcddev.id==0X1963)LCD_Set_Window((lcddev.width-240)/2,(lcddev.height-320)/2,240,320);//將顯示區域設置到屏幕中央
  72.                 else if(lcddev.id==0X5510||lcddev.id==0X5310)LCD_Set_Window((lcddev.width-320)/2,(lcddev.height-240)/2,320,240);//將顯示區域設置到屏幕中央
  73.                 LCD_WriteRAM_Prepare();     //開始寫入GRAM       
  74.                 OV7670_RRST=0;                                //開始復位讀指針
  75.                 OV7670_RCK_L;
  76.                 OV7670_RCK_H;
  77.                 OV7670_RCK_L;
  78.                 OV7670_RRST=1;                                //復位讀指針結束
  79.                 OV7670_RCK_H;
  80.                 for(j=0;j<76800;j++)
  81.                 {
  82.                         OV7670_RCK_L;
  83.                         color=GPIOC->IDR&0XFF;        //讀數據
  84.                         OV7670_RCK_H;
  85.                         color<<=8;  
  86.                         OV7670_RCK_L;
  87.                         color|=GPIOC->IDR&0XFF;        //讀數據
  88.                         OV7670_RCK_H;
  89.                         LCD->LCD_RAM=color;   
  90.                 }                                                             
  91.                 ov_sta=0;                                        //清零幀中斷標記
  92.                 ov_frame++;
  93.                 LCD_Scan_Dir(DFT_SCAN_DIR);        //恢復默認掃描方向
  94.         }
  95. }

  96. //文件名自增(避免覆蓋)
  97. //組合成:形如"0:PHOTO/PIC13141.bmp"的文件名
  98. void camera_new_pathname(u8 *pname)
  99. {         
  100.         u8 res;                                         
  101.         u16 index=0;
  102.         while(index<0XFFFF)
  103.         {
  104.                 sprintf((char*)pname,"0:PHOTO/PIC%05d.bmp",index);
  105.                 res=f_open(ftemp,(const TCHAR*)pname,FA_READ);//嘗試打開這個文件
  106.                 if(res==FR_NO_FILE)break;                //該文件名不存在=正是我們需要的.
  107.                 index++;
  108.         }
  109. }



  110. int main(void)
  111. {         
  112.         u8 sensor=0;
  113.         u8 res;                                                         
  114.         u8 *pname;                                //帶路徑的文件名
  115.         u8 key;                                        //鍵值                  
  116.         u8 i;                                                 
  117.         u8 sd_ok=1;                                //0,sd卡不正常;1,SD卡正常.
  118.          
  119.         delay_init();                     //延時函數初始化          
  120.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設置中斷優先級分組為組2:2位搶占優先級,2位響應優先級
  121.         uart_init(115200);                 //串口初始化為115200
  122.         usmart_dev.init(72);                //初始化USMART               
  123.         LED_Init();                                          //初始化與LED連接的硬件接口
  124.         KEY_Init();                                        //初始化按鍵
  125.         LCD_Init();                                           //初始化LCD  
  126.         BEEP_Init();                        //蜂鳴器初始化         
  127.         W25QXX_Init();                                //初始化W25Q128
  128.         my_mem_init(SRAMIN);                //初始化內部內存池
  129.         exfuns_init();                                //為fatfs相關變量申請內存  
  130.         f_mount(fs[0],"0:",1);                 //掛載SD卡
  131.         f_mount(fs[1],"1:",1);                 //掛載FLASH.
  132.         POINT_COLOR=RED;      
  133.         while(font_init())                                 //檢查字庫
  134.         {            
  135.                 LCD_ShowString(30,50,200,16,16,"Font Error!");
  136.                 delay_ms(200);                                  
  137.                 LCD_Fill(30,50,240,66,WHITE);//清除顯示             
  138.         }           
  139.         Show_Str(30,50,200,16,"戰艦STM32F1開發板",16,0);                                             
  140.         Show_Str(30,70,200,16,"照相機實驗",16,0);                                             
  141.         Show_Str(30,90,200,16,"KEY0:拍照",16,0);                                             
  142.         Show_Str(30,110,200,16,"正點原子@ALIENTEK",16,0);                                             
  143.         Show_Str(30,130,200,16,"2015年1月20日",16,0);
  144.         res=f_mkdir("0:/PHOTO");                //創建PHOTO文件夾
  145.         if(res!=FR_EXIST&&res!=FR_OK)         //發生了錯誤
  146.         {                    
  147.                 Show_Str(30,150,240,16,"SD卡錯誤!",16,0);
  148.                 delay_ms(200);                                  
  149.                 Show_Str(30,170,240,16,"拍照功能將不可用!",16,0);
  150.                 sd_ok=0;         
  151.         }else
  152.         {
  153.                 Show_Str(30,150,240,16,"SD卡正常!",16,0);
  154.                 delay_ms(200);                                  
  155.                 Show_Str(30,170,240,16,"KEY0:拍照",16,0);
  156.                 sd_ok=1;            
  157.         }                                                                                                                                       
  158.         pname=mymalloc(SRAMIN,30);        //為帶路徑的文件名分配30個字節的內存                    
  159.         while(pname==NULL)                        //內存分配出錯
  160.         {            
  161.                 Show_Str(30,190,240,16,"內存分配失敗!",16,0);
  162.                 delay_ms(200);                                  
  163.                 LCD_Fill(30,190,240,146,WHITE);//清除顯示             
  164.                 delay_ms(200);                                  
  165.         }                                                                                             
  166.         while(1)//初始化OV7725_OV7670
  167.         {
  168.                 if(OV7725_Init()==0)
  169.                 {
  170.                         sensor=OV7725;
  171.                         LCD_ShowString(30,190,200,16,16,"OV7725 Init OK       ");
  172.                         while(1)
  173.                         {
  174.                                 key=KEY_Scan(0);
  175.                                 if(key==KEY0_PRES)
  176.                                 {
  177.                                         OV7725_Window_Set(320,240,0);//QVGA模式輸出
  178.                                         break;
  179.                                 }
  180.                                 else if(key==KEY1_PRES)
  181.                                 {
  182.                                         OV7725_Window_Set(320,240,1);//VGA模式輸出
  183.                                         break;
  184.                                 }
  185.                                 i++;
  186.                                 if(i==100)LCD_ShowString(30,206,200,16,16,"KEY0:QVGA  KEY1:VGA"); //閃爍顯示提示信息
  187.                                 if(i==200)
  188.                                 {       
  189.                                         LCD_Fill(30,206,200,250+16,WHITE);
  190.                                         i=0;
  191.                                 }
  192.                                 delay_ms(5);
  193.                         }                               
  194.                         OV7725_CS=0;
  195.                         break;
  196.                 }
  197.                 else if(OV7670_Init()==0)
  198.                 {
  199.                         sensor=OV7670;
  200.                         LCD_ShowString(30,190,200,16,16,"OV7670 Init OK       ");
  201.                         delay_ms(1500);       
  202.                         OV7670_Window_Set(12,176,240,320);//設置窗口
  203.                         OV7670_CS=0;
  204.                         break;
  205.                 }
  206.                 else
  207.                 {
  208.                         LCD_ShowString(30,190,200,16,16,"OV7725_OV7670 Error!!");
  209.                         delay_ms(200);
  210.                         LCD_Fill(30,190,239,246,WHITE);
  211.                         delay_ms(200);
  212.                 }
  213.         }
  214.         TIM6_Int_Init(10000,7199);                        //10Khz計數頻率,1秒鐘中斷                                                                          
  215.         EXTI8_Init();                                                //使能外部中斷8,捕獲幀中斷                       
  216.         LCD_Clear(BLACK);
  217.         while(1)
  218.         {       
  219.                 key=KEY_Scan(0);//不支持連按
  220.                 if(key==KEY0_PRES)
  221.                 {
  222.                         if(sd_ok)
  223.                         {
  224.                                 LED1=0;        //點亮DS1,提示正在拍照
  225.                                 camera_new_pathname(pname);//得到文件名                    
  226.                                 if(bmp_encode(pname,(lcddev.width-240)/2,(lcddev.height-320)/2,240,320,0))//拍照有誤
  227.                                 {
  228.                                         Show_Str(40,130,240,12,"寫入文件錯誤!",12,0);                 
  229.                                 }else
  230.                                 {
  231.                                         Show_Str(40,130,240,12,"拍照成功!",12,0);
  232.                                         Show_Str(40,150,240,12,"保存為:",12,0);
  233.                                         Show_Str(40+42,150,240,12,pname,12,0);                    
  234.                                         BEEP=1;        //蜂鳴器短叫,提示拍照完成
  235.                                         delay_ms(100);
  236.                                  }
  237.                         }else //提示SD卡錯誤
  238.                         {                                            
  239.                                 Show_Str(40,130,240,12,"SD卡錯誤!",12,0);
  240.                                 Show_Str(40,150,240,12,"拍照功能不可用!",12,0);                            
  241.                         }
  242.                          BEEP=0;//關閉蜂鳴器
  243.                         LED1=1;//關閉DS1
  244.                         delay_ms(1800);//等待1.8秒鐘
  245.                         LCD_Clear(BLACK);
  246.                 }else delay_ms(5);
  247.                
  248.                 if(sensor==OV7725)
  249.                         OV7725_camera_refresh();//更新顯示
  250.                 else if(sensor==OV7670)
  251.                         OV7670_camera_refresh();//更新顯示
  252.                
  253.                 i++;
  254.                 if(i>=40)//DS0閃爍.
  255.                 {
  256.                         i=0;
  257.                         LED0=!LED0;
  258.                 }
  259.         }                                                                                               
  260. }
復制代碼

所有資料51hei提供下載:
照相機實驗.rar (1.66 MB, 下載次數: 102)


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:382515 發表于 2018-8-9 13:13 | 只看該作者
謝謝,不知道能不能用,但是還是要感謝你打勞動成果
回復

使用道具 舉報

板凳
ID:392335 發表于 2018-9-1 15:23 | 只看該作者
6666666666666666
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产成人久久av免费高清密臂 | 极品的亚洲| 99精品免费视频 | 日韩欧美视频免费在线观看 | 国户精品久久久久久久久久久不卡 | 欧美一级久久 | 最新中文字幕在线 | 午夜精品一区二区三区在线视频 | 精品国产乱码久久久久久丨区2区 | 中文一区二区 | 国产激情在线 | 欧洲av一区 | 欧美久久久 | 久久中文字幕电影 | h视频在线看 | 久久久精品一区 | a a毛片| 精品91久久久 | 日本三级在线视频 | 欧美高清免费 | 久久久女女女女999久久 | 天天看夜夜| 久久久日韩精品一区二区三区 | 久久综合av | 黄色成人国产 | 午夜影院在线观看免费 | 日韩字幕一区 | 香蕉国产在线视频 | 亚洲精品日日夜夜 | 日韩av一区二区在线观看 | 亚洲一区二区欧美 | 九九九视频精品 | 日韩性生活网 | a视频在线 | 国产高清视频在线 | 国产日批 | 在线观看不卡av | 亚洲免费在线 | 国产精品美女久久久av超清 | 日本免费一区二区三区四区 | 成人av免费 |