这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 【DigiKeyLet'sdo第二期墨水屏DIY活动】-过程贴-显示汉字

共1条 1/1 1 跳转至

【DigiKeyLet'sdo第二期墨水屏DIY活动】-过程贴-显示汉字

菜鸟
2024-09-10 21:00:31     打赏

使用编译器环境:KEIL5.38A 一根MicUSB线。

实验目标:在墨水屏中显示汉字

经过之前时间得研究墨水瓶,使用KEIL编译软件对字符串显示,基本是可以正常,对于驱动汉字还是有些困难得,类似于其他单片机通过IIC驱动界面显示得方法.

在调试的时候遇到屏幕刷新太快的话,会导致某些汉字无法正常显示,所有我们在刷新汉字的时候,不要频繁的刷新屏幕,对于相同的界面不要重复刷新,只需要刷新一次即可,可以使用板载的LED对程序的工作状态进行显示。。

驱动汉字的代码如下:


extern const unsigned char acHZK16C[];  
#define GB2312_FONT_H 16  
#define GB2312_FONT_W 16  
*显示GB2132*/ 
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_hanzi(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++;  
    }  
  }  
}

实物效果如下:

image.pngimage.png

image.pngimage.png






关键词: DigiKey     二期     墨水    

共1条 1/1 1 跳转至

回复

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