//更新LCD显示 void camera_refresh(void) { u32 j; u16 color; if(ov_sta)//有帧中断更新? { LCD_Scan_Dir(U2D_L2R); //从上到下,从左到右 if(lcddev.id==0X1963)LCD_Set_Window((lcddev.width-240)/2,(lcddev.height-320)/2,240,320);//将显示区域设置到屏幕中央 else if(lcddev.id==0X5510||lcddev.id==0X5310)LCD_Set_Window((lcddev.width-320)/2,(lcddev.height-240)/2,320,240);//将显示区域设置到屏幕中央 LCD_WriteRAM_Prepare(); //开始写入GRAM OV7670_RRST=0; //开始复位读指针 OV7670_RCK_L; OV7670_RCK_H; OV7670_RCK_L; OV7670_RRST=1; //复位读指针结束 OV7670_RCK_H; for(j=0;j<76800;j++) { OV7670_RCK_L; color=GPIOC->IDR&0XFF; //读数据 OV7670_RCK_H; color<<=8; OV7670_RCK_L; color|=GPIOC->IDR&0XFF; //读数据 OV7670_RCK_H; LCD->LCD_RAM=color; } ov_sta=0; //清零帧中断标记 ov_frame++; LCD_Scan_Dir(DFT_SCAN_DIR); //恢复默认扫描方向 } }
//DCMI设置显示窗口 //sx,sy;LCD的起始坐标 //width,height:LCD显示范围. void DCMI_Set_Window(u16 sx,u16 sy,u16 width,u16 height) { DCMI_Stop(); LCD_Clear(WHITE); LCD_Set_Window(sx,sy,width,height); OV2640_OutSize_Set(width,height); LCD_SetCursor(0,0); LCD_WriteRAM_Prepare(); //开始写入GRAM DMA2_Stream1->CR|=1<<0; //开启DMA2,Stream1 DCMI->CR|=1<<0; //DCMI捕获使能 }