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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

stm32 操控 ov7670 圖像識別源程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:594461 發(fā)表于 2019-8-3 10:14 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
如題

  1. #include <stdio.h>
  2. #include <math.h>
  3. #include "led.h"
  4. #include "delay.h"
  5. #include "key.h"
  6. #include "sys.h"
  7. #include "lcd.h"
  8. #include "usart.h"         
  9. #include "string.h"
  10. #include "ov7725.h"
  11. #include "tpad.h"
  12. #include "timer.h"
  13. #include "exti.h"
  14. #include "usmart.h"
  15. #include "color.h"
  16. #include "xd.h"
  17. #include "ov7670.h"


  18. //傳感器名字宏定義
  19. #define  OV7725 1
  20. #define  OV7670 2

  21. #define uchar unsigned char
  22. uchar xx,yy,m2;
  23. int yc,xc,ENA,ENB;

  24. //由于OV7725傳感器安裝方式原因,OV7725_WINDOW_WIDTH相當(dāng)于LCD的高度,OV7725_WINDOW_HEIGHT相當(dāng)于LCD的寬度
  25. //注意:此宏定義只對OV7725有效
  26. #define  OV7725_WINDOW_WIDTH                320 // <=320
  27. #define  OV7725_WINDOW_HEIGHT                240 // <=240


  28. //const u8*LMODE_TBL[5]={"Auto","Sunny","Cloudy","Office","Home"};                                                        //5種光照模式            
  29. //const u8*EFFECTS_TBL[7]={"Normal","Negative","B&W","Redish","Greenish","Bluish","Antique"};        //7種特效
  30. extern u8 ov_sta;        //在exit.c里 面定義
  31. extern u8 ov_frame;        //在timer.c里面定義                 


  32. //更新LCD顯示
  33. //void camera_refresh(void)
  34. //{
  35. //        u32 j,i;
  36. //         u16 color;  
  37. //        if(ov_sta)//有幀中斷更新?
  38. //        {
  39. //                LCD_Scan_Dir(U2D_L2R);                //從上到下,從左到右  
  40. //                if(lcddev.id==0X1963)LCD_Set_Window((lcddev.width-240)/2,(lcddev.height-320)/2,240,320);//將顯示區(qū)域設(shè)置到屏幕中央
  41. //                else if(lcddev.id==0X5510||lcddev.id==0X5310)LCD_Set_Window((lcddev.width-320)/2,(lcddev.height-240)/2,320,240);//將顯示區(qū)域設(shè)置到屏幕中央
  42. //                LCD_WriteRAM_Prepare();     //開始寫入GRAM       
  43. ////                OV7725_RRST=0;                                //開始復(fù)位讀指針
  44. ////                OV7725_RCK_L;
  45. ////                OV7725_RCK_H;
  46. ////                OV7725_RCK_L;
  47. ////                OV7725_RRST=1;                                //復(fù)位讀指針結(jié)束
  48. ////                OV7725_RCK_H;
  49. //                OV7670_RRST=0;                                //開始復(fù)位讀指針
  50. //                OV7670_RCK_L;
  51. //                OV7670_RCK_H;
  52. //                OV7670_RCK_L;
  53. //                OV7670_RRST=1;                                //復(fù)位讀指針結(jié)束
  54. //                OV7670_RCK_H;
  55. //                for(i=0;i<OV7725_WINDOW_HEIGHT;i++)
  56. //                {
  57. //                        for(j=0;j<OV7725_WINDOW_WIDTH;j++)
  58. //                        {
  59. //                                OV7725_RCK_L;
  60. //                                color=GPIOC->IDR&0XFF;        //讀數(shù)據(jù)
  61. //                                OV7725_RCK_H;
  62. //                                color<<=8;  
  63. //                                OV7725_RCK_L;
  64. //                                color|=GPIOC->IDR&0XFF;        //讀數(shù)據(jù)
  65. //                                OV7725_RCK_H;
  66. //                                LCD->LCD_RAM=color;  
  67. //                        }
  68. //                }                                       
  69. //                 ov_sta=0;                                        //清零幀中斷標(biāo)記
  70. //                ov_frame++;
  71. //                LCD_Scan_Dir(DFT_SCAN_DIR);        //恢復(fù)默認(rèn)掃描方向
  72. //        if(Trace(&condition, &result))
  73. //                {
  74. //            LCD_DrawRectangle( result.x-result.w/2, result.y-result.h/2, result.x-result.w/2+result.w,  result.y-result.h/2+result.h);
  75. //            LCD_DrawRectangle( result.x-2, result.y-2,result.x+2, result.y+2);
  76. //                       
  77. //                             
  78. //                              xx=result.x;yy=result.y;
  79. //            LCD_ShowNum(1,280.,xx,3,16);
  80. //                        LCD_ShowNum(1,300.,yy,3,16);                       
  81. //                }   
  82. //                   else  {xx=0;yy=0; LCD_ShowNum(1,280.,xx,3,16);LCD_ShowNum(1,300.,yy,3,16);}
  83. //        }
  84. //}         

  85. void camera_refresh(void)
  86. {
  87.         u32 j,i;
  88.         u16 color;  
  89.         if(ov_sta)//有幀中斷更新?
  90.         {
  91.                 LCD_Scan_Dir(U2D_L2R);                //從上到下,從左到右  
  92.                 if(lcddev.id==0X1963)LCD_Set_Window((lcddev.width-240)/2,(lcddev.height-320)/2,240,320);//將顯示區(qū)域設(shè)置到屏幕中央
  93.                 else if(lcddev.id==0X5510||lcddev.id==0X5310)LCD_Set_Window((lcddev.width-320)/2,(lcddev.height-240)/2,320,240);//將顯示區(qū)域設(shè)置到屏幕中央
  94.                 LCD_WriteRAM_Prepare();     //開始寫入GRAM       
  95. //                OV7725_RRST=0;                                //開始復(fù)位讀指針
  96. //                OV7725_RCK_L;
  97. //                OV7725_RCK_H;
  98. //                OV7725_RCK_L;
  99. //                OV7725_RRST=1;                                //復(fù)位讀指針結(jié)束
  100. //                OV7725_RCK_H;
  101.                 OV7670_RRST=0;                                //開始復(fù)位讀指針
  102.                 OV7670_RCK_L;
  103.                 OV7670_RCK_H;
  104.                 OV7670_RCK_L;
  105.                 OV7670_RRST=1;                                //復(fù)位讀指針結(jié)束
  106.                 OV7670_RCK_H;
  107.                 for(i=0;i<OV7725_WINDOW_HEIGHT;i++)
  108.                 {
  109.                         for(j=0;j<OV7725_WINDOW_WIDTH;j++)
  110.                         {
  111.                                 OV7670_RCK_L;
  112.                         color=GPIOC->IDR&0XFF;        //讀數(shù)據(jù)
  113.                         OV7670_RCK_H;
  114.                         color<<=8;  
  115.                         OV7670_RCK_L;
  116.                         color|=GPIOC->IDR&0XFF;        //讀數(shù)據(jù)
  117.                         OV7670_RCK_H;
  118.                         LCD->LCD_RAM=color;
  119.                         }
  120.                 }                                       
  121.                 ov_sta=0;                                        //清零幀中斷標(biāo)記
  122.                 ov_frame++;
  123.                 LCD_Scan_Dir(DFT_SCAN_DIR);        //恢復(fù)默認(rèn)掃描方向
  124.         if(Trace(&condition, &result))
  125.                 {
  126.             LCD_DrawRectangle( result.x-result.w/2, result.y-result.h/2, result.x-result.w/2+result.w,  result.y-result.h/2+result.h);
  127.             LCD_DrawRectangle( result.x-2, result.y-2,result.x+2, result.y+2);
  128.                        
  129.                              
  130.                               xx=result.x;yy=result.y;
  131.             LCD_ShowNum(1,280.,xx,3,16);
  132.                         LCD_ShowNum(1,300.,yy,3,16);                       
  133.                 }   
  134.                    else  {xx=0;yy=0; LCD_ShowNum(1,280.,xx,3,16);LCD_ShowNum(1,300.,yy,3,16);}
  135.         }
  136. }         



  137. u16 a,b,c;
  138. u16 t=0;
  139. u8 key;
  140. u8 lightmode=4,saturation=2,contrast=2;
  141. u8 effect=0;

  142. int main(void)
  143. {       
  144.          
  145.         u8 i=0;            
  146.         u8 msgbuf[15];                                //消息緩存區(qū)
  147.         u8 tm=0;

  148.         delay_init();                     //延時函數(shù)初始化          
  149.   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設(shè)置中斷優(yōu)先級分組為組2:2位搶占優(yōu)先級,2位響應(yīng)優(yōu)先級
  150.         uart_init(115200);                 //串口初始化為 115200
  151.         usmart_dev.init(72);                //初始化USMART               
  152.         XD_Init();
  153.         LED_Init();                                          //初始化與LED連接的硬件接口
  154.         KEY_Init();                                        //初始化按鍵
  155.         LCD_Init();                                           //初始化LCD  
  156.         TPAD_Init(6);                                //觸摸按鍵初始化
  157.   
  158.   TIM3_PWM_Init(899,0);
  159.         TIM3_PWM2_Init(899,0);
  160.          
  161.         POINT_COLOR=RED;                        //設(shè)置字體為紅色
  162.         LCD_ShowString(30,10,200,16,16,"WJS STM32");
  163.         LCD_ShowString(30,70,200,16,16,"ATOM@ALIENTEK");
  164.         LCD_ShowString(30,90,200,16,16,"2018/8/5");
  165.   LCD_ShowString(30,110,200,16,16,"OV7725 Init...");         
  166.         while(OV7670_Init())//初始化OV7670
  167.         {
  168.                 LCD_ShowString(30,210,200,16,16,"OV7725 Error!!");
  169.                 delay_ms(200);
  170.           LCD_Fill(30,210,239,246,WHITE);
  171.                 delay_ms(200);
  172.         }
  173.         LCD_ShowString(30,210,200,16,16,"OV7725 Init OK");
  174.         delay_ms(1500);                  
  175.   OV7670_Brightness(-2);
  176.         OV7670_Contrast(-2);
  177.         TIM6_Int_Init(9999,7199);                        //10Khz計數(shù)頻率,1秒鐘中斷                                                                          
  178.         EXTI8_Init();                                                //使能定時器捕獲
  179. //        OV7670_Window_Set(320,240,1);        //設(shè)置窗口          
  180. //  OV7725_CS=0;       
  181.        
  182.         OV7670_Window_Set(12,176,240,320);        //設(shè)置窗口          
  183.   OV7670_CS=0;
  184.         LCD_Clear(BLACK);       
  185.         while(1)
  186.         {
  187.    
  188.                 POINT_COLOR=BLACK;   
  189.     camera_refresh();//更新顯示
  190.                 printf("x =  %d \r\n",xx);
  191.     printf("y =  %d \r\n",yy);
  192.        
  193.     yc=yy-220;
  194.                 xc=xx-220;
  195.                 yc=abs(yc);
  196.                 xc=abs(xc);
  197.                 ENA=yc*2+xc*1.7;
  198.                 ENB=yc*2-xc*1.7;
  199.                 if((xx<150)&&(xx>70)&&(yy<150)&&(yy>70))       {tz();ENA=0;ENB=0;}
  200.                 else if((xx<150)&&(xx>70)&&(yy<220)&&(yy>140)) {qj();}
  201.                 else if((xx<150)&&(xx>70)&&(yy<70)&&(yy>0))    {ht();}
  202.                 else if((xx<220)&&(xx>140)&&(yy<220)&&(yy>0))  {zz();}
  203.                 else if((xx<70)&&(xx>0)&&(yy<220)&&(yy>0))     {yz();}
  204.     TIM_SetCompare2(TIM3,ENA);//ENA
  205.                 TIM_SetCompare3(TIM3,ENB); //ENB
  206.        
  207.                        
  208.         }          
  209.        
  210. }
復(fù)制代碼


顏色識別小車.7z

1.31 MB, 下載次數(shù): 37, 下載積分: 黑幣 -5

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

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美一级免费 | 国产精品久久久久久久久久免费看 | 久久久久久国产精品免费免费狐狸 | 国产女人与拘做受免费视频 | 91在线一区二区三区 | 色又黄又爽网站www久久 | 国产成人一区二区三区精 | 日韩一二区 | 欧美色人| 精品视频一区二区三区 | www.一级片 | 亚洲区一区二 | 国产精品久久久久久久久久 | 亚洲一区二区三区 | 精品国产一区二区三区久久 | 日韩成人av在线 | 成人在线免费观看av | 日韩一区二区三区四区五区六区 | 国产欧美一区二区三区日本久久久 | 日本精品视频一区二区三区四区 | 国产做爰 | 中文字幕视频在线观看 | 色视频www在线播放国产人成 | 少妇一级淫片免费播放 | 午夜影视 | 日韩一级免费看 | 黄色三级在线播放 | 91精品久久久久久久久 | 免费久久99精品国产婷婷六月 | 天天草天天干 | 亚洲一区二区三区在线 | 日韩免费高清视频 | 国产精品黄视频 | 国产精品久久久久久久岛一牛影视 | www.久久久.com | 日日射影院 | 欧美视频在线播放 | 天天综合亚洲 | 一区二区播放 | 中文字幕日韩一区 | 亚洲va中文字幕 |