使用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[i].Index[0]) && (*(p+1)==Font16lib[i].Index[1])) 
     { //找到汉字,显示        
        //addr=oy*(320/8)+ox+SCREE_ONE_ENDADDR;
        //hz(addr,Font16lib[i].Msk);
        LCD_DrawCharhanzi(ox, oy, Font16lib[i].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;
   }
  }

}

你可能感兴趣的:(stm)