OpenEdv-开源电子网

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

原子stm32摄像机实验,在 camera_refresh()加了几行语句,为了辨别黑白色,但是运行不了

[复制链接]

1

主题

2

帖子

0

精华

新手入门

积分
26
金钱
26
注册时间
2014-10-27
在线时间
0 小时
发表于 2014-10-27 22:49:59 | 显示全部楼层 |阅读模式
5金钱

#include "led.h"#include "delay.h"#include "key.h"#include "sys.h"#include "lcd.h"#include "usart.h"  #include"string.h"#include"ov7670.h"#include"tpad.h"#include"timer.h"#include"exti.h"#include"usmart.h"//ALIENTEK战舰STM32开发板实验36//摄像头 实验  //技术支持:www.openedv.com//广州市星翼电子科技有限公司 

const u8*LMODE_TBL[5]={"Auto","Sunny","Cloudy","Office","Home"}; //5种光照模式    

const u8*EFFECTS_TBL[7]={"Normal","Negative","B&W","Redish","Greenish","Bluish","Antique"}; //7种特效 

extern u8 ov_sta; //在exit.c里面定义

extern u8 ov_frame; //在timer.c里面定义

//更新LCD显示

void camera_refresh(void){

    u16 n,i;

u16 k=0,s=2;

u32 j;

  u16 color;  

if(ov_sta==2){

LCD_Scan_Dir(U2D_L2R); //从上到下,从左到右 

LCD_SetCursor(0x00,0x0000); //设置光标位置 

LCD_WriteRAM_Prepare();     //开始写入GRAM

OV7670_RRST=0; //开始复位读指针 

OV7670_RCK=0;

OV7670_RCK=1;

OV7670_RCK=0;

OV7670_RRST=1; //复位读指针结束 

OV7670_RCK=1;  

for(j=0;j<76800;j++){

OV7670_RCK=0;

color=GPIOC->IDR&0XFF; //读数据

OV7670_RCK=1; 

color<<=8;  

OV7670_RCK=0;

color|=GPIOC->IDR&0XFF; //读数据

OV7670_RCK=1; 

LCD->LCD_RAM=color;  

        for(n=15;n>=0;n--) {

if(color&0x80==0x80){  

  color<<=1;

  for(i=1;i<n;i++)

  s=2*s;

   k+=s;}}

   if(k<=50)

   LED0=0;

   if(k>=200)

   LED1=1;}           

EXTI_ClearITPendingBit(EXTI_Line8);  //清除LINE8上的中断标志位

ov_sta=0; //开始下一次采集

  ov_frame++; 

LCD_Scan_Dir(DFT_SCAN_DIR); //恢复默认扫描方向 

} }

 int main(void) {  

u8 key;

u8 lightmode=0,saturation=2,brightness=2,contrast=2;

u8 effect=0;  

  u8 i=0;    

u8 msgbuf[15];//消息缓存区

u8 tm=0;

delay_init();     //延时函数初始化  

NVIC_Configuration(); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级

uart_init(9600); //串口初始化为9600

  LED_Init();     //LED端口初始化

LCD_Init();

if(lcddev.id==0X6804||lcddev.id==0X5310||lcddev.id==0X5510) //强制设置屏幕分辨率为320*240.以支持3.5/4.3寸大屏{

lcddev.width=240;

lcddev.height=320; }

KEY_Init();

TPAD_Init(72); //触摸按键初始化 

usmart_dev.init(72); //初始化USMART    

  POINT_COLOR=RED;//设置字体为红色 

LCD_ShowString(60,50,200,16,16,"WarShip STM32");

LCD_ShowString(60,70,200,16,16,"OV7670 TEST");

LCD_ShowString(60,90,200,16,16,"ATOM@ALIENTEK");

LCD_ShowString(60,110,200,16,16,"2012/9/14");  

LCD_ShowString(60,130,200,16,16,"KEY0ight Mode");

LCD_ShowString(60,150,200,16,16,"KEY1:Saturation");

LCD_ShowString(60,170,200,16,16,"KEY2:Brightness");

LCD_ShowString(60,190,200,16,16,"KEY_UP:Contrast");

LCD_ShowString(60,210,200,16,16,"TPAD:Effects");  

  LCD_ShowString(60,230,200,16,16,"OV7670 Init...");  

while(OV7670_Init())//初始化OV7670{

LCD_ShowString(60,230,200,16,16,"OV7670 Error!!");

delay_ms(200);

   LCD_Fill(60,230,239,246,WHITE);

delay_ms(200);}

  LCD_ShowString(60,230,200,16,16,"OV7670 Init OK");

delay_ms(1500);   

OV7670_Light_Mode(lightmode);

OV7670_Color_Saturation(saturation);

OV7670_Brightness(brightness);

OV7670_Contrast(contrast);

  OV7670_Special_Effects(effect);  

TIM6_Int_Init(10000,7199); //10Khz计数频率,1秒钟中断  

EXTI8_Init(); //使能定时器捕获

OV7670_Window_Set(10,174,240,320); //设置窗口  

  OV7670_CS=0;  

  while(1){

key=KEY_Scan(0);//不支持连按

if(key){

tm=20;

switch(key){        

case KEY_RIGHT: //灯光模式Light Mode

lightmode++;

if(lightmode>4)lightmode=0;

OV7670_Light_Mode(lightmode);

sprintf((char*)msgbuf,"%s",LMODE_TBL[lightmode]);

break;

case KEY_DOWN: //饱和度Saturation

saturation++;

if(saturation>4)saturation=0;

OV7670_Color_Saturation(saturation);

sprintf((char*)msgbuf,"Saturation:%d",(signed char)saturation-2);

break;

case KEY_LEFT: //亮度Brightness  

brightness++;

if(brightness>4)brightness=0;

OV7670_Brightness(brightness);

sprintf((char*)msgbuf,"Brightness:%d",(signed char)brightness-2);

break;

case KEY_UP: //对比度Contrast    

contrast++;

if(contrast>4)contrast=0;

OV7670_Contrast(contrast);

sprintf((char*)msgbuf,"Contrast:%d",(signed char)contrast-2);

break;}}  

if(TPAD_Scan(0))//检测到触摸按键 {

effect++;

if(effect>6)effect=0;

OV7670_Special_Effects(effect);//设置特效

sprintf((char*)msgbuf,"%s",EFFECTS_TBL[effect]);

tm=20;} 

camera_refresh();//更新显示

  if(tm){

LCD_ShowString(60,60,200,16,16,msgbuf);

tm--;}

i++;if(i==15)//DS0闪烁.

{i=0;LED0=!LED0;

  }}    }



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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2014-10-27 23:30:36 | 显示全部楼层
这种问题,请先仿真。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

2

帖子

0

精华

新手入门

积分
26
金钱
26
注册时间
2014-10-27
在线时间
0 小时
 楼主| 发表于 2014-10-28 09:55:44 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
什么意思?仿真和直接烧写一样啊      代码没问题吧,理论上是可行的
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2014-10-28 23:27:03 | 显示全部楼层
回复【3楼】leibing:
---------------------------------
实际上是有问题,所以就得调试,调试就得仿真。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-23 04:43

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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