找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于TINYM0 LPC1114的ov7670圖像采集源程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:171525 發(fā)表于 2018-8-16 16:31 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
      經(jīng)過一個月的醞釀,兩周的程序調試,實現(xiàn)了應用TINYM0開發(fā)板(LPC1114芯片),經(jīng)過OV7670帶FIFO圖像采集模塊采集圖像并顯示在ili9325驅動的LCD液晶屏上。實驗程序移植正點原子STM32 圖像采集程序。
     在調試過程中發(fā)現(xiàn),LCD液晶屏與OV7670共用數(shù)據(jù)線,導致花屏現(xiàn)象出現(xiàn),目前還沒有解決,所以沒有采用共用端口方式。(端口具體配置見LCD和OV7670初始化部分)。

單片機源程序如下:
  1. /******************************************************************/
  2. /* 名稱:OV7670圖像采集及顯示程序             */

  3. /* 作者:李穎              */
  4. /*   ccutchi                */
  5. /*                歡迎來學習                */
  6. /******************************************************************/

  7. #include "nxplpc11xx.h"
  8. #include "ili9325.h"
  9. #include "w25x16.h"
  10. #include "gui.h"
  11. #include "xpt2046.h"

  12. #include  "delay.h"
  13. #include "ov7670.h"
  14. #include  "gui.h"
  15. extern uint8_t ov_sta;        //幀次數(shù) 置位標志位
  16. void EXTI2_Init(void);
  17. //更新LCD顯示
  18. void camera_refresh(void)
  19. {
  20.         uint32_t j;
  21.         uint16_t color,temp_color;
  22.        
  23.         if(ov_sta==2)                                //判斷緩存區(qū)是否存好攝像數(shù)據(jù)
  24.         {
  25.                 OV7670_RRST_0;                                //開始復位讀指針
  26.                 OV7670_RCK_0;
  27.                 OV7670_RCK_1;
  28.                 OV7670_RCK_0;               
  29.                 OV7670_RRST_1;                                //復位讀指針結束
  30.                 OV7670_RCK_1;  
  31.                
  32.                 OV7670_CS_L;   //fif 開
  33.                          
  34.                 for(j=0;j<76800;j++)                           //分辨率為240x320   每個顏色點要兩個字節(jié) 所以 240x320x2=76800  次
  35.                 {
  36.                        
  37.            // GPIO2->DIR &=0x00F;                   // 設置P2口高8位引腳為輸入,用作OV76708位并行數(shù)據(jù)輸入
  38.                // GPIO2->DATA = 0XFF0;           // P2口高8位引腳置高
  39.                        
  40.                         OV7670_RCK_0;                                 //每一次時鐘跳變 讀一次數(shù)據(jù)
  41.                         color=GPIO0->DATA&0X1FE;  //color=GPIOC->IDR&0XFF;        //P0.0~P0.8讀數(shù)據(jù)   讀取顏色高字節(jié)數(shù)據(jù)
  42.                         OV7670_RCK_1;
  43.                         color<<=7;                                   //左移8位  將高字節(jié)移到高8位  為接收低8位字節(jié)做準備
  44.                         temp_color=color;  
  45.                         OV7670_RCK_0;
  46.                         color=GPIO0->DATA&0X1FE;  //color=GPIOC->IDR&0XFF;        //讀數(shù)據(jù)   讀取顏色低字節(jié)數(shù)據(jù)
  47.                         OV7670_RCK_1;
  48.             color>>=1;  
  49.                         color|=temp_color;
  50.           
  51.                     LCD_WR_DATA(color);
  52.            
  53.                 }
  54.      GPIO1->IC = 0x3FF;  // 清除GPIO1上的中斷
  55.      ov_sta=0;        //開始下一次采集
  56.          
  57.                                                
  58.         }
  59.    
  60. }


  61. /*

  62. unsigned int Image_Buffer;
  63. unsigned char  Image[104][14];//圖像數(shù)組
  64. unsigned int OrgRow=0,OrgColumn=0;//行列初值設置
  65. unsigned int sampleRow=0,samleColumn=0;//行列初值設置
  66. unsigned int sampleRow_Max=239,samleColumn_Max=239;//行列初值設置最大值

  67. void ImagePlay(void);//圖像顯示函數(shù)
  68. void ImageProcess(void);//圖像處理函數(shù)
  69. void AutoControl(void);//控制函數(shù)

  70. void OV5116_INIT(void);
  71. */
  72. int main(void)
  73. {       
  74.     //uint8_t lightmode=0,saturation=2,brightness=2,contrast=2;
  75.    //uint8_t effect=0;

  76.         SysCLK_config(); // 時鐘配置
  77.         SCCB_Init();               
  78.     LCD_Init();                 // 液晶顯示器初始化       
  79.         SCCB_Start();
  80.        
  81.         while(OV7670_Init())//初始化OV7670
  82.         {
  83.          Draw_TextBox(20, 20, 100, 100);       
  84.         }
  85.   
  86.          //攝像頭 參數(shù)設置  屏蔽后為默認效果                   
  87.     OV7670_Light_Mode(0);//lightmode
  88.         OV7670_Color_Saturation(2);//saturation
  89.         OV7670_Brightness(2);//brightness
  90.         OV7670_Contrast(2);//contrast
  91.         OV7670_Special_Effects(0);        //effect

  92.         OV7670_Window_Set(10,174,240,320);        //設置窗口
  93.         //OV7670_CS_L;                                           //使能攝像頭片選        
  94.     EXTI2_Init();                                           //初始化中斷線
  95.         LCD_Clear(BLUE);         // 全屏顯示白色
  96.        
  97.         while(1)
  98.         {       
  99.        
  100.         camera_refresh();               
  101.        
  102.        
  103.         }
  104. }


  105. void EXTI2_Init(void)
  106. {   
  107.         SYSCON->SYSAHBCLKCTRL |= (1<<16); // 使能IOCON時鐘(bit16)
  108.         IOCON->PIO1_0 = 0XD1; //把PIN33設置為P1.0腳
  109.         SYSCON->SYSAHBCLKCTRL &= ~(1<<16); // 禁能IOCON時鐘(bit16)

  110.         //把P1.0和P1.1設置為輸入
  111.         GPIO1->DIR &= ~(1<<0);
  112.         GPIO1->DATA |= (1<<0);
  113.         GPIO1->IS &= ~(1<<0); //選擇P1.0為邊沿觸發(fā)
  114.         GPIO1->IEV |=(1<<0);//選擇P1.0為 上升沿觸發(fā)
  115.         GPIO1->IE |= (1<<0);  //設置P1.0中斷不被屏蔽
  116.         NVIC_EnableIRQ(EINT1_IRQn);        // 使能GPIO1中斷
  117.        
  118. }

  119. //GPIO1中斷服務函數(shù)
  120. void PIOINT1_IRQHandler(void)
  121. {       
  122. if((GPIO1->MIS&0x001)==0x001) // 檢測是不是P1.0引腳產生的中斷
  123.         {
  124.                 if(ov_sta<2)
  125.                 {
  126.                         if(ov_sta==0)
  127.                         {
  128.                                 OV7670_WRST_L;//=0;                 //復位寫指針
  129.                                 OV7670_WRST_H;//=1;       
  130.                                 OV7670_WREN_H;//=1;                //允許寫入FIFO       
  131.                         }
  132.                         else
  133.                         {
  134.                                
  135.                         //        OV7670_WRST_L;//=0;                 //復位寫指針                                   
  136.                         //        OV7670_WRST_H;//=1;       
  137.                                 OV7670_WREN_L;//=0;                //禁止寫入FIFO
  138.                                 }         
  139.                 ov_sta++;
  140.           
  141.                         }       
  142.          GPIO1->IC = 0x3FF;  // 清除GPIO1上的中斷
  143.                 }       
  144.        
  145. }

復制代碼

所有資料51hei提供下載:
ov7670圖像顯示正確.rar (393.87 KB, 下載次數(shù): 12)


評分

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

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:171525 發(fā)表于 2019-8-6 15:20 | 只看該作者
把TFT 數(shù)據(jù)線和 OV7670數(shù)據(jù)線分開,不共用數(shù)據(jù)線就OK了
回復

使用道具 舉報

板凳
ID:237942 發(fā)表于 2019-8-9 09:18 | 只看該作者
如果數(shù)據(jù)線復用, 你中間數(shù)據(jù)傳輸時,判斷總線是否忙不就可以解決問題了嗎
回復

使用道具 舉報

地板
ID:1042338 發(fā)表于 2022-8-17 20:53 | 只看該作者
好老的MCU啊,用點新的MCU就更棒了。
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表