OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6962|回复: 6

stm32f1精英板7725颜色识别

[复制链接]

1

主题

3

帖子

0

精华

新手入门

积分
8
金钱
8
注册时间
2019-10-18
在线时间
0 小时
发表于 2019-10-18 20:50:45 | 显示全部楼层 |阅读模式
u8 OV7670_Init(void)
{
        u8 temp;
        u16 i=0;          
        //设置IO

        GPIO_InitTypeDef  GPIO_InitStructure;
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO, ENABLE);         //使能相关端口时钟

         
               
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_4;                                 // 端口配置
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                  //推挽输出
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                 //IO口速度为50MHz
        GPIO_Init(GPIOA, &GPIO_InitStructure);
        GPIO_SetBits(GPIOA,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_4);       

       
        GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_15; //PA15输入 上拉
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
        GPIO_SetBits(GPIOA,GPIO_Pin_15);
       
    GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_14;  
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
        GPIO_SetBits(GPIOA,GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_14);
       
    GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);        //SWD

        SCCB_Init();                        //初始化SCCB 的IO口                     
        if(SCCB_WR_Reg(0x12,0x80))return 1;        //复位SCCB          
        delay_ms(50);
        //读取产品型号
        temp=SCCB_RD_Reg(0x0b);   
        if(temp!=0x73)return 2;  
        temp=SCCB_RD_Reg(0x0a);   
        if(temp!=0x76)return 2;
        //初始化序列          
        for(i=0;i<sizeof(ov7670_init_reg_tbl)/sizeof(ov7670_init_reg_tbl[0]);i++)
        {
                   SCCB_WR_Reg(ov7670_init_reg_tbl[i][0],ov7670_init_reg_tbl[i][1]);
                delay_ms(2);
        }
           return 0x00;         //ok
}
////////////////////////////////////////////////////////////////////////////
//OV7670功能设置
//白平衡设置
//0:自动
//1:太阳sunny
//2,阴天cloudy
//3,办公室office
//4,家里home
void OV7670_Light_Mode(u8 mode)
{
        u8 reg13val=0XE7;//默认就是设置为自动白平衡
        u8 reg01val=0;
        u8 reg02val=0;
        switch(mode)
        {
                case 1://sunny
                        reg13val=0XE5;
                        reg01val=0X5A;
                        reg02val=0X5C;
                        break;       
                case 2://cloudy
                        reg13val=0XE5;
                        reg01val=0X58;
                        reg02val=0X60;
                        break;       
                case 3://office
                        reg13val=0XE5;
                        reg01val=0X84;
                        reg02val=0X4c;
                        break;       
                case 4://home
                        reg13val=0XE5;
                        reg01val=0X96;
                        reg02val=0X40;
                        break;       
        }
        SCCB_WR_Reg(0X13,reg13val);//COM8设置
        SCCB_WR_Reg(0X01,reg01val);//AWB蓝色通道增益
        SCCB_WR_Reg(0X02,reg02val);//AWB红色通道增益
}                                  
//色度设置
//0:-2
//1:-1
//2,0
//3,1
//4,2
void OV7670_Color_Saturation(u8 sat)
{
        u8 reg4f5054val=0X80;//默认就是sat=2,即不调节色度的设置
        u8 reg52val=0X22;
        u8 reg53val=0X5E;
        switch(sat)
        {
                case 0://-2
                        reg4f5054val=0X40;           
                        reg52val=0X11;
                        reg53val=0X2F;                  
                        break;       
                case 1://-1
                        reg4f5054val=0X66;            
                        reg52val=0X1B;
                        reg53val=0X4B;          
                        break;       
                case 3://1
                        reg4f5054val=0X99;          
                        reg52val=0X28;
                        reg53val=0X71;          
                        break;       
                case 4://2
                        reg4f5054val=0XC0;          
                        reg52val=0X33;
                        reg53val=0X8D;          
                        break;       
        }
        SCCB_WR_Reg(0X4F,reg4f5054val);        //色彩矩阵系数1
        SCCB_WR_Reg(0X50,reg4f5054val);        //色彩矩阵系数2
        SCCB_WR_Reg(0X51,0X00);                        //色彩矩阵系数3  
        SCCB_WR_Reg(0X52,reg52val);                //色彩矩阵系数4
        SCCB_WR_Reg(0X53,reg53val);                //色彩矩阵系数5
        SCCB_WR_Reg(0X54,reg4f5054val);        //色彩矩阵系数6  
        SCCB_WR_Reg(0X58,0X9E);                        //MTXS
}
//亮度设置
//0:-2
//1:-1
//2,0
//3,1
//4,2
void OV7670_Brightness(u8 bright)
{
        u8 reg55val=0X00;//默认就是bright=2
          switch(bright)
        {
                case 0://-2
                        reg55val=0XB0;                  
                        break;       
                case 1://-1
                        reg55val=0X98;                  
                        break;       
                case 3://1
                        reg55val=0X18;                  
                        break;       
                case 4://2
                        reg55val=0X30;                  
                        break;       
        }
        SCCB_WR_Reg(0X55,reg55val);        //亮度调节
}
//对比度设置
//0:-2
//1:-1
//2,0
//3,1
//4,2
void OV7670_Contrast(u8 contrast)
{
        u8 reg56val=0X40;//默认就是contrast=2
          switch(contrast)
        {
                case 0://-2
                        reg56val=0X30;                  
                        break;       
                case 1://-1
                        reg56val=0X38;                  
                        break;       
                case 3://1
                        reg56val=0X50;                  
                        break;       
                case 4://2
                        reg56val=0X60;                  
                        break;       
        }
        SCCB_WR_Reg(0X56,reg56val);        //对比度调节
}
//特效设置
//0:普通模式   
//1,负片
//2,黑白   
//3,偏红色
//4,偏绿色
//5,偏蓝色
//6,复古            
void OV7670_Special_Effects(u8 eft)
{
        u8 reg3aval=0X04;//默认为普通模式
        u8 reg67val=0XC0;
        u8 reg68val=0X80;
        switch(eft)
        {
                case 1://负片
                        reg3aval=0X24;
                        reg67val=0X80;
                        reg68val=0X80;
                        break;       
                case 2://黑白
                        reg3aval=0X14;
                        reg67val=0X80;
                        reg68val=0X80;
                        break;       
                case 3://偏红色
                        reg3aval=0X14;
                        reg67val=0Xc0;
                        reg68val=0X80;
                        break;       
                case 4://偏绿色
                        reg3aval=0X14;
                        reg67val=0X40;
                        reg68val=0X40;
                        break;       
                case 5://偏蓝色
                        reg3aval=0X14;
                        reg67val=0X80;
                        reg68val=0XC0;
                        break;       
                case 6://复古
                        reg3aval=0X14;
                        reg67val=0XA0;
                        reg68val=0X40;
                        break;         
        }
        SCCB_WR_Reg(0X3A,reg3aval);//TSLB设置
        SCCB_WR_Reg(0X68,reg67val);//MANU,手动U值
        SCCB_WR_Reg(0X67,reg68val);//MANV,手动V值
}       
//设置图像输出窗口
//对QVGA设置。
void OV7670_Window_Set(u16 sx,u16 sy,u16 width,u16 height)
{
        u16 endx;
        u16 endy;
        u8 temp;
        endx=sx+width*2;        //V*2
        endy=sy+height*2;
        if(endy>784)endy-=784;
        temp=SCCB_RD_Reg(0X03);                                //读取Vref之前的值
        temp&=0XF0;
        temp|=((endx&0X03)<<2)|(sx&0X03);
        SCCB_WR_Reg(0X03,temp);                                //设置Vref的start和end的最低2位
        SCCB_WR_Reg(0X19,sx>>2);                        //设置Vref的start高8位
        SCCB_WR_Reg(0X1A,endx>>2);                        //设置Vref的end的高8位

        temp=SCCB_RD_Reg(0X32);                                //读取Href之前的值
        temp&=0XC0;
        temp|=((endy&0X07)<<3)|(sy&0X07);
        SCCB_WR_Reg(0X17,sy>>3);                        //设置Href的start高8位
        SCCB_WR_Reg(0X18,endy>>3);                        //设置Href的end的高8位
}


1.rar

194.21 KB, 下载次数: 332

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

109

主题

5562

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10541
金钱
10541
注册时间
2017-2-18
在线时间
1908 小时
发表于 2019-10-19 12:12:38 | 显示全部楼层
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

新手入门

积分
10
金钱
10
注册时间
2019-9-15
在线时间
2 小时
发表于 2020-4-29 11:17:32 | 显示全部楼层
为啥是白屏呢
回复 支持 反对

使用道具 举报

14

主题

821

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2034
金钱
2034
注册时间
2021-7-17
在线时间
635 小时
发表于 2022-4-26 10:30:19 | 显示全部楼层
用最新的屏幕代码就行
回复 支持 反对

使用道具 举报

0

主题

9

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2023-5-5
在线时间
4 小时
发表于 2023-5-18 18:22:07 | 显示全部楼层
为啥我把压缩包里的程序烧录进我的精英板没反应呢,也就只接了OV7725和LCD和电源线啊
回复 支持 反对

使用道具 举报

0

主题

8

帖子

0

精华

新手入门

积分
1
金钱
1
注册时间
2023-12-28
在线时间
8 小时
发表于 2024-1-11 15:59:51 | 显示全部楼层
感谢分享
回复 支持 反对

使用道具 举报

0

主题

8

帖子

0

精华

新手入门

积分
1
金钱
1
注册时间
2023-12-28
在线时间
8 小时
发表于 2024-1-11 17:14:07 | 显示全部楼层
感谢分享
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 12:52

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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