本帖最后由 WHS123 于 2018-10-29 21:25 编辑
例程里是直接把摄像头的数据传输到LCD的RAM,我想把摄像头的数据先提取出来放到数组rgb565_buf里,然后再显示到LCD上,图像输出设置为144*176,数据提取出来了,但显示不正确,求助啊!!!代码和图片如下:
[mw_shl_code=applescript,true]u16 rgb565_buf[176][144];//储存rgb数据的数组
//将数组中的rgb数据显示到LCD上
void rgb_display(void)
{
u16 i,j;
LCD_SetCursor(0,0);
LCD_WriteRAM_Prepare();
for(i = 0; i < 144; i++)
{
for(j = 0; j < 176; j++)
{
if(j == 175)
{
LCD_SetCursor(0,i+1);
LCD_WriteRAM_Prepare();
}
LCD_SetCursor(i,j);
LCD_WriteRAM_Prepare();
LCD->LCD_RAM = rgb565_buf
[j];
}
}
}
//主函数
int main(void)
{
u8 key;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
delay_init(168); //初始化延时函数
uart_init(115200); //初始化串口波特率为115200
usart2_init(42,115200); //初始化串口2波特率为115200
LED_Init(); //初始化LED
LCD_Init(); //LCD初始化
KEY_Init(); //按键初始化
TIM3_Int_Init(10000-1,8400-1);//10Khz计数,1秒钟中断一次
usmart_dev.init(84); //初始化USMART
POINT_COLOR=RED;//设置字体为红 {MOD}
LCD_ShowString(30,50,200,16,16,"Explorer STM32F4");
LCD_ShowString(30,70,200,16,16,"OV2640 TEST");
LCD_ShowString(30,90,200,16,16,"ATOM@ALIENTEK");
LCD_ShowString(30,110,200,16,16,"2014/5/14");
while(OV2640_Init())//初始化OV2640
{
LCD_ShowString(30,130,240,16,16,"OV2640 ERR");
delay_ms(200);
LCD_Fill(30,130,239,170,WHITE);
delay_ms(200);
}
LCD_ShowString(30,130,200,16,16,"OV2640 OK");
OV2640_OutSize_Set(176,144);
OV2640_RGB565_Mode();
My_DCMI_Init(); //DCMI配置
DCMI_DMA_Init((u32)rgb565_buf, sizeof(rgb565_buf), DMA_MemoryDataSize_HalfWord, DMA_MemoryInc_Enable);//DCMI DMA配置
DCMI_Start();
while(1)
{
}
}
//中断函数
//DCMI中断服务函数
void DCMI_IRQHandler(void)
{
if(DCMI_GetITStatus(DCMI_IT_FRAME)==SET)//捕获到一帧图像
{
DCMI_Stop();
DCMI_ClearITPendingBit(DCMI_IT_FRAME);//清除帧中断
rgb_display();
LED1=!LED1;
ov_frame++;
DCMI_Start();
}
}[/mw_shl_code]
一周热门 更多>