OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 9969|回复: 8

2.8(ILI9320)TFT彩屏显示

[复制链接]

39

主题

156

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
417
金钱
417
注册时间
2012-12-23
在线时间
19 小时
发表于 2013-1-11 11:08:46 | 显示全部楼层 |阅读模式
原子哥  请赐教下面的问题啊   谢谢了 

void LCD_ShowChar(u16 x,u16 y,u8 num,u8 size,u8 mode)

#if USE_HORIZONTAL==1    //横屏模式 
#define MAX_CHAR_POSX 312   
#define MAX_CHAR_POSY 232
#else           //竖屏模式
#define MAX_CHAR_POSX 232
#define MAX_CHAR_POSY 312
#endif
    u8 temp;
    u8 pos,t;
 u16 x0=x;
 u16 colortemp=POINT_COLOR;       
 if(x>MAX_CHAR_POSX||y>MAX_CHAR_POSY)return;    
 //设置窗口    
 num=num-' ';//得到偏移后的值
 if(!mode) //非叠加方式
 {
  for(pos=0;pos<size;pos++)
  {
   if(size==12)temp=asc2_1206[num][pos];//调用1206字体
   else temp=asc2_1608[num][pos];   //调用1608字体
   for(t=0;t<size/2;t++)
      {                
          if(temp&0x01)POINT_COLOR=colortemp;
    ???这句话应该怎样理解呢??为什么要去检测temp的bit0位呢
     //POINT_COLOR=colortemp;为什么又要执行这句呢???
    else POINT_COLOR=BACK_COLOR;
    LCD_DrawPoint(x,y); 
    temp>>=1;
    x++;
      }
   x=x0;
   y++;
  } 
 }else//叠加方式
 {
  for(pos=0;pos<size;pos++)
  {
   if(size==12)temp=asc2_1206[num][pos];//调用1206字体
   else temp=asc2_1608[num][pos];   //调用1608字体
   for(t=0;t<size/2;t++)
      {                
          if(temp&0x01)LCD_DrawPoint(x+t,y+pos);//画一个点    
          temp>>=1;
      }
  }
 }
 OINT_COLOR=colortemp;             
}  
问题描述都在红色字体的后面
还有一个问题就是 叠加模式和非叠加模式有什么区别呢???

天道酬勤
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

39

主题

156

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
417
金钱
417
注册时间
2012-12-23
在线时间
19 小时
 楼主| 发表于 2013-1-11 13:59:07 | 显示全部楼层
回复【楼主位】xly0907:
---------------------------------
各位高手赶紧帮忙解决下啊。。。感激不尽
天道酬勤
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-1-11 15:14:49 | 显示全部楼层
这个好理解吧?
叠加显示,就是指在原有的基础上写字,就好比你在本子上正常的写字,这种属于叠加显示。
非叠加,就是先把你要写的地方的擦干净,然后再写字,就好比你在本子上涂改写过的地方一样,要先擦除,再写。

上面的代码,其实就是切换画笔颜色,在该写字的地方设置为画笔颜色,不该写出来的地方,设置为背景色。这就是非叠加显示的具体实现了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

10

主题

86

帖子

2

精华

中级会员

Rank: 3Rank: 3

积分
491
金钱
491
注册时间
2012-2-11
在线时间
8 小时
发表于 2013-1-11 15:50:08 | 显示全部楼层
回复【楼主位】xly0907:
---------------------------------

因为我们是开窗口写数据,设置一个窗口,然后设置开始位地址,然后写数据,而地址自动加一;
又因为我们字符取模取的就是一些点的数据(0和1),
所以要画字符,无非将字符的对应的0和1扫描出来;
所以先扫描数据的第一位是否为1,是——就画笔颜色,否——就画背景颜色
看我的程序:


/**********************************************************
* 函数名称:LCD_ShowChar
* 函数功能:在指定位置显示一个字符
*           入口参数:  x: 0~234
*     y: 0~308
*    num: 要显示的字符:" "--->"~"
*     size: 字体大小 12/16
*     mode: 叠加方式(1)还是非叠加方式(0)
*                      c: 字体颜色
* 出口参数:无 
***********************************************************/

void LCD_ShowChar(u8 x,u16 y,u8 num,u8 size,u8 mode, u16 c )
{       
#define MAX_CHAR_POSX 232
#define MAX_CHAR_POSY 304 
    u8 temp;
    u8 pos,t;      
    if(x>MAX_CHAR_POSX||y>MAX_CHAR_POSY)return;     
//设置窗口
LCD_WriteREG(R80,x);           //水平方向GRAM起始地址
LCD_WriteREG(R81,x+(size/2-1));//水平方向GRAM结束地址
LCD_WriteREG(R82,y);           //垂直方向GRAM起始地址
LCD_WriteREG(R83,y+size-1);    //垂直方向GRAM结束地址
LCD_SetCursor(x,y);            //设置光标位置  
LCD_WriteCom( R34 );           //开始写入GRAM    
num=num-' ';//得到偏移后的值
if(!mode) //非叠加方式
{
for(pos=0;pos<size;pos++)
{
if(size==12)temp=asc2_1206[num][pos];//调用1206字体
else temp=asc2_1608[num][pos];  //调用1608字体
for(t=0;t<size/2;t++)
    {                 
        if(temp&0x01)
{
LCD_WriteData( c );
}else LCD_WriteData(BACK_COLOR);         
        temp>>=1; 
    }
}
}else//叠加方式  叠加方式显示多用于在显示的图片上再显示字符
{
for(pos=0;pos<size;pos++)
{
if(size==12)temp=asc2_1206[num][pos];//调用1206字体
else temp=asc2_1608[num][pos];  //调用1608字体
for(t=0;t<size/2;t++)
    {                 
        if(temp&0x01)LCD_DrawPoint(x+t,y+pos,c);//画一个点     
        temp>>=1; 
    }
}
}     
//恢复窗体大小  
LCD_WriteREG(R80, 0x0000); //水平方向GRAM起始地址
LCD_WriteREG(R81, 0x00EF); //水平方向GRAM结束地址
LCD_WriteREG(R82, 0x0000); //垂直方向GRAM起始地址
LCD_WriteREG(R83, 0x013F); //垂直方向GRAM结束地址
}



希望对你有帮助~~
多努力一点点,少遗憾一点点!!!
回复 支持 反对

使用道具 举报

39

主题

156

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
417
金钱
417
注册时间
2012-12-23
在线时间
19 小时
 楼主| 发表于 2013-1-11 16:19:38 | 显示全部楼层
回复【4楼】JZHG1992:
---------------------------------
哎呀,非常感谢!!!现在终于搞明白了
天道酬勤
回复 支持 反对

使用道具 举报

86

主题

984

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1850
金钱
1850
注册时间
2013-4-15
在线时间
163 小时
发表于 2014-5-26 17:12:14 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
为什么我修改了横屏显示的那个参数还是无法横屏显示呢
合肥-文盲
回复 支持 反对

使用道具 举报

8

主题

222

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
275
金钱
275
注册时间
2013-11-21
在线时间
0 小时
发表于 2014-5-26 17:49:42 | 显示全部楼层
回复【6楼】合肥-文盲:
---------------------------------
没有吧,LCD_Display_Dir(1);把形参改成1就是横屏了啊
回复 支持 反对

使用道具 举报

86

主题

984

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1850
金钱
1850
注册时间
2013-4-15
在线时间
163 小时
发表于 2014-5-27 10:32:30 | 显示全部楼层
回复【7楼】西门吹雪:
---------------------------------
谢谢  可以啦
合肥-文盲
回复 支持 反对

使用道具 举报

69

主题

173

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
469
金钱
469
注册时间
2014-6-21
在线时间
0 小时
发表于 2014-8-17 17:28:17 | 显示全部楼层
回复【5楼】xly0907:
---------------------------------
红色标注的部分明白点,就是此位是1的话,是一个颜色,此位是0的话是另一个颜色的意思。他这样编程也太绕了吧?你感觉我理解的对不得?你怎么理解他的意思的?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-4 11:41

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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