搜索
bottom↓
回复: 30

遇到个问题,搞过ILI9320的进来讨论一下

[复制链接]

出0入0汤圆

发表于 2008-6-5 09:46:57 | 显示全部楼层 |阅读模式
最近用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();
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出50入0汤圆

发表于 2008-6-6 20:45:01 | 显示全部楼层
ILI9320没有这个指令
我调这个时发现, 扫描方式改成从左到右,从下到上(BMP格式),显示图片的时候会出问题,本来是屏幕的最下面的几行数据会显示在最上面,当扫描方式改成从左到右,从上到下时就能正常显示了,不知道大家有没有遇到过这个问题呢?

出0入0汤圆

发表于 2008-6-12 23:40:58 | 显示全部楼层
可以这样解决的,取字模1时写入CharColor 取字模0的时候读取显示ram(读取的数据扔掉,由于读取的时候指针地址也是加一的,也就实现了不改变原数据的效果),然后继续下一点,呵呵!!!!!!!!!!!

出0入0汤圆

 楼主| 发表于 2008-6-16 11:15:03 | 显示全部楼层
syij 逸洁 谢谢了   好办法

出0入0汤圆

发表于 2008-8-15 09:14:17 | 显示全部楼层
小弟也刚刚一个ILI9320驱动的2.8寸的液晶,能否发一个驱动的例程啊,我实在不知道从那里入手

出0入0汤圆

 楼主| 发表于 2008-8-15 09:18:01 | 显示全部楼层
我发过ILI9320驱动了,你自己搜

出0入0汤圆

发表于 2009-3-28 10:42:47 | 显示全部楼层
问一下,LZ试过通过读取GRAM使地址加一的方法实现透明写功能了吗?
我测试时,发现读取GRAM后它的地址没有自动加一,不知是哪里的问题,还望赐教。

出0入0汤圆

发表于 2009-3-28 11:12:45 | 显示全部楼层
要是用写一点的方式来写汉字就不会出现你的问题。你先写一个在屏幕上画点的函数。然后你写汉字的每一个点的时候就用这个画点的函数来写。碰到0只要让地址加一而不执行动做就可以了。

出0入0汤圆

发表于 2009-3-28 11:27:34 | 显示全部楼层
楼上的方法每写一个点都需要定位XY坐标,那样效率还是不高吧。

出0入0汤圆

发表于 2009-3-28 13:11:29 | 显示全部楼层
顶一下,ILI9320的GRAM在连续读的情况下,内部地址会不会自动加1呢?

出0入0汤圆

发表于 2009-8-11 08:05:15 | 显示全部楼层
学习了!!!

出0入0汤圆

发表于 2010-5-14 01:27:15 | 显示全部楼层
Mark

出0入0汤圆

发表于 2010-7-4 03:45:48 | 显示全部楼层
Mark

出0入0汤圆

发表于 2010-7-4 03:50:49 | 显示全部楼层
通常“镂空的点”比“字的点”要多得多,就算能用GetPointerColor()来移动GRAM指针,也不如每个“字的点”SetXY()快。。。
不知我说得对不对,大家讨论下

出0入0汤圆

发表于 2010-7-4 10:59:28 | 显示全部楼层
学习

出0入0汤圆

发表于 2010-8-24 10:51:56 | 显示全部楼层
回复【6楼】colaring 十月天高人浮躁
-----------------------------------------------------------------------

貌似我的实践结果也是读取数据时指针没有加1;那位高人还有高招

出0入0汤圆

发表于 2010-11-8 22:55:57 | 显示全部楼层
回复【1楼】cddyy  
-----------------------------------------------------------------------

这个问题我也碰到了,从左到右,从下到上时,设定区域里的第一行会显示在最下面一行,当从左到右,从上到下时是正常的,疑惑中.

出0入0汤圆

发表于 2010-11-8 23:18:53 | 显示全部楼层
回复【2楼】syij  逸洁
-----------------------------------------------------------------------

回复【7楼】shdzbsl  
-----------------------------------------------------------------------

回复【10楼】shdzbsl  
-----------------------------------------------------------------------

回复【16楼】ql8261956  
-----------------------------------------------------------------------

读的时候AC是不会自动加一的,只有写的时候才会,ILI9320的透明写也困扰了我很久,现在还没有找到一个高效率的方法,我的文字背景是一张图片,所以一楼的方法也不适用.

ILI9320文档截图 (原文件名:QQ截图未命名.JPG)

出0入0汤圆

发表于 2010-11-15 15:02:49 | 显示全部楼层
我也遇到了相同了的问题,
如果不事先 设定一个窗口的话,那样显示效率很低,每个点都得重新给坐标

出0入0汤圆

发表于 2011-1-12 15:41:47 | 显示全部楼层
可以的我试过,你把函数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.

出100入0汤圆

发表于 2011-5-10 10:48:30 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-6-23 15:04:40 | 显示全部楼层
标记一下

出0入0汤圆

发表于 2011-9-6 16:43:20 | 显示全部楼层
把透明部分读出来,又写回去AC就+1了。

出0入0汤圆

发表于 2011-12-19 14:30:32 | 显示全部楼层
MARK ,关注中

出0入0汤圆

发表于 2012-1-10 10:30:53 | 显示全部楼层
MARK,正开始学习

出0入0汤圆

发表于 2013-2-3 09:47:59 | 显示全部楼层
billgates 发表于 2010-7-4 03:50
通常“镂空的点”比“字的点”要多得多,就算能用GetPointerColor()来移动GRAM指针,也不如每个“字的点”S ...

很有道理,这个方法值得借鉴

出0入0汤圆

发表于 2013-2-3 09:51:03 | 显示全部楼层
写块,这样快点

出0入0汤圆

发表于 2013-2-4 21:36:48 | 显示全部楼层
不会  左丘绑定

出0入0汤圆

发表于 2013-4-14 14:39:34 | 显示全部楼层
读出来,再把读出的点写回去就实现了AC加一

出0入0汤圆

发表于 2014-7-18 17:39:11 | 显示全部楼层
学习中,
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-25 21:19

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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