首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

使用stm32在lcd上随意显示汉字

使用stm32在lcd上随意显示汉字

怎样在lcd彩屏上显示汉字,我们习惯使用汉字库,也有很多自己做一个汉字库,我就习惯这一种。  介绍一下  我做的显示 “ 同一个世界!  同一个梦想!”
   首先  在网上下一个提取点阵的的软件生成自己的字库,

const struct typFont16 Font16lib[]={



                     "梦",   0x0410,0x0410,0x7F7E,0x0C10,0x1638,0x7554,0x24D3,0x0430,
                              0x1FE0,0x0810,0x0430,0x024C,0x0180,0x00C0,0x0030,0x000E,
        
                     "测",   0x4002,0x43E4,0x4224,0x4A21,0x4AA2,0x4AAA,0x4AA8,0x4AA4,
                             0x4AA4,0x4AA4,0x4AA3,0x4082,0x4142,0x4242,0x5222,0x2012,        
"同",   0x0000,0x3FFE,0x2002,0x2002,0x2FFA,0x2002,0x2002,0x27F2,
        0x2412,0x2412,0x2412,0x27F2,0x2412,0x2002,0x2802,0x1002,
   
"一",   0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x2000,0x7FFE,
        0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
        
"个",   0x0080,0x0080,0x0140,0x0240,0x0420,0x1890,0x7088,0x2086,
        0x0080,0x0080,0x0080,0x0080,0x0080,0x0080,0x0080,0x0000,

"想",  0x0008,0x3F08,0x2108,0x3F7F,0x211C,0x3F2C,0x212A,0x210A,
       0x3F09,0x0000,0x0080,0x2110,0x4114,0x4814,0x0FE6,0x0000,

"世",  0x0000,0x0848,0x0848,0x0848,0x0848,0x7FFF,0x0848,0x0848,
       0x0848,0x0FC8,0x0848,0x0008,0x1008,0x3FF8,0x0000,0x0000,

"界",  0x1FF8,0x1088,0x1088,0x1FF8,0x1088,0x1088,0x1FF8,0x1188,
       0x0240,0x0C20,0x7258,0x2246,0x0240,0x0220,0x0210,0x0208,
"!",  0x0000,0x0000,0x0000,0x0000,0x0008,0x0008,0x0008,0x0008,
       0x0008,0x0008,0x0008,0x0008,0x0008,0x0000,0x0008,0x0000,


                                   };

汉字的点阵结构体格式为:

   typedef struct typFont16    // 汉字字模数据结构
{
    uc8 Index[2];  //汉字
    uc16 Msk[16];          //字模
} typFont16;

在uc8 index【2】里存放汉字 将会是以国标码的格式存储 ,我们就是根据这个搜索要显示的字在什么位置

void hz_write(u8 ox,u16 oy,uc8 *p)
{
unsigned char i,x=0;
//unsigned int x,y;
ox=ox*16;
  while(*p)
{  
   
     i=0;
   while(1)
  {
      if( (*p==Font16lib.Index[0]) && (*(p+1)==Font16lib.Index[1]))  
     { //找到汉字,显示         
        //addr=oy*(320/8)+ox+SCREE_ONE_ENDADDR;
        //hz(addr,Font16lib.Msk);
        LCD_DrawCharhanzi(ox, oy, Font16lib.Msk);
        oy-=16;
           oy+=16;      //下一个显示
         p+=2;
         //找下一个汉字
         x++;
   if((x == 20))//|| (oy == 15))
    {
      ox += 16;
      oy = 319;
      x = 0;
    }
    oy-=16;
        break;
     }
     i++; //下一个汉字库
     if(i >= 9) //超出字库范围
   {
       p+=2;         //找下一个汉字
      break;
   }
  }
}  
}

最后我们使用上面的函数 即可随意显示汉字


  hz_write(7,255,"同一个世界!同一个梦想!");

完成。

继承事业,薪火相传
返回列表