1485|0

1140

帖子

0

TA的资源

纯净的硅(初级)

楼主
 

基于TINYM0 LPC1114的ov7670图像采集源程序 [复制链接]

经过一个月的酝酿,两周的程序调试,实现了应用TINYM0开发板(LPC1114芯片),经过OV7670带FIFO图像采集模块采集图像并显示在ili9325驱动的LCD液晶屏上。实验程序移植正点原子STM32 图像采集程序。
     在调试过程中发现,LCD液晶屏与OV7670共用数据线,导致花屏现象出现,目前还没有解决,所以没有采用共用端口方式。(端口具体配置见LCD和OV7670初始化部分)。


单片机源程序如下:
/******************************************************************/
/* 名称:OV7670图像采集及显示程序             */


/* 作者:李颖              */
/*   ccutchi                */
/*                欢迎来学习                */
/******************************************************************/


#include "nxplpc11xx.h"
#include "ili9325.h"
#include "w25x16.h"
#include "gui.h"
#include "xpt2046.h"


#include  "delay.h"
#include "ov7670.h"
#include  "gui.h"
extern uint8_t ov_sta;        //帧次数 置位标志位
void EXTI2_Init(void);
//更新LCD显示
void camera_refresh(void)
{
        uint32_t j;
        uint16_t color,temp_color;
        
        if(ov_sta==2)                                //判断缓存区是否存好摄像数据
        {
                OV7670_RRST_0;                                //开始复位读指针
                OV7670_RCK_0;
                OV7670_RCK_1;
                OV7670_RCK_0;               
                OV7670_RRST_1;                                //复位读指针结束
                OV7670_RCK_1;  
               
                OV7670_CS_L;   //fif 开
                        
                for(j=0;j<76800;j++)                           //分辨率为240x320   每个颜色点要两个字节 所以 240x320x2=76800  次
                {
                        
           // GPIO2->DIR &=0x00F;                   // 设置P2口高8位引脚为输入,用作OV76708位并行数据输入
               // GPIO2->DATA = 0XFF0;           // P2口高8位引脚置高
                        
                        OV7670_RCK_0;                                 //每一次时钟跳变 读一次数据
                        color=GPIO0->DATA&0X1FE;  //color=GPIOC->IDR&0XFF;        //P0.0~P0.8读数据   读取颜色高字节数据
                        OV7670_RCK_1;
                        color<<=7;                                   //左移8位  将高字节移到高8位  为接收低8位字节做准备
                        temp_color=color;  
                        OV7670_RCK_0;
                        color=GPIO0->DATA&0X1FE;  //color=GPIOC->IDR&0XFF;        //读数据   读取颜色低字节数据
                        OV7670_RCK_1;
            color>>=1;  
                        color|=temp_color;
           
                    LCD_WR_DATA(color);
           
                }
     GPIO1->IC = 0x3FF;  // 清除GPIO1上的中断
     ov_sta=0;        //开始下一次采集
         
                                                
        }
   
}




/*


unsigned int Image_Buffer;
unsigned char  Image[104][14];//图像数组
unsigned int OrgRow=0,OrgColumn=0;//行列初值设置
unsigned int sampleRow=0,samleColumn=0;//行列初值设置
unsigned int sampleRow_Max=239,samleColumn_Max=239;//行列初值设置最大值


void ImagePlay(void);//图像显示函数
void ImageProcess(void);//图像处理函数
void AutoControl(void);//控制函数


void OV5116_INIT(void);
*/
int main(void)
{        
    //uint8_t lightmode=0,saturation=2,brightness=2,contrast=2;
   //uint8_t effect=0;


        SysCLK_config(); // 时钟配置
        SCCB_Init();               
    LCD_Init();                 // 液晶显示器初始化        
        SCCB_Start();
        
        while(OV7670_Init())//初始化OV7670
        {
         Draw_TextBox(20, 20, 100, 100);        
        }
  
         //摄像头 参数设置  屏蔽后为默认效果                    
    OV7670_Light_Mode(0);//lightmode
        OV7670_Color_Saturation(2);//saturation
        OV7670_Brightness(2);//brightness
        OV7670_Contrast(2);//contrast
        OV7670_Special_Effects(0);        //effect


        OV7670_Window_Set(10,174,240,320);        //设置窗口
        //OV7670_CS_L;                                           //使能摄像头片选         
    EXTI2_Init();                                           //初始化中断线
        LCD_Clear(BLUE);         // 全屏显示白色
        
        while(1)
        {        
        
        camera_refresh();               
        
        
        }
}




void EXTI2_Init(void)
{   
        SYSCON->SYSAHBCLKCTRL |= (1<<16); // 使能IOCON时钟(bit16)
        IOCON->PIO1_0 = 0XD1; //把PIN33设置为P1.0脚
        SYSCON->SYSAHBCLKCTRL &= ~(1<<16); // 禁能IOCON时钟(bit16)


        //把P1.0和P1.1设置为输入
        GPIO1->DIR &= ~(1<<0);
        GPIO1->DATA |= (1<<0);
        GPIO1->IS &= ~(1<<0); //选择P1.0为边沿触发
        GPIO1->IEV |=(1<<0);//选择P1.0为 上升沿触发
        GPIO1->IE |= (1<<0);  //设置P1.0中断不被屏蔽
        NVIC_EnableIRQ(EINT1_IRQn);        // 使能GPIO1中断
        
}


//GPIO1中断服务函数
void PIOINT1_IRQHandler(void)
{        
if((GPIO1->MIS&0x001)==0x001) // 检测是不是P1.0引脚产生的中断
        {
                if(ov_sta<2)
                {
                        if(ov_sta==0)
                        {
                                OV7670_WRST_L;//=0;                 //复位写指针
                                OV7670_WRST_H;//=1;        
                                OV7670_WREN_H;//=1;                //允许写入FIFO        
                        }
                        else
                        {
                                
                        //        OV7670_WRST_L;//=0;                 //复位写指针                                   
                        //        OV7670_WRST_H;//=1;        
                                OV7670_WREN_L;//=0;                //禁止写入FIFO
                                }         
                ov_sta++;
           
                        }        
         GPIO1->IC = 0x3FF;  // 清除GPIO1上的中断
                }        
        
}


 
点赞 关注

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表