硬汉嵌入式论坛

 找回密码
 立即注册
查看: 9824|回复: 7
收起左侧

[emWin] 有残影是怎么回事?并且刷新速度好慢

[复制链接]

1

主题

21

回帖

24

积分

新手上路

积分
24
发表于 2014-5-11 12:22:06 | 显示全部楼层 |阅读模式

残影

残影

残影

残影

刷新好慢

刷新好慢
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106718
QQ
发表于 2014-5-11 14:13:52 | 显示全部楼层
把你读取像素颜色的函数贴出来,顺便看一下你洗的底层驱动。
回复

使用道具 举报

1

主题

21

回帖

24

积分

新手上路

积分
24
 楼主| 发表于 2014-5-11 17:15:59 | 显示全部楼层

回 eric2013 的帖子

eric2013:把你读取像素颜色的函数贴出来,顺便看一下你洗的底层驱动。 (2014-05-11 14:13) 
//读取个某点的颜色值     
//x,y:坐标
//返回值:此点的颜色
uint16_t LCD_ReadPoint(uint16_t x,uint16_t y)
{
     uint16_t r=0,g=0,b=0;
    if(x>=lcddev.width||y>=lcddev.height)return 0;    //超过了范围,直接返回           
    LCD_SetCursor(x,y);        
    if(lcddev.id==0X9341||lcddev.id==0X6804||lcddev.id==0X5310)LCD_WR_REG(0X2E);//9341/6804/3510 发送读GRAM指令
    else if(lcddev.id==0X5510)LCD_WR_REG(0X2E00);    //5510 发送读GRAM指令
    else LCD_WR_REG(R34);                               //其他IC发送读GRAM指令
     if(lcddev.id==0X9320)opt_delay(2);                //FOR 9320,延时2us        
    if(LCD_RAM)r=0;                            //dummy Read      
    opt_delay(2);      
     r=LCD_RAM;                                    //实际坐标颜色
     if(lcddev.id==0X9341||lcddev.id==0X5310||lcddev.id==0X5510)        //9341/NT35310/NT35510要分2次读出
     {
        opt_delay(2);      
        b=LCD_RAM;
        g=r&0XFF;        //对于9341/5310/5510,第一次读取的是RG的值,R在前,G在后,各占8位
        g<<=8;
    }else if(lcddev.id==0X6804)r=LCD_RAM;        //6804第二次读取的才是真实值
    if(lcddev.id==0X9325||lcddev.id==0X4535||lcddev.id==0X4531||lcddev.id==0X8989||lcddev.id==0XB505)return r;    //这几种IC直接返回颜色值
    else if(lcddev.id==0X9341||lcddev.id==0X5310||lcddev.id==0X5510)return (((r>>11)<<11)|((g>>10)<<5)|(b>>11));//ILI9341/NT35310/NT35510需要公式转换一下
    else return LCD_BGR2RGB(r);                        //其他IC
}   

用原子哥的屏和驱动
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106718
QQ
发表于 2014-5-12 11:17:25 | 显示全部楼层
看着也没有什么问题啊
回复

使用道具 举报

1

主题

21

回帖

24

积分

新手上路

积分
24
 楼主| 发表于 2014-5-12 13:03:34 | 显示全部楼层

回 eric2013 的帖子

eric2013:看着也没有什么问题啊 (2014-05-12 11:17) 
发生这种情况一般在硬件上会有什么问题呢,比如,FSMC配置,LCD屏连接或者是线过长。还有更改分辨率的地方发现好多处。感激不尽!
回复

使用道具 举报

1

主题

21

回帖

24

积分

新手上路

积分
24
 楼主| 发表于 2014-5-12 13:06:45 | 显示全部楼层

回 eric2013 的帖子

eric2013:看着也没有什么问题啊 (2014-05-12 11:17) 
我是直接把bsp_tft_lcd.c里面的函数更改成了屏的驱动,触摸还暂时没使用。不知道哪里还需要注意的。
回复

使用道具 举报

2

主题

12

回帖

22

积分

新手上路

积分
22
发表于 2014-5-12 15:37:51 | 显示全部楼层
这个函数的效率太低了,把里面的条件语句全去掉,改用条件编译。我估计你打点的函数也有这么多条件语句。
还有三个函数也要优化,两个画直线的,一个填充矩形的。
另外,opt_delay(2);    这东西是一定不能出现的。
emWin 是以单个像素点为单元进行操作的,每次重绘的时候,会把重绘区的所有点都更新的一次,而且如果有几层显示的话,是一层一层绘的。你想一下你这画面更新一次,你的打点和读点函数要调用多少次。
回复

使用道具 举报

1

主题

21

回帖

24

积分

新手上路

积分
24
 楼主| 发表于 2014-5-12 18:52:46 | 显示全部楼层

回 sqqdfny 的帖子

sqqdfny:这个函数的效率太低了,把里面的条件语句全去掉,改用条件编译。我估计你打点的函数也有这么多条件语句。
还有三个函数也要优化,两个画直线的,一个填充矩形的。
另外,opt_delay(2);    这东西是一定不能出现的。
emWin 是以单个像素点为单元进行操作的,每 .. (2014-05-12 15:37) 
刚试过了,没有效果的
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-1 00:32 , Processed in 0.179366 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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