STM32
直播中

黄敏

8年用户 173经验值
私信 关注
[问答]

请问LCD屏显示中文的原理是什么?

看过了发烧友的TFTLCD源程序 请问这个显示中文的原理是什么 R80是什么?
还有就是为什么会去ascii码里去找中文呢?
if(size==12)temp=asc2_1206[num][pos];//调用1206字体
   else temp=asc2_1608[num][pos];   //调用1608字体

谢谢了
//在指定位置显示一个字符
//x:0~234
//y:0~308
//num:要显示的字符:" "--->"~"
//size:字体大小 12/16
//mode:叠加方式(1)还是非叠加方式(0)
void LCD_ShowChar(u8 x,u16 y,u8 num,u8 size,u8 mode)
{      
#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_WriteRAM_Prepare();        //开始写入GRAM   
num=num-' ';//得到偏移后的值
if(!mode) //非叠加方式
  {
  for(pos=0;pos    {
   if(size==12)temp=asc2_1206[num][pos];//调用1206字体
   else temp=asc2_1608[num][pos];   //调用1608字体
   for(t=0;t     {                 
    if(temp&0x01)
     {
     LCD_WR_DATA(POINT_COLOR);
     }else LCD_WR_DATA(BACK_COLOR);         
     temp>>=1;
    }
   }
  }
else//叠加方式
  {
  for(pos=0;pos    {
   if(size==12)temp=asc2_1206[num][pos];//调用1206字体
   else temp=asc2_1608[num][pos];   //调用1608字体
   for(t=0;t     {                 
    if(temp&0x01)LCD_DrawPoint(x+t,y+pos);//画一个点     
    temp>>=1;
    }
   }
  }     
//恢复窗体大小  
LCD_WriteReg(R80, 0x0000); //水平方向GRAM起始地址
LCD_WriteReg(R81, (LCD_W-1)); //水平方向GRAM结束地址
LCD_WriteReg(R82, 0x0000); //垂直方向GRAM起始地址
LCD_WriteReg(R83, (LCD_H-1)); //垂直方向GRAM结束地址
}

回帖(3)

欧竞仲

2019-6-4 08:38:11
这个不能显示中文!!!
R80是个寄存器,右键 goto definition 自己查看吧.
举报

望艳妮

2019-6-4 08:56:15
请问如果用FSMC驱动一个LCD屏 并在上面显示中文是怎么操作的 请教实现的步骤 请原子哥讲解 越细致越好 谢了
举报

张子腾

2019-6-4 09:08:25
除了初始化部分有稍微区别.其他的和我们目前mini板的代码一模一样.
汉字显示请看 汉字实验这个章节.
举报

更多回帖

发帖
×
20
完善资料,
赚取积分