打印

44b0lcd的驱动程序中的疑问

[复制链接]
1548|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dadong|  楼主 | 2008-6-27 12:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这是在《嵌入式系统开发与应用实验教程》上的一段程序,是44b0驱动320240的程序,

/******************************************************
LCD_PutPixel(x,y,c)--把像素发送到显示数据缓存区


**************************************************/
#define LCD_PutPixel(x,y,c)   
(*(INT32U *)(LCD_VIRTUAL_BUFFER+(y)*SCR_XSIZE/2+((x))/8*4))= 

(*(INT32U *)(LCD_VIRTUAL_BUFFER+(y)*SCR_XSIZE/2+((x))/8*4)) & 
(~(0xf0000000>>((( (x) )%8)*4)))|((c)<< (7- ((x))%8)*4)


用的是4位单扫描
我不明白的地方在(LCD_VIRTUAL_BUFFER+(y)*SCR_XSIZE/2+((x))/8*4))
这里(y)*SCR_XSIZE/2+((x))/8*4这里的除以2 和后面的除以8是不是为了将显示的位置改为缓存中的地址?
那么,在图里的VD3是不是包含了四行像素?(我不知道该怎么说,我用过12232,这里是不是像12232那样,VD3包含四行,一列,这四行一列用一个16进制数表示),那么,如果是这样的话,在调用这个函数时,x是不是只能是偶数?

相关帖子

沙发
dadong|  楼主 | 2008-6-27 16:22 | 只看该作者

D

D

使用特权

评论回复
板凳
Again_gyf| | 2008-6-27 16:25 | 只看该作者

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

VD3 VD2。。。各代表一个BIT,注意是高位在前,而你显存里的数据呢是低位在前的!

使用特权

评论回复
地板
dadong|  楼主 | 2008-6-27 16:32 | 只看该作者

re楼上

那+((x))/8*4))是怎么回事啊,如果我想让在第一行最后一个bit显示,那么只要用+(319-(x)),为什么要/8*4?

使用特权

评论回复
5
xwj| | 2008-6-27 16:48 | 只看该作者

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

x/8*4是为了得到整数地址

使用特权

评论回复
6
dadong|  楼主 | 2008-6-27 23:40 | 只看该作者

re楼上

这么说x就是像素的号码呗?每个地址有32bit,可以装8个像素,如果我想让第9个像素点亮,那么对应的地址是0004,如果我想让第7个像素点亮,地址就是0000,对不对?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

40

主题

173

帖子

0

粉丝