阿兵_b56a2 发表于 2019-6-8 10:00:53

12864显示数字乱码

本帖最后由 阿兵_b56a2 于 2019-6-8 10:00 编辑

struct Cn16CharTypeDef                  // 汉字字模数据结构
{
      unsigned charIndex;            // 汉字内码索引,一个汉字占两个字节      
      unsigned charMsk;             // 点阵码数据(16*16有32个数据)
};

struct Cn16CharTypeDef code CN16CHAR[]=
{
/*--文字:0--*/
/*--宋体12;此字体下对应的点阵为:宽x高=8x16   --*/
"0",0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,

/*--文字:3--*/
/*--宋体12;此字体下对应的点阵为:宽x高=8x16   --*/
"3",0x00,0x30,0x48,0x88,0x88,0x08,0x30,0x00,0x00,0x0E,0x11,0x20,0x20,0x20,0x18,0x00,
};
uchar Lcd12864_Write16CnCHAR(uchar x, uchar y, uchar *cn)
{
      uchar j, x1, x2, wordNum;

      //--Y的坐标只能从0到7,大于则直接返回--//
      if(y > 7)
      {
                return 0;
      }

      //--X的坐标只能从0到128,大于则直接返回--//
      if(x > 128)
      {
                return 0;
      }
      y += 0xB0;         //求取Y坐标的值
      //--设置Y坐标--//
      LcdSt7565_WriteCmd(y);
      while ( *cn != '\0')         //在C语言中字符串结束以‘\0’结尾
      {      
      
                //--设置Y坐标--//
                LcdSt7565_WriteCmd(y);

                x1 = (x >> 4) & 0x0F;   //由于X坐标要两句命令,分高低4位,所以这里先取出高4位
                x2 = x & 0x0F;          //去低四位
                //--设置X坐标--//
                LcdSt7565_WriteCmd(0x10 + x1);   //高4位
                LcdSt7565_WriteCmd(0x04 + x2);      //低4位

                for (wordNum=0; wordNum<50; wordNum++)
                {
                  //--查询要写的字在字库中的位置--//
                        if (CN16CHAR.Index == *cn)
                           
                        {
                              for (j=0; j<16; j++) //写一个字
                              {               
                                        if (j == 8)         //由于16X16用到两个Y坐标,当大于等于16时,切换坐标
                                        {
                                                //--设置Y坐标--//
                                                   LcdSt7565_WriteCmd(y + 1);
                        
                                                //--设置X坐标--//
                                                LcdSt7565_WriteCmd(0x10 + x1);   //高4位
                                                LcdSt7565_WriteCmd(0x04 + x2);      //低4位
                                        }
                                        LcdSt7565_WriteData(CN16CHAR.Msk);
                              }
                              x += 8;
                        }//if查到字结束               
                } //for查字结束      
                cn += 1;
      }      //while结束
      return 1;
}

阿兵_b56a2 发表于 2019-6-13 20:12:14

你QQ多少, 加个好友呗

YXUN 发表于 2019-6-12 11:02:18

取出来8*16用0x00给他补齐成16*16的, 就不会乱码了
页: [1]
查看完整版本: 12864显示数字乱码