侵权投诉
当前位置:

OFweek电子工程网

MCU/控制技术

正文

驱动ST7565显示汉字以及画点

导读: 最近需要用ST7565来显示汉字以及画点,发现网上关于ST7565驱动显示文字的例子也不少,不过画图方面的例子就很少了。ST7565是比较常见的128*64的LCD,我这里使用模拟SPI来写ST7565,ST7565是“纵向8点下高位”类型的LCD,难点在于页(Y轴)。

  最近需要用ST7565来显示汉字以及画点,发现网上关于ST7565驱动显示文字的例子也不少,不过画图方面的例子就很少了。ST7565是比较常见的128*64的LCD,我这里使用模拟SPI来写ST7565,ST7565是“纵向8点下高位”类型的LCD,难点在于页(Y轴)。

  如下图,这里Y=6

  

  一个8位数据对应LCD纵向的8个格子,例如:要在Y=6地方亮一个点,把二进制0100 0000写到ST7565里,实际在纵向倒数第二个点显示一个点。

  理论解释完了,接下来看看本例中实现的结果,看下图:

  

  接下来贴上代码,由于每个厂家的ST7565的屏的接线都会有区别,所以这里就不给出写ST7565的实现,SPI_Write()就是写ST7565函数,通过LCD_CMD/LCD_CANVAS来区分是写控制命令还是图像数据。这里的字模来自Lcmzimo字模工具。

  view plaincopy to clipboardprint?

  //汉字 16*16 的定义

  unsigned int CHINESE_16_16[] = {32/*数据总数*/,16/*宽*/,16/*高*/};

  //汉字 24*24 的定义

  unsigned int CHINESE_24_24[] = {72/*数据总数*/,24/*宽*/,24/*高*/};

  //ASCII 16*8 的定义

  unsigned int ASCII_W8_H16[] = {16/*数据总数*/,8/*宽*/,16/*高*/};

  //ASCII 24*12 的定义

  unsigned int ASCII_W12_H24[] = {36/*数据总数*/,12/*宽*/,24/*高*/};

  // *****************************************************

  //画字函数

  //参数x:X轴坐标,0~127

  //参数y_pag:纵向页数,0~7,每一页等于8个纵向像素

  //参数font:font的样式:{数据总数,高,宽}

  //参数p:字模数组,当p=LCD_CLEAR,则是清除指定区域

  // *****************************************************

  void LCD_PutChar(unsigned char x,unsigned char y_pag,unsigned int *font,unsigned char *p)

  {

  unsigned int size=font[0];//整个数组的大小

  unsigned int width=font[1];//字符的宽度

  //unsigned int height=font[2]; 留着以后有用

  unsigned int pagindex=1;//记录LCD页指针去到的页数

  unsigned int nextpage = width;

  unsigned char i,pag,colh,coll;

  pag = y_pag+0xb0;

  colh = x>>4; /*取y_pag的高4位*/

  colh = colh | 0xf0;

  colh = colh & 0x1f;

  coll = x & 0x0f; /*取y_pag的低4位*/

  SPI_Write(colh,LCD_CMD);

  SPI_Write(coll,LCD_CMD);

  SPI_Write(pag,LCD_CMD);

  for (i=0;i<size;i++)

  {

  if (i == nextpage)//当前页画完,则跳转到下一页继续画

  {

  SPI_Write(pag+pagindex,LCD_CMD);

  SPI_Write(colh,LCD_CMD);

  SPI_Write(coll,LCD_CMD);

  pagindex++;//换到下一页

  nextpage = pagindex * width;//定义下一页在size中的位置

  }

  if(p==0x00)

  SPI_Write(0X00,LCD_CANVAS);

  else

  SPI_Write(*p++,LCD_CANVAS);

  }

  }

1  2  下一页>  
声明: 本文由入驻OFweek公众平台的作者撰写,观点仅代表作者本人,不代表OFweek立场。如有侵权或其他问题,请联系举报。

我来说两句

(共0条评论,0人参与)

请输入评论

请输入评论/评论长度6~500个字

您提交的评论过于频繁,请输入验证码继续

暂无评论

暂无评论

文章纠错
x
*文字标题:
*纠错内容:
联系邮箱:
*验 证 码: