ATK 7寸屏 (V1版本)在战舰板上做综合实验遇到问题

2019-08-17 04:19发布

本帖最后由 EDA3rd 于 2017-6-29 02:12 编辑

ATK 7寸屏 (V1版本)在战舰板上做综合实验时,加载主界面异常:
QQ图片20170629015221.jpg QQ图片20170629015241.jpg QQ图片20170629015231.jpg

开机检测正常,且点击时能显示高亮图标(上面三排图标一个时刻只能点击显示其中一个,下面两排点一个亮一个,且能保留),说明LCD画点代码是没问题的,看来是spb代码问题,每次显示主界面都会调用 slcd_frame_show函数画进行dma刷新LCD界面,而dma的源就是sramlcdbuf,那么sramlcdbuf是如何布局的?x方向和y方向怎么定义?
为什么描点坐标是是x*spbdev.spbheigh + y 而不是y*spbdev.spbheigh + x?

u16 *sramlcdbuf;                                                        //SRAM LCD BUFFER,背景图片显存区

//在指定位置画点.
//x,y:坐标
//color:颜 {MOD}.
void slcd_draw_point(u16 x,u16 y,u16 color)
{         
        sramlcdbuf[y+x*spbdev.spbheight+spbdev.frame*spbdev.spbheight*spbdev.spbwidth]=color;
}

因为ATK-7寸屏的坐标始终是横屏的长边为x轴,短边为y轴,所以用dma方式填充lcd需要考虑起点和方向问题,另外为什么要在dma之前使用LCD_Scan_Dir修改扫描方式?所有LCD芯片都要这么做?


我修改了slcd_frame_show函数代码:
//显示一帧,即启动一次spi到lcd的显示.
//x:坐标偏移量
void slcd_frame_show(u32 x)
{  
        //LCD_Scan_Dir(U2D_L2R);                //设置扫描方向  
    //LCD_Set_Window(0,spbdev.stabarheight,spbdev.spbwidth,spbdev.spbheight);
    LCD_Set_Window(0,0,lcddev.width,lcddev.height);//恢复默认窗口大小
    LCD_SetCursor(0,spbdev.stabarheight);
        LCD_WriteRAM_Prepare();     //开始写入GRAM
        slcd_dma_enable(x);
    //LCD_Scan_Dir(DFT_SCAN_DIR);        //恢复默认方向
        LCD_Set_Window(0,0,lcddev.width,lcddev.height);//恢复默认窗口大小
}

但是主界面还是不正常。

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
11条回答
EDA3rd
2019-08-18 08:31
本帖最后由 EDA3rd 于 2017-7-1 23:26 编辑
EDA3rd 发表于 2017-7-1 13:54
感觉还是可以做的,只是sram_buf的填充方式需要修改,使它符合7寸屏V1的从上到下,从右到左的扫描方式, ...

其实spb填充方式刚好是从上到下,再从左到右,问题其实出在LCD_Fill和LCD_Color_Fill函数,修改后可以看到spb界面了,但是背景有条纹,难道图片解码有问题吗?用图片显示实验来测试一下,果然,海水都变成浆糊了,难道是LCD硬件本身问题?奇怪的是spb下方的三个主图标背景不是图标吧,怎么也有条纹?
QQ图片20170701231513.jpg

图片显示实验:
QQ图片20170701231508.jpg



一周热门 更多>