1. 程式人生 > >使用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[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;
   }
  }

}