找回密码
 注册
搜索
查看: 1577|回复: 11

[讨论] 那位高手能帮忙解释LCD_BlockWrite_XXX函数部分

[复制链接]
发表于 2010-11-17 11:47:38 | 显示全部楼层 |阅读模式
LCD_BlockWrite_XXX函数部分看不懂呀?那位能帮忙解释一下下面的意思,我是新手,看不懂,先谢谢了!
  SET_LCD_CMD_PARAMETER(0,LCD_CMD,0x002A);
  SET_LCD_CMD_PARAMETER(1,LCD_DATA,((start_x+0x0000) >>8)&0x00FF);
  SET_LCD_CMD_PARAMETER(2,LCD_DATA,(start_x+0x0000)&0x00FF);
  SET_LCD_CMD_PARAMETER(3,LCD_DATA,((end_x+0x0000) >>8)&0x00FF);
  SET_LCD_CMD_PARAMETER(4,LCD_DATA,(end_x+0x0000)&0x00FF);
  SET_LCD_CMD_PARAMETER(5,LCD_CMD,0x002B);
  SET_LCD_CMD_PARAMETER(6,LCD_DATA,((start_y+0x0000) >>8)&0x00FF);
  SET_LCD_CMD_PARAMETER(7,LCD_DATA,(start_y+0x0000)&0x00FF);
  SET_LCD_CMD_PARAMETER(8,LCD_DATA,((end_y+0x0000) >>8)&0x00FF);
  SET_LCD_CMD_PARAMETER(9,LCD_DATA,(end_y+0x0000)&0x00FF);
发表于 2010-11-17 22:48:43 | 显示全部楼层
[em01]。。[em01]。。。
点评回复

使用道具 举报

 楼主| 发表于 2010-11-17 14:19:03 | 显示全部楼层
以下是引用yinda007在2010-11-17 13:31:14的发言:
看LCD芯片接口手册,比如ili9325系列



我好像没有这个,我问问同事,谢谢!
点评回复

使用道具 举报

 楼主| 发表于 2010-11-17 14:17:09 | 显示全部楼层
yilisha,你好,我只能看懂是往两个寄存器中写东西,
SET_LCD_CMD_PARAMETER(1,LCD_DATA,((start_x+0x0000) >>8)&0x00FF);为什
                      么要右移8位并和0x00FF做与运算,及各个参数的意思?
SET_LCD_CMD_PARAMETER(2,LCD_DATA,(start_x+0x0000)&0x00FF);
也有这样的:“SET_LCD_CMD_PARAMETER(1,LCD_DATA,((startx&0xFF)<<8));SET_LCD_CMD_PARAMETER(2,LCD_DATA,(startx&0xFF));”不是太懂
点评回复

使用道具 举报

发表于 2010-11-17 13:31:14 | 显示全部楼层
看LCD芯片接口手册,比如ili9325系列
点评回复

使用道具 举报

发表于 2010-11-17 13:30:58 | 显示全部楼层
你就认为把一些设置写进寄存器就可以了。

寄存器吃进了这些数据,就知道该干什么了。

这些无非就是设置屏幕起始位置和结束为止等等。
点评回复

使用道具 举报

发表于 2010-11-24 12:56:26 | 显示全部楼层
有些屏的接口有16位数据线,但只用其中8位。有些屏IC支持16位中的高8位,有些支持低8位。所以右移时低8位,左移时高8位。(start_x+0x0000)可能是为了让变量start_x强制为16位的数据。但是这种写法有没有用就不清楚了,我也没见过这样写的。
点评回复

使用道具 举报

 楼主| 发表于 2010-11-24 11:48:49 | 显示全部楼层
为什么一会有时左移,有时右移,start_x+0x0000又是什么意思呢?
点评回复

使用道具 举报

发表于 2010-11-22 13:46:33 | 显示全部楼层
SET_LCD_CMD_PARAMETER(1,LCD_DATA,((start_x+0x0000) >>8)&0x00FF);为什
                      么要右移8位并和0x00FF做与运算,及各个参数的意思?
SET_LCD_CMD_PARAMETER(2,LCD_DATA,(start_x+0x0000)&0x00FF);

这是8位接口的LCD屏。所以要将16位的数据分两次传送。
点评回复

使用道具 举报

发表于 2011-8-16 20:45:11 | 显示全部楼层
菜鸟飘过,同问,这块原理不是很懂,不知道如何通过规格书去写:
虽然知道是把坐标值写入寄存器,但是对比了下几个屏的,有的是startx、endx分别传入0x0036、ox0037

                        SET_LCD_CMD_PARAMETER(0,LCD_CMD,((0x0036&0xFF00)<<2)|((0x0036&0xFF)<<1));
                        SET_LCD_CMD_PARAMETER(1,LCD_DATA,((endx&0xFF00)<<2)|((endx&0xFF)<<1));
                        SET_LCD_CMD_PARAMETER(2,LCD_CMD,((0x0037&0xFF00)<<2)|((0x0037&0xFF)<<1));
                        SET_LCD_CMD_PARAMETER(3,LCD_DATA,((startx&0xFF00)<<2)|((startx&0xFF)<<1));

有的是:startx、endx都传入0x002A
SET_LCD_CMD_PARAMETER(0,LCD_CMD,0x002A);
  SET_LCD_CMD_PARAMETER(1,LCD_DATA,((start_x+0x0000) >>8)&0x00FF);
  SET_LCD_CMD_PARAMETER(2,LCD_DATA,(start_x+0x0000)&0x00FF);
  SET_LCD_CMD_PARAMETER(3,LCD_DATA,((end_x+0x0000) >>8)&0x00FF);
  SET_LCD_CMD_PARAMETER(4,LCD_DATA,(end_x+0x0000)&0x00FF);、

在规格书哪里可以看到这些差异呢
还有我一直疑惑,0x002a似乎是规格书里面描述的一条命令,怎么会是寄存器呢...
点评回复

使用道具 举报

发表于 2011-9-5 15:14:01 | 显示全部楼层
实在忍不住发一下,非常理解新手的苦衷。
这个函数是上层调用到驱动的刷屏接口,具体要写哪一些寄存器,要看具体使用的LCD IC的资料了,会因为IC不一样,具体的寄存器也会有差异,不过原理是一样的。
这个函数的参数有四个,是上层传下来用来说明要刷新的矩形区域坐标:startx,starty,endx,endy。也就是GRAM中的坐标。我们要做的就是把GRAM的区域指定好,从IC的dtasheet中查到Set_column_address,Set_page_address(这个不一定的,ILI喜欢这个名字,瑞萨好像是叫做其他的名字,搞不清楚问FAE)就是分别对应x和y的起始结束位置(SC,EC,SP,EP),看看就明白为什么要写这么多次或者为什么要移位了,这完全取决于使用哪一颗IC。设置好了之后,要把IC切换到GRAM模式,因为后面紧跟着要刷屏了,不要指望别人替你做着事,Write Data to GRAM,set cmd即可!好像很多是0x22。还有就是鬼子和棒子的IC寄存器名字差异更大,实在不行就找FAE。
不知道说清楚没...
点评回复

使用道具 举报

发表于 2011-9-4 23:35:20 | 显示全部楼层
等待各位高手解答
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

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

GMT+8, 2024-12-26 08:47 , Processed in 0.080905 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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