这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » Let'sDo第2期任务+过程贴+显示GB2312字符

共2条 1/1 1 跳转至

Let'sDo第2期任务+过程贴+显示GB2312字符

助工
2024-07-26 00:31:00     打赏

前言

   昨晚已经添加完ASCII显示,今天晚上继续添加GB2312的显示。经过半个小时的摸索,终于把显示调出来了。

遇到问题

显示的文字不对

   虽然显示出了汉字,但是汉字并不是自己想显示出来的字。从一开始,个人感觉可能是因为大小端问题,发现对调了区码和位码,汉字还是不对。索性直接去查显示的汉字和想要的汉字的区位码,计算出实际寻址公式,计算过程:

   从对调区位码开始计算,得到如下数据:

       0xB6C8   度

       0xC8B7   确

   此时有两个发现,区位码不需要对调,另外,教程中的公式,位码少减了1,导致寻址偏移一个字节,因此正确的寻址应该是:

汉字在字库中的位置 = ((区码 - 1) * 94 + (位码 - 1))

   有了以上计算,再更换字符验证,发现新的计算逻辑正确。

实际验证代码

和昨天重复部分不再贴出,这里仅贴出修改部分:

   my_epd.c

extern const unsigned char acHZK16C[];
#define GB2312_FONT_H 16
#define GB2312_FONT_W 16

void draw_fb_GB2132(int x, int y, int bankCode, int posCode) {
  const unsigned char *pData = NULL;
  unsigned char idxX, idxY;
  int lineData;
  int pos;

  pos = ((bankCode - 0xA1) * 94 + (posCode - 0xA1)) * (GB2312_FONT_H * GB2312_FONT_W / 8);
  pData = acHZK16C + pos;

  for (idxY = 0; idxY < GB2312_FONT_W; idxY++) {
    lineData = pData[idxY * 2];
    lineData = lineData << 8;
    lineData = lineData | pData[idxY * 2 + 1];

    for (idxX = 0; idxX < GB2312_FONT_H; idxX++) {
      if (lineData & (0x01 << idxX)) {
        draw_fb_point(x + GB2312_FONT_H - idxX, y + idxY);
      } else {
        clear_fb_point(x + GB2312_FONT_H - idxX, y + idxY);
      }
    }
  }
}

void draw_fb(int x, int y, char *data) {
  int i, dataLen = My_strlen(data);

  for (i = 0; i < dataLen;) {
    if (data[i] > 127) {
      if ((x + GB2312_FONT_H) > EPD_H) {
        x = 0;
        y += GB2312_FONT_W;
      }
      draw_fb_GB2132(x, y, data[i], data[i + 1]);

      x += GB2312_FONT_H;
      i += 2;
    } else {
      if ((x + ASCII_FONT_H) > EPD_H) {
        x = 0;
        y += ASCII_FONT_W;
      }
      draw_fb_ASCII(x, y, data[i]);

      x += ASCII_FONT_H;
      i++;
    }
  }
}

int main_EPD_test(void) {
  draw_fb(0, 0, "《仁经》");
  // updata_to_epd(DISPLAY_ALL);
  updata_to_epd(DISPLAY_PART);

  return 0;
}
显示效果

1.jpg





关键词: 墨水     电子书          过程          GB2312     字符    

高工
2024-07-26 08:30:05     打赏
2楼

谢谢分享


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]