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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

攝像頭識別智能尋找中心按鍵觸發stm32源程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:246155 發表于 2017-11-5 08:47 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
最近使用OV7670做了一個關于激光自動打靶報靶系統,不過只做了用攝像頭對靶心的識別。

取樣點過多

stm32單片機源程序如下:
  1. #include <stm32f10x_lib.h>
  2. #include "sys.h"
  3. #include "usart.h"               
  4. #include "delay.h"       
  5. #include "led.h"
  6. #include "key.h"
  7. #include "exti.h"
  8. #include "wdg.h"
  9. #include "timer.h"
  10. #include "lcd.h"          
  11. #include "ov7670.h"
  12. #include "usmart.h"  

  13. u16 i,shua1=0,shua2=0;          
  14. u16 aa=0,bb=0,lie=0,y=0,hang=0,x=0 ,a=0,b=0;
  15. u16 zhongxin1=0,zhongxin2=0,zhongxin3=0,zhongxin4=0;
  16. u32 u=0;
  17. extern u8 ov_sta;        //在exit.c里面定義
  18. extern u8 ov_frame;        //在timer.c里面定義       



  19. void swap (u16 *p1,u16 *p2)
  20. {
  21.    u16 temp;
  22.    temp=*p1;
  23.    *p1=*p2;
  24.    *p2=temp        ;


  25.             }
  26.          

  27. void camera_refresh(void)
  28. {
  29.         u32 j;
  30.         u16 color;         
  31.         if(ov_sta==2)
  32.         {
  33.                 LCD_Scan_Dir(U2D_L2R);                //從上到下,從左到右
  34.                 LCD_SetCursor(0x00,0x0000);        //設置光標位置
  35.                 LCD_WriteRAM_Prepare();     //開始寫入GRAM       
  36.                 OV7670_CS=0;         
  37.                 OV7670_RRST=0;                                //開始復位讀指針
  38.                 OV7670_RCK=0;
  39.                 OV7670_RCK=1;
  40.                 OV7670_RCK=0;
  41.                 OV7670_RRST=1;                                //復位讀指針結束
  42.                 OV7670_RCK=1;  
  43.                 for(j=0;j<76800;j++)
  44.                 {
  45.                         GPIOB->CRL=0X88888888;                  
  46.                         OV7670_RCK=0;
  47.                         color=OV7670_DATA;                //讀數據
  48.                         OV7670_RCK=1;        
  49.                         color<<=8;                                          
  50.                         OV7670_RCK=0;
  51.                         color|=OV7670_DATA;                //讀數據                  
  52.                         OV7670_RCK=1;
  53.                         GPIOB->CRL=0X33333333;                                                          
  54.                         LCD_WR_DATA(color);         
  55.                 }  
  56.                 OV7670_CS=1;                                                          
  57.                 OV7670_RCK=0;
  58.                 OV7670_RCK=1;
  59.                 EXTI->PR=1<<15;                     //清除LINE8上的中斷標志位
  60.                 ov_sta=0;                                        //開始下一次采集
  61.                 ov_frame++;
  62.                 LCD_Scan_Dir(DFT_SCAN_DIR);        //恢復默認掃描方向                                                     
  63.         }
  64. }       
  65. void  fengge (void)
  66. {
  67.        
  68.             for(bb=2;bb<230;bb++)               
  69.                        
  70.         {       
  71.        
  72.                 for(aa=0;aa<239;aa++)       
  73.                        
  74.           {       
  75.                  

  76.                   
  77.   u= (LCD_ReadPoint(20,20)+LCD_ReadPoint(21,21)+LCD_ReadPoint(22,22)+LCD_ReadPoint(23,23)+LCD_ReadPoint(220,20)+LCD_ReadPoint(221,21)+LCD_ReadPoint(222,22)+LCD_ReadPoint(223,23)+LCD_ReadPoint(20,319)+LCD_ReadPoint(21,318)+LCD_ReadPoint(22,317)+LCD_ReadPoint(23,316)+LCD_ReadPoint(220,319)+LCD_ReadPoint(221,318)+LCD_ReadPoint(222,317)+LCD_ReadPoint(223,317)  )/16;
  78.        
  79.                   
  80.                                  if((LCD_ReadPoint(aa-2,bb)<(u-10000)))
  81.                                 {
  82.                                 if((LCD_ReadPoint(aa,bb)<(u-10000)))   //白天45000
  83.                                {
  84.                                        if((LCD_ReadPoint(aa+1,bb)<(u-10000))&&(LCD_ReadPoint(aa+2,bb)<(u-10000)))
  85.                                             {
  86.                                                         POINT_COLOR=BLACK;
  87.                                                          LCD_DrawPoint(aa,bb);       
  88.                                                                          }                                                    
  89.                                                  }
  90.                                                                                                    }
  91.                                                                                                       }                                                                                                                                                                                                                                         
  92.                                                                                                              }
  93.                                                                                                                }                                 
  94.                                                               

  95. void  fanfenge(void)
  96. {
  97.           for(bb=0;bb<320;bb++)        //210                               
  98.             {               
  99.                     for(aa=0;aa<239;aa++)                               
  100.                 {                                       
  101.                                if(LCD_ReadPoint(aa,bb)>1000 )
  102.                                     {
  103.                                                 POINT_COLOR=WHITE ;
  104.                                             LCD_DrawPoint(aa,bb);       
  105.                                                                       }                                                    
  106.                                                  }                                                                                                  
  107.                                                                                                     }

  108.                 if(LCD_ReadPoint(aa-1,bb)<1000 )
  109.                 {
  110.                            if(LCD_ReadPoint(aa+1,bb)<1000 )
  111.                         {
  112.                                    POINT_COLOR=BLACK;
  113.                                 LCD_DrawPoint(aa,bb);               
  114.                                                              }
  115.                                                          }
  116.                                                                                                           
  117.                                                                                                           
  118.                                                                                                           
  119.                                                                                                            }                                                                                         
  120.                                                                                                           


  121.             

  122. void huaxin(void)
  123. {
  124.                
  125.             for(bb=80;bb<160;bb=bb+15)               
  126.                        
  127.         {       
  128.        
  129.                    lie=0;
  130.                 for(aa=0;aa<235;aa++)       
  131.                        
  132.           {       
  133.                
  134.                 /*         POINT_COLOR=RED ;
  135.                           LCD_ShowxNum(170,260,aa,8,16,0);//顯示2個數字
  136.                         LCD_ShowxNum(170,280,bb,8,16,0);//顯示2個數字
  137.                         LCD_ShowxNum(170,300,LCD_ReadPoint(aa,bb),8,16,0);//顯示2個數字
  138.                         LCD_ShowxNum(10,300,y,8,16,0);//顯示2個數字
  139.                         LCD_ShowxNum(10,260,lie,8,16,0);//顯示2個數字
  140.                         LCD_ShowxNum(90,300,LCD_ReadPoint(20,20),8,16,0);//顯示2個數字
  141.                         LCD_ShowxNum(90,280,LCD_ReadPoint(77,77),8,16,0);//顯示2個數字
  142.                         LCD_ShowxNum(90,260,u,8,16,0);//顯示2個數字                  */
  143.                                           //LCD_DrawLine(20, 20, 25, 25);          //畫線

  144.                   //        if(LCD_ReadPoint(aa-3,bb)>20000)
  145.                         //    {
  146.                          //        if(LCD_ReadPoint(aa-2,bb)>20000)
  147.                         //        {
  148.                                 if((LCD_ReadPoint(aa,bb)>20000))   //白天45000
  149.                                {
  150.                                        if(LCD_ReadPoint(aa+1,bb)<(20000)&&(LCD_ReadPoint(aa+2,bb)<20000))
  151.                                             { lie++; }                                                    
  152.                                                  }
  153.                                                                                                    //}
  154.                                                                                                     //  }   
  155.                                                                                                                      
  156.                 //        if(lie>9)                                                                                                 
  157.                 //        {   y=bb; }

  158.                                 zhongxin3=lie;
  159.                                         if(zhongxin3>zhongxin4        )
  160.                                          {
  161.                                            swap(&zhongxin3,&zhongxin4);
  162.                                            y=bb;
  163.                                          
  164.                                                              }                                                                                                                                                                                                                                                                                                
  165.                                                                                         }                 
  166.                                                                                                                              }         
  167.                
  168.                                                                                                
  169.                                                                                                                        
  170.                                                                                                                        
  171.                                                                                                                        
  172.                         for(a=80;a<200;a=a+20)                                                                                                       
  173.                         {
  174.                             hang=0;
  175.                                 LED0=0;
  176.                                   for(b=0;b<230;b++)
  177.                                 {       
  178.                                 /*        POINT_COLOR=RED ;       
  179.                                          LCD_ShowxNum(170,260,a,8,16,0);//顯示2個數字
  180.                              LCD_ShowxNum(170,280,b,8,16,0);//顯示2個數字
  181.                             LCD_ShowxNum(170,300,LCD_ReadPoint(a,b),8,16,0);//顯示2個數字
  182.                             LCD_ShowxNum(10,280,x,8,16,0);//顯示2個數字
  183.                             LCD_ShowxNum(10,260,hang,8,16,0);//顯示2個數字
  184.                                         LCD_ShowxNum(10,300,y,8,16,0);//顯示2個數?
  185.                                         LCD_ShowxNum(90,260,u,8,16,0);//顯示2個數字
  186.                                                                                                                                   */
  187.                                    if((LCD_ReadPoint(a,b-3)<(u-3000)))
  188.                                    {
  189.                                              if((LCD_ReadPoint(a,b-2)<(u-3000)))
  190.                                           {
  191.                                          if((LCD_ReadPoint(a,b)<(u-3000)))          //50000
  192.                                        {
  193.                                              if((LCD_ReadPoint(a,b+1)>(u-3000))&&(LCD_ReadPoint(a,b+2)>(u-3000)))
  194.                                                      { hang++; }       
  195.                                                                                       }
  196.                                                                                              }
  197.                                                                                                 }

  198.                                 //        if(hang>9)                                                                                                 
  199.                                  //     { x=a; }                                                                                                                                                         
  200.                                                            
  201.                                         zhongxin1=hang;
  202.                                         if(zhongxin1>zhongxin2        )
  203.                                          {
  204.                                            swap(&zhongxin1,&zhongxin2);
  205.                                            x=a;
  206.                                          
  207.                                                              }
  208.                                        
  209.                                                                   
  210.                                                                                               }                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
  211.                                                                                                                        
  212.                                                                                                                }
  213.                                                               }  


  214. int main(void)
  215. {       
  216.                
  217.            Stm32_Clock_Init(9);        //系統時鐘設置
  218.         uart_init(72,9600);                 //串口初始化為9600
  219.         delay_init(72);                            //延時初始化
  220.           OV7670_Init();                                  

  221.         LED_Init();                                  //初始化與LED連接的硬件接口
  222.         LCD_Init();                                   //初始化LCD
  223.         if(lcddev.id==0X6804)         //強制設置屏幕分辨率為320*240.以支持3.5寸大屏
  224.         {
  225.                 lcddev.width=240;
  226.                 lcddev.height=320;
  227.                                     }
  228.         usmart_dev.init(72);        //初始化USMART               
  229.                             
  230.         POINT_COLOR=RED;//設置字體為紅色
  231.         LCD_ShowString(60,50,200,200,16,"Mini STM32");       
  232.         LCD_ShowString(60,70,200,200,16,"OV7670 TEST");       
  233.         LCD_ShowString(60,90,200,200,16,"ATOM@ALIENTEK");
  234.         LCD_ShowString(60,110,200,200,16,"2012/10/31");           
  235.         LCD_ShowString(60,130,200,200,16,"Use USMART To Set!");         
  236.           LCD_ShowString(60,150,200,200,16,"OV7670 Init...");          
  237.         while(OV7670_Init())//初始化OV7670
  238.         {
  239.                 LCD_ShowString(60,150,200,200,16,"OV7670 Error!!");
  240.                 delay_ms(200);
  241.             LCD_Fill(60,230,239,246,WHITE);
  242.                 delay_ms(200);
  243.                                                      }
  244.         LCD_ShowString(60,150,200,200,16,"OV7670 Init OK");
  245.         delay_ms(1500);                              
  246.         Timerx_Init(10000,7199);                        //TIM3,10Khz計數頻率,1秒鐘中斷                                                                          
  247.         EXTI15_Init();                                                //使能定時器捕獲
  248.         OV7670_Window_Set(10,174,240,320);        //設置窗口          
  249.           OV7670_CS=0;                                                          
  250.         while(1)
  251.         {       
  252.                         camera_refresh();        //更新顯示         
  253.                 if(i!=ov_frame)                //DS0閃爍.
  254.                 {
  255.                         i=ov_frame;
  256.                         LED0=!LED0;
  257.                 }
  258.                   if(KEY0==0)
  259.                 {
  260.             for(shua1=0;shua1<30000;shua1++)
  261.                 {       
  262.                           for(shua2=0;shua2<10;shua2++)         
  263.                         {
  264.                                  camera_refresh();         
  265.                                  if(i!=ov_frame)               
  266.                                 {i=ov_frame;}
  267.                                       }         
  268.                                                                 }
  269.          
  270.       fengge();
  271.           fanfenge();
  272.           aa=0;
  273.           bb=0;         
  274.           huaxin();                                                                                                                                        
  275.       LCD_Fill(x,y,x+5,y+5,RED);       
  276.          delay_ms(3000);
  277.      // while(1);
  278.                                                           }
  279.                                                    }   
  280.                                              
  281.                                                                                          
  282.                                                                                          
  283.                                                                                               }
復制代碼

所有資料51hei提供下載:
智能尋找中心按鍵觸發.zip (131.96 KB, 下載次數: 17)


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

使用道具 舉報

沙發
ID:456780 發表于 2019-8-6 15:31 | 只看該作者
感謝樓主分享
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产成人精品一区二区三区四区 | 99成人| 一区免费 | 久草免费在线视频 | 国产精品一区二区三区在线播放 | 日日夜夜精品视频 | 在线观看亚洲 | 国产精品成人69xxx免费视频 | 日本久久福利 | 91精品国产91久久久久久吃药 | 国产成人99久久亚洲综合精品 | 久久久久久高潮国产精品视 | 久色视频在线 | 99热国产精品 | 日本小电影在线 | 成在线人视频免费视频 | 亚洲成人精品 | 一级黄色播放 | 天天噜天天干 | 精品久久久精品 | 在线观看中文字幕 | 亚洲精品久久久一区二区三区 | 91av在线视频观看 | 国产精品日日夜夜 | 午夜国产一级 | 久久久女女女女999久久 | 中文字幕久久精品 | 91久久国产综合久久 | 欧美日韩中文字幕在线播放 | 日韩欧美在线一区二区 | 亚洲精品一区二区在线观看 | 久久久久国产精品 | 最近中文字幕在线视频1 | 国产免费色 | 色综合天天天天做夜夜夜夜做 | 亚洲小视频在线播放 | 亚洲免费网址 | 一区视频在线免费观看 | 中文字幕免费在线 | 91精产国品一二三区 | 韩日精品一区 |