找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3737|回复: 3
打印 上一主题 下一主题
收起左侧

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

[复制链接]
跳转到指定楼层
楼主
ID:171525 发表于 2018-8-16 16:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
      经过一个月的酝酿,两周的程序调试,实现了应用TINYM0开发板(LPC1114芯片),经过OV7670带FIFO图像采集模块采集图像并显示在ili9325驱动的LCD液晶屏上。实验程序移植正点原子STM32 图像采集程序。
     在调试过程中发现,LCD液晶屏与OV7670共用数据线,导致花屏现象出现,目前还没有解决,所以没有采用共用端口方式。(端口具体配置见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;        //帧次数 置位标志位
  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)                                //判断缓存区是否存好摄像数据
  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   每个颜色点要两个字节 所以 240x320x2=76800  次
  35.                 {
  36.                        
  37.            // GPIO2->DIR &=0x00F;                   // 设置P2口高8位引脚为输入,用作OV76708位并行数据输入
  38.                // GPIO2->DATA = 0XFF0;           // P2口高8位引脚置高
  39.                        
  40.                         OV7670_RCK_0;                                 //每一次时钟跳变 读一次数据
  41.                         color=GPIO0->DATA&0X1FE;  //color=GPIOC->IDR&0XFF;        //P0.0~P0.8读数据   读取颜色高字节数据
  42.                         OV7670_RCK_1;
  43.                         color<<=7;                                   //左移8位  将高字节移到高8位  为接收低8位字节做准备
  44.                         temp_color=color;  
  45.                         OV7670_RCK_0;
  46.                         color=GPIO0->DATA&0X1FE;  //color=GPIOC->IDR&0XFF;        //读数据   读取颜色低字节数据
  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];//图像数组
  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);//图像显示函数
  68. void ImageProcess(void);//图像处理函数
  69. void AutoControl(void);//控制函数

  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.          //摄像头 参数设置  屏蔽后为默认效果                   
  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为边沿触发
  114.         GPIO1->IEV |=(1<<0);//选择P1.0为 上升沿触发
  115.         GPIO1->IE |= (1<<0);  //设置P1.0中断不被屏蔽
  116.         NVIC_EnableIRQ(EINT1_IRQn);        // 使能GPIO1中断
  117.        
  118. }

  119. //GPIO1中断服务函数
  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, 下载次数: 12)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:171525 发表于 2019-8-6 15:20 | 只看该作者
把TFT 数据线和 OV7670数据线分开,不共用数据线就OK了
回复

使用道具 举报

板凳
ID:237942 发表于 2019-8-9 09:18 | 只看该作者
如果数据线复用, 你中间数据传输时,判断总线是否忙不就可以解决问题了吗
回复

使用道具 举报

地板
ID:1042338 发表于 2022-8-17 20:53 | 只看该作者
好老的MCU啊,用点新的MCU就更棒了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表