一般写资料到GRAM中, 通常会用这两种方式.....
一是原子用的方式, 用逐一画点方式, 好处是可以不用管LCD扫瞄方向, 可以通用, 缺点就是牺牲点速度.
而且可以容易做到只画上字模部份, 背景色不处理. 就像底下这两段代码:
if(temp&0x01)POINT_COLOR=colortemp;
else POINT_COLOR=BACK_COLOR;
LCD_DrawPoint(x,y);
temp>>=1;
x++;
if(temp&0x01)LCD_DrawPoint(x+t,y+pos);//畫一個點
temp>>=1;
另一种是通过GRAM显示窗口对应, 可以大幅提升速度. 但如果碰到想保留背景色, 会有问题, 不知道如何克服 ?
if (USE_HORIZONTAL==1) // 按螢幕預設方向調整寫入窗口設置
{
Lcd_SetRegion(y, (LCD_W-8)-x, y+16, (LCD_W-8)-x+7 ); // 設定顯示視窗框對應
}
else
Lcd_SetRegion(x,y,x+7,y+16); // 設定顯示視窗框對應
LCD_WriteRAM_Prepare(); // 寫入GRAM命令
for(i=0;i<16;i++)
{
for (j=0;j<8;j++)
{
if( asc2_1608[k]&(1<<j)) LCD_WriteRAM(fc); // 寫入前景顏色
else
{
if (fc!=bc) LCD_WriteRAM(bc); // 寫入背景顏色值
}
}
}
我的问题是, 当设了窗口对应, 连续写入GRAM的方式, 如果碰到我不想写的背景色, 该怎么跳过 ???
目前我理解的是, 窗口对应, 只有写入颜色值到GRAM后, 地址才会自动+1或-1 . 但LCD并没有"透明色"
这种颜色码, 从0x0000-0xffff (16bit颜色时) , 全都有颜色.
是不是有什么记存器, 当你不想在这个gram当前对应地址写颜色值时, 可以对它做控制, 同时也可以让
GRAM地址自动+1或-1 . 这样才能达到不变动变景色的目的. 同时能兼顾显示速度 . 求教了 !
|