遇到个问题,搞过ILI9320的进来讨论一下
最近用ILI9320的TFT液晶时突发奇想,想在刷中文和ASCII时来个“透明写”功能,具体就是从中文或ASCII码库中取来编码时,普通程序对应编码1时将液晶的这一像素涂上CharColor(字符颜色),编码0涂上BackColor(背景颜色),而我想弄的这个程序是1涂上CharColor而0时不改变背景,这样做菜单就省力多了并且还能节省系统资源,但是PDF东找西找还是没搞明白怎么能简便的让液晶的AC自增1(发一堆命令改AC就算了,这我也想过,实在不行也就只能这样了,但是估计效率不怎么高啊)我的意思就是希望能能很简单的使AC跳过指定点,现在写中文和ASCII的方法是一位一位判断字符代码,是1的写入CharColor是0的写入BackColor
这是我LCD写中文的底层程序,总感觉效率不高,有经验的请指点一下,谢谢了
/****************************************************************
函数名:Lcd写1个中文函数
入口参数:x,横向坐标,由左到右分别是0~15
y,纵向坐标,由上到下分别为0~19
CharColaor,字符的颜色
CharBackColor,字符背景颜色
ASCIICode,相应中文的编码
也就是说,320240分辨率的显示屏,横向能显示15中文字符,竖向能显示20行
返回值:无
*****************************************************************/
void Lcd_WriteChinese(u8 x,u8 y,u16 CharColor,u16 CharBackColor,u16 ChineseCode)
{
u8 ByteCounter,BitCounter,*ChinesePointer;
Lcd_Set16X16ChineseArea(x,y);
Lcd_WR_Start();
CatchChinese(ChineseCode,0);//一个去SPI FLASH取字模并将32byte字模存储到数组ChineseBuffer,另外那个0是字库的地址偏移
ChinesePointer=ChineseBuffer;//Chinese;
for(ByteCounter=0;ByteCounter<32;ByteCounter++)
{
for(BitCounter=0;BitCounter<8;BitCounter++)
{
if((*ChinesePointer & (0x80 >> BitCounter)) == 0x00)
{
Lcd_Rs_H();
Lcd_Write(CharBackColor);
Lcd_Wr_L();
Lcd_Wr_H();
}
else
{
Lcd_Rs_H();
Lcd_Write(CharColor);
Lcd_Wr_L();
Lcd_Wr_H();
}
}
ChinesePointer++;
}
Lcd_WR_End();
} ILI9320没有这个指令
我调这个时发现, 扫描方式改成从左到右,从下到上(BMP格式),显示图片的时候会出问题,本来是屏幕的最下面的几行数据会显示在最上面,当扫描方式改成从左到右,从上到下时就能正常显示了,不知道大家有没有遇到过这个问题呢? 可以这样解决的,取字模1时写入CharColor 取字模0的时候读取显示ram(读取的数据扔掉,由于读取的时候指针地址也是加一的,也就实现了不改变原数据的效果),然后继续下一点,呵呵!!!!!!!!!!! syij 逸洁 谢谢了 好办法 小弟也刚刚一个ILI9320驱动的2.8寸的液晶,能否发一个驱动的例程啊,我实在不知道从那里入手 我发过ILI9320驱动了,你自己搜 问一下,LZ试过通过读取GRAM使地址加一的方法实现透明写功能了吗?
我测试时,发现读取GRAM后它的地址没有自动加一,不知是哪里的问题,还望赐教。 要是用写一点的方式来写汉字就不会出现你的问题。你先写一个在屏幕上画点的函数。然后你写汉字的每一个点的时候就用这个画点的函数来写。碰到0只要让地址加一而不执行动做就可以了。 楼上的方法每写一个点都需要定位XY坐标,那样效率还是不高吧。 顶一下,ILI9320的GRAM在连续读的情况下,内部地址会不会自动加1呢? 学习了!!! Mark Mark 通常“镂空的点”比“字的点”要多得多,就算能用GetPointerColor()来移动GRAM指针,也不如每个“字的点”SetXY()快。。。
不知我说得对不对,大家讨论下 学习 回复【6楼】colaring 十月天高人浮躁
-----------------------------------------------------------------------
貌似我的实践结果也是读取数据时指针没有加1;那位高人还有高招 回复【1楼】cddyy
-----------------------------------------------------------------------
这个问题我也碰到了,从左到右,从下到上时,设定区域里的第一行会显示在最下面一行,当从左到右,从上到下时是正常的,疑惑中. 回复【2楼】syij逸洁
-----------------------------------------------------------------------
回复【7楼】shdzbsl
-----------------------------------------------------------------------
回复【10楼】shdzbsl
-----------------------------------------------------------------------
回复【16楼】ql8261956
-----------------------------------------------------------------------
读的时候AC是不会自动加一的,只有写的时候才会,ILI9320的透明写也困扰了我很久,现在还没有找到一个高效率的方法,我的文字背景是一张图片,所以一楼的方法也不适用.
http://cache.amobbs.com/bbs_upload782111/files_34/ourdev_596294B7R6XA.JPG
ILI9320文档截图 (原文件名:QQ截图未命名.JPG) 我也遇到了相同了的问题,
如果不事先 设定一个窗口的话,那样显示效率很低,每个点都得重新给坐标 可以的我试过,你把函数ili9320_PutChar的一部分注释掉就行了
void ili9320_PutChar(u16 x, u16 y, u8 c, u16 charColor, u16 bkColor)
{
u16 i = 0;
u16 j = 0;
u8 tmp_char = 0;
for (i = 0; i < 16; i++)
{
tmp_char=ascii_8x16[((c - 0x20) * 16) + i];
for (j = 0; j < 8; j++)
{
if ( (tmp_char >> 7-j) & 0x01 == 0x01)
{
ili9320_SetPoint(x+j,y+i,charColor); // 字符颜色
}//end if
//else
//{
// ili9320_SetPoint(x+j,y+i,bkColor); // 背景颜色
//}//end else
}//end for
}//end for
}//end func. mark 标记一下 把透明部分读出来,又写回去AC就+1了。 MARK ,关注中 MARK,正开始学习 billgates 发表于 2010-7-4 03:50 static/image/common/back.gif
通常“镂空的点”比“字的点”要多得多,就算能用GetPointerColor()来移动GRAM指针,也不如每个“字的点”S ...
很有道理,这个方法值得借鉴 写块,这样快点 不会左丘绑定 读出来,再把读出的点写回去就实现了AC加一 学习中,{:lol:}
页:
[1]