找回密码
 注册
搜索
查看: 4950|回复: 20

[讨论] 竖屏横放的实现

[复制链接]
发表于 2010-7-27 16:30:57 | 显示全部楼层 |阅读模式
项目中要实现竖屏横放,请高手赐教,不胜感激。
本人想过用修改刷屏数据方向的方法去改。然后涉及到刷屏数据寄存器的修改和blockwrite函数的改写。但是一直会出现花屏的现象。是不是因为MMI层的关系?是否mmi层的资源一定要改?
发表于 2010-7-27 19:10:56 | 显示全部楼层
不会啊,我半个月前才调试的一个MTK平台的LGDP4532的屏,也是竖屏横用啊,

开始源代码不动的话,刷的就是乱的,方向设对以后就好了的,MTK的接口都

是相同的,回头你把你的lcd型号告诉我一下,改动的地方回头我告诉你,我

的msn是:hobby_803@hotmail.com

另外,花屏也有不少原因的,可能读写时序不对,可能没有读到lcd的Id,还有

可能是寄存器设置的不对,我见过的花屏大概有这几种原因,只要都正确,应该

可以正常显示的

竖屏横用转换关系:(这个是我验证过的,以176*220为例)

startx --> 175-starty
endx   --> 175-endy
starty --> endx
endy   --> startx

还有个GRAM的地址也要相对应的转换,不光是这点,你考虑全了就对了
还要用220*176的资源,你的就是用400*240的资源
点评回复

使用道具 举报

 楼主| 发表于 2010-7-27 18:35:37 | 显示全部楼层
谢谢2楼。这个方法我之前就试过了。会出现花屏的现象,开机屏幕从头道尾都是花的,什么都看不到。我用到屏里面控制刷屏反向的寄存器是0x0003,以开始的值为0x1030,后面改为横屏应该为0x1018.竖屏改横屏的话假设是旋转90度,那在blockwrite中就应该是400-startx,400-endx(240*400)的屏。可是效果就是出不了!!!
点评回复

使用道具 举报

发表于 2010-7-27 18:27:02 | 显示全部楼层
MMI在资源当然是要改的,呵呵,修改初始化寄存器中的刷屏方向相关的寄存器即可
点评回复

使用道具 举报

发表于 2010-7-27 17:39:48 | 显示全部楼层
呵呵,这个不难,如果你把刷屏原理理解透彻的话

   首先,你要修改刷屏方向和起点,也可以称作刷屏坐标,把一个坐标换算到

  另一个坐标系中即可,在各个lcd的IC对应的spec中有详细描述,有一个寄存

  器的三个位来控制,一般是AM位,ID1和ID0,默认设置是从上到下,从左到

  右,也就是(unsigned long int left,unsigned long int top)是默认起点

  你把坐标系旋转90度或者270度即可,这要看你应用的屏方向;控制刷屏方向

  的寄存器可能是0x36,或0x03或者搜索Entry mode,你可以找到的;

   第二,在blockwrite函数中修改坐标,这里先假设你用的屏的分辨率为

   240*320的,如果你旋转90度,那么对应的坐标由原来的(top,left,right,

   bottom)变成了(319-top,right,319-bottom,left),至于如何把这个坐标写

   到寄存器中,很简单了吧,呵呵

   横屏竖用也就是修改两个地方而已,第一个方向设置简单,第二个需要计算

   坐标,从blockwrite()来看,你用的是MTK平台,在展讯中调节更简洁,不

   知道我有没有给你讲明白[em08]
点评回复

使用道具 举报

 楼主| 发表于 2010-8-6 16:36:34 | 显示全部楼层
还没完呢,搞定后再结不迟!
点评回复

使用道具 举报

发表于 2010-8-6 12:35:17 | 显示全部楼层
怎么没结贴?
点评回复

使用道具 举报

 楼主| 发表于 2010-8-5 18:55:11 | 显示全部楼层
那个项目阁了两天,今天又开始调,出现好好奇怪的现象,只能横屏一部分。而且显示的很奇怪。有望大虾帮忙了。
点评回复

使用道具 举报

 楼主| 发表于 2010-8-5 18:53:15 | 显示全部楼层
我用的是R61509V的屏。原来是进入刷屏模式是1030.
blockwrite里面原理的是:
        SET_LCD_CMD_PARAMETER_IC(0,LCD_CMD,0x0210);
        SET_LCD_CMD_PARAMETER_IC(1,LCD_DATA,startx);
        SET_LCD_CMD_PARAMETER_IC(2,LCD_CMD,0x0211);
        SET_LCD_CMD_PARAMETER_IC(3,LCD_DATA,endx);
        SET_LCD_CMD_PARAMETER_IC(4,LCD_CMD,0x0212);
        SET_LCD_CMD_PARAMETER_IC(5,LCD_DATA,starty);
        SET_LCD_CMD_PARAMETER_IC(6,LCD_CMD,0x0213);
        SET_LCD_CMD_PARAMETER_IC(7,LCD_DATA,endy);
        SET_LCD_CMD_PARAMETER_IC(8,LCD_CMD,0x200);
        SET_LCD_CMD_PARAMETER_IC(9,LCD_DATA,startx);
        SET_LCD_CMD_PARAMETER_IC(10,LCD_CMD,0x201);
        SET_LCD_CMD_PARAMETER_IC(11,LCD_DATA,starty);
点评回复

使用道具 举报

发表于 2010-8-14 14:13:40 | 显示全部楼层
刷三色条试试啊 , 排除屏幕驱动问题,如果没问题 , 就看下 ,上层分辨率对不对,不对的话也是花屏的
点评回复

使用道具 举报

发表于 2010-8-13 15:54:52 | 显示全部楼层
显示一半,应该是坐标没有配置对,高低字节,以及发送时要做个截取的

例如:位置坐标uint16 startx

      发送时可能就是

  SET_LCD_CMD_PARAMETER_IC(0,LCD_CMD,0x0210);    //发送x_position地址
  SET_LCD_CMD_PARAMETER_IC(1,LCD_DATA,startx&0xff00);//high字节
  SET_LCD_CMD_PARAMETER_IC(2,LCD_DATA,startx&0xff);//low字节

  其他类推,如果横屏竖放,就转换坐标关系
点评回复

使用道具 举报

发表于 2010-8-13 13:18:05 | 显示全部楼层
刷屏方向不起作用那可能是别的原因吧
我碰到过厂家给的初始化代码里把16位的屏结果给了个18位的设置
点评回复

使用道具 举报

发表于 2010-8-26 19:02:25 | 显示全部楼层
这个MTK本身已经支持270度旋转,90度旋转一般不符合显示习惯。跟驱动其实没有什么关系。
MMI生成一块数据,把这个数据刷到LCD上去,只要转换一下坐标就好了-mtk gdi刷新时已经调整好了坐标,即将横屏显示的数据转换为竖屏,也就是说跟驱动没啥关系
点评回复

使用道具 举报

发表于 2010-9-17 13:14:52 | 显示全部楼层
呵呵,不是吧,下层驱动接口如果屏掉,不管上层传来的任何数据,lcd都会显示

白屏或花屏,另外,如果寄存器刷新方向设置不对,显示的图片就会乱掉,

底层也可以让lcd灭掉,不工作啊
点评回复

使用道具 举报

发表于 2010-12-29 17:58:49 | 显示全部楼层
不知道 说的是啥!!!
点评回复

使用道具 举报

发表于 2011-8-5 17:54:02 | 显示全部楼层
...........
点评回复

使用道具 举报

发表于 2011-12-22 15:16:41 | 显示全部楼层
不仅要改刷屏方向,还要改刷屏起始点,如果是局部刷屏,必须要重新计算刷屏的起始点和矩形框大小,其实也就是一个坐标变换
点评回复

使用道具 举报

发表于 2012-3-28 11:28:00 | 显示全部楼层
学习学习 好贴 顶起[em01]
点评回复

使用道具 举报

发表于 2012-3-22 15:03:35 | 显示全部楼层
data sheet里有寄存器可以修改刷屏方向的,再修改以下启示位置,就ok了,这个我实现过的
点评回复

使用道具 举报

发表于 2012-4-11 10:28:14 | 显示全部楼层
路过学习了
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2024-12-23 23:09 , Processed in 0.091707 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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