|
extern u8 ov_sta; //在exit.c里面定義
//更新LCD顯示
void camera_refresh(void)
{
u32 j;
u16 color;
if(ov_sta)//有幀中斷更新?
{
LCD_Set_Window(0,0,320,240);//將顯示區(qū)域設(shè)置到屏幕中央
// LCD_WriteRAM_Prepare( );
OV7670_RRST=0; //開始復(fù)位讀指針
OV7670_RCK_L;
OV7670_RCK_H;
OV7670_RCK_L;
OV7670_RRST=1; //復(fù)位讀指針結(jié)束
OV7670_RCK_H;
for(j=0;j<76800;j++) //此種方式需清楚TFT內(nèi)部顯示方向控制寄存器值 速度較快
{
OV7670_RCK_L;
color=GPIOF->IDR&0XFF; //讀數(shù)據(jù)
OV7670_RCK_H;
color<<=8;
OV7670_RCK_L;
color|=GPIOF->IDR&0XFF; //讀數(shù)據(jù)
OV7670_RCK_H;
LCD_WriteData_Color(color);
}
ov_sta=0; //清零幀中斷標(biāo)記
}
}
int main()
{
u8 i;
SysTick_Init(72);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //中斷優(yōu)先級分組 分2組
TFTLCD_Init(); //LCD初始化
EXTI0_Init();
LCD_ShowString(10,80,tftlcd_data.width,tftlcd_data.height,16,"1212!");
i=OV7670_Init();
while(OV7670_Init())//初始化OV7670
{
LCD_ShowString(10,80,tftlcd_data.width,tftlcd_data.height,16,"OV7670 Error!");
delay_ms(200);
LCD_Fill(10,80,239,206,WHITE);
delay_ms(200);
}
LCD_ShowString(10,80,tftlcd_data.width,tftlcd_data.height,16,"OV7670 OK! ");
delay_ms(1500);
OV7670_Light_Mode(0);
OV7670_Color_Saturation(2);
OV7670_Brightness(2);
OV7670_Contrast(2);
OV7670_Special_Effects(0);
OV7670_Window_Set(12,176,240,320); //設(shè)置窗口
OV7670_CS=0;
LCD_Clear(BLACK);//正式程序要用
while(1)
{
camera_refresh();//更新顯示
}
}
|
|