找回密码
 注册
搜索
查看: 2385|回复: 15

[讨论] 有段MTK平台手机中的LCD驱动代码,大家帮我看看

[复制链接]
发表于 2007-2-28 15:59:07 | 显示全部楼层 |阅读模式
void powersetting(void)
{
Init_Write_CmdData(0x0000,0x0001);
delayms(10);
Init_Write_CmdData(0x0011,0x0000);
Init_Write_CmdData(0x0012,0x0003);
delayms(5);
Init_Write_CmdData(0x0013,0x1514);
delayms(5);
Init_Write_CmdData(0x0010,0x4140);
delayms(10);
Init_Write_CmdData(0x0012,0x0018);
delayms(10);
Init_Write_CmdData(0x0013,0x3513);
delayms(40);
}
Init_Write_CmdData函数原形是
void Init_Write_CmdData(kal_unit CMD,kal_uint16 Data)
{
LCD_Ctrwrite_Hx8309(CMD);
LCD_Delay(10);
LCD_DataWrite_HX8309(Data);
}
这段代码是公司给我门看的MTK平台下的一个LCD驱动中的一部分,谁能告诉我这段代码是什么意思啊?HX8309应该是显示屏用的控制芯片。
还有个问题,要怎么样才能点亮个一个显示屏啊?
 楼主| 发表于 2007-2-28 16:00:49 | 显示全部楼层
函数中的这些16进制数到底是什么意思啊,为什么要这么写呢?
点评回复

使用道具 举报

发表于 2007-2-28 16:53:15 | 显示全部楼层
是向LCD的寄存器中写命令!具体的要看是什么LCD了!你的应该是HX8309
点评回复

使用道具 举报

发表于 2007-3-1 10:00:13 | 显示全部楼层
如果您想做驱动,你必须要了解cpu。现我简单给你讲下,理解要看你自己的了。
1、mtk是arm cpu架构,所以程序空间,数据空间,IO空间都是统一编址,你的lcd接在cpu上,首先要清楚,lcd被分配在哪个地址区域内。

2、明白了lcd其实是cpu的一个具有地址空间的外设时,就把lcd作为一个具有寻址的设备来操作;

3、要理解lcd的操作原理,目前rgb 接口的lcd通常都只占两个地址,一个是命令地址,一个是数据地址,其状态由lcd的RS脚的高低电平来表示命令或者是数据。

明白上面几个原理后,你对lcd的驱动原理已经理解了。不多说了,剩下的就靠你自己领悟!
点评回复

使用道具 举报

发表于 2007-3-1 15:04:25 | 显示全部楼层
wx5100:
     针对你的问题现在大致给你解释如下:
      有段MTK平台手机中的LCD驱动代码,大家帮我看看
void powersetting(void)      //这个函数应该上电之后的LCD初始化代码
{
Init_Write_CmdData(0x0000,0x0001);  //这个意思就是:向地址为0x0000的寄存器写0x0001
delayms(10);   //延时
Init_Write_CmdData(0x0011,0x0000);//和前面一样
Init_Write_CmdData(0x0012,0x0003);
delayms(5);
Init_Write_CmdData(0x0013,0x1514);
delayms(5);
Init_Write_CmdData(0x0010,0x4140);
delayms(10);
Init_Write_CmdData(0x0012,0x0018);
delayms(10);
Init_Write_CmdData(0x0013,0x3513);
delayms(40);
}
Init_Write_CmdData函数原形是
void Init_Write_CmdData(kal_unit CMD,kal_uint16 Data)///子函数
{
LCD_Ctrwrite_Hx8309(CMD);//第一个送命令
LCD_Delay(10);   //延时
LCD_DataWrite_HX8309(Data);//第二个送数据
}

至于如何点亮一个显示屏,需要硬件的支持(包括背光等),
软件程序支持。这个问题我都不知道怎么回答了。呵呵

如果有点屏方面的问题,我们可以一起探讨一下。
MSN:wangxiaohui0601@hotmail.com
点评回复

使用道具 举报

发表于 2007-3-15 12:21:50 | 显示全部楼层
一点建议:在Init_Write_CmdData函数中,写地址和数据间不要加delay.
点评回复

使用道具 举报

发表于 2007-3-17 13:15:02 | 显示全部楼层
虽然我是做硬件的 。
但是这个我也知道
Init_Write_CmdData(0x0000,0x0001);是对LCD的寄存器进行写值
前面0x0000是寄存器的地址,后面0x0001是寄存器的值


相信看完下面这段类似代码
你能够更深刻了解下
#define DISP_CMD_OUT(cmd) OUTPORT(DISP_INDEX_PORT, cmd)
#define DISP_DATA_OUT(data) OUTPORT(DISP_INDEX_PORT+0x20000, data)
#define DISP_DATA_IN() INPORT(DISP_INDEX_PORT+0x20000)

#define DISP_WRITE_OUT(addr, data)        DISP_CMD_OUT(addr);        DISP_DATA_OUT((data)<<16 | (data));
//其中DISP_INDEX_PORT为命令端口,RS为0
        DISP_INDEX_PORT+0x20000为数据端口,RS为1
点评回复

使用道具 举报

发表于 2007-3-23 11:09:10 | 显示全部楼层
老兄,多看点datasheet,查到相应的寄存器,在你的代码上标上注释,这样下次再看的时候就容易多了,找bug快。
点评回复

使用道具 举报

发表于 2007-4-11 10:56:11 | 显示全部楼层
各位有没有对屏的显示效果研究过的,而不在于仅仅把屏调通。希望大家一起讨论,我的邮箱是:
cloudzw@126.com
点评回复

使用道具 举报

发表于 2007-4-11 16:01:24 | 显示全部楼层
1。看有没有背光。就算驱动程序不正确,开机后背光也应该要亮。如果背光都没有的话,先熟悉一下电路吧(惨痛教训~~)。
2。看驱动IC的DataSheet了。
点评回复

使用道具 举报

发表于 2007-4-23 10:31:54 | 显示全部楼层
edison8326老兄说得有道理,我就遇到过因为加了延时出的问题
点评回复

使用道具 举报

发表于 2007-4-25 09:04:28 | 显示全部楼层
多看看datasheet,包括屏的poweron,init,displayon,sleepin/out等,看好一个屏的datasheet,调试其他的都会是轻车熟路。
点评回复

使用道具 举报

发表于 2009-1-27 18:50:21 | 显示全部楼层
好贴子,我坚决顶,现在也支持
点评回复

使用道具 举报

发表于 2009-2-7 22:05:16 | 显示全部楼层
好贴子,坚决顶、好贴子,坚决顶
点评回复

使用道具 举报

发表于 2009-2-13 15:49:20 | 显示全部楼层
想学 本文来自:我爱研发网(52RD.com) 详细出处:http://www.52rd.com/bbs/Post.asp?action=re&BoardID=48&ID=81479&star=5&page=1
点评回复

使用道具 举报

发表于 2009-4-6 09:21:02 | 显示全部楼层
那位知道怎样给LCD换驱动
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

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

GMT+8, 2024-11-16 01:54 , Processed in 0.048995 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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