44b0lcd的驱动程序中的疑问

[复制链接]
2457|5
 楼主| dadong 发表于 2008-6-27 12:36 | 显示全部楼层 |阅读模式
这是在《嵌入式系统开发与应用实验教程》上的一段程序,是44b0驱动320240的程序,<br /><br />/******************************************************<br />LCD_PutPixel(x,y,c)--把像素发送到显示数据缓存区<br /><br /><br />**************************************************/<br />#define&nbsp;LCD_PutPixel(x,y,c)&nbsp;&nbsp;&nbsp;<br />(*(INT32U&nbsp;*)(LCD_VIRTUAL_BUFFER+(y)*SCR_XSIZE/2+((x))/8*4))=&nbsp;<br /><br />(*(INT32U&nbsp;*)(LCD_VIRTUAL_BUFFER+(y)*SCR_XSIZE/2+((x))/8*4))&nbsp;&&nbsp;<br />(~(0xf0000000&gt&gt(((&nbsp;(x)&nbsp;)%8)*4)))|((c)&lt&lt&nbsp;(7-&nbsp;((x))%8)*4)<br /><br /><br />用的是4位单扫描<br />我不明白的地方在(LCD_VIRTUAL_BUFFER+(y)*SCR_XSIZE/2+((x))/8*4))<br />这里(y)*SCR_XSIZE/2+((x))/8*4这里的除以2&nbsp;和后面的除以8是不是为了将显示的位置改为缓存中的地址?<br />那么,在图里的VD3是不是包含了四行像素?(我不知道该怎么说,我用过12232,这里是不是像12232那样,VD3包含四行,一列,这四行一列用一个16进制数表示),那么,如果是这样的话,在调用这个函数时,x是不是只能是偶数?<br /><br />
 楼主| dadong 发表于 2008-6-27 16:22 | 显示全部楼层
Again_gyf 发表于 2008-6-27 16:25 | 显示全部楼层

很简单的事情怎么被你看成这样!

VD3&nbsp;VD2。。。各代表一个BIT,注意是高位在前,而你显存里的数据呢是低位在前的!
 楼主| dadong 发表于 2008-6-27 16:32 | 显示全部楼层

re楼上

那+((x))/8*4))是怎么回事啊,如果我想让在第一行最后一个bit显示,那么只要用+(319-(x)),为什么要/8*4?
xwj 发表于 2008-6-27 16:48 | 显示全部楼层

笨! 每个像素要4bit,每个字节里面是2个点

x/8*4是为了得到整数地址
 楼主| dadong 发表于 2008-6-27 23:40 | 显示全部楼层

re楼上

这么说x就是像素的号码呗?每个地址有32bit,可以装8个像素,如果我想让第9个像素点亮,那么对应的地址是0004,如果我想让第7个像素点亮,地址就是0000,对不对?<br />
您需要登录后才可以回帖 登录 | 注册

本版积分规则

40

主题

173

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部