本文来自http://blog.csdn.net/hellogv/ ,引用必须注明出处!

最近需要用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字模工具。

//汉字 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);  }}// *****************************************************//画点函数//原理:x直接设置列,Y/8=页数,Y%8=点在纵8格的位置,Y=0,Y|=BIT7,Y=Y>>(7-Y%8)//举例:(5,6),在列5,Y坐标在第0页的最后一点,即Y=0100 0000(倒向的二进制) 等价于 Y=0,Y|=BIT7,Y左移1位//参数x:X轴坐标,0~127//参数y:Y轴坐标,0~63//参数ph:点的高度,为0时则为清除点// *****************************************************void LCD_DrawPoint(unsigned char x,unsigned char y,unsigned int ph){  unsigned char i,pag,colh,coll;   pag = y/8;//判断Y所在的页  pag = pag  +0xb0;    colh = x>>4; /*取x的高4位*/  colh = colh | 0xf0;  colh = colh & 0x1f;  coll = x & 0x0f; /*取x的低4位*/  SPI_Write(colh,LCD_CMD);  SPI_Write(coll,LCD_CMD);  SPI_Write(pag,LCD_CMD);    if(ph==LCD_CLEAR)  {    SPI_Write(LCD_CLEAR,LCD_CANVAS);    return;  }      unsigned int point=0;  for(i=0;i<ph;i++)    point|=(BIT7>>i);//点加高  point=point>>(8-ph-y%8);//加高之后移位   SPI_Write(point,LCD_CANVAS);}unsigned char hz16_16[]={//"你" 0x40,0x20,0xF8,0x07,0x40,0x20,0x18,0x0F,0x08,0xC8,0x08,0x08,0x28,0x18,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x08,0x04,0x43,0x80,0x7F,0x00,0x01,0x06,0x0C,0x00,0x00};unsigned char hz24_24[]={//"好"0x00,0x40,0x40,0x40,0xFF,0xFE,0x42,0x40,0xE0,0xE0,0x40,0x00,0x08,0x08,0x08,0x08,0xC8,0x88,0x68,0x38,0x1C,0x08,0x00,0x00,0x00,0x00,0x70,0x7F,0xCF,0x80,0x00,0xF0,0x7F,0x0F,0x10,0x10,0x10,0x10,0x10,0x10,0xFF,0xFF,0x10,0x10,0x18,0x18,0x10,0x00,0x00,0x40,0x20,0x10,0x0C,0x07,0x03,0x07,0x1E,0x1C,0x00,0x00,0x20,0x20,0x60,0xE0,0x7F,0x3F,0x00,0x00,0x00,0x00,0x00,0x00};unsigned char ascii8_16[]={// -G-0xF0,0xF8,0x0C,0x84,0x84,0x8C,0x98,0x00,0x03,0x07,0x0C,0x08,0x08,0x07,0x0F,0x00};unsigned char ascii12_24[]={// -V- 0x04,0xFC,0xFC,0x04,0x00,0x00,0x00,0x04,0xFC,0xFC,0x04,0x00,0x00,0x00,0x3F,0xFF,  0xC0,0x00,0xC0,0xFF,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x1F,0x3C,0x1F,0x03,0x00,0x00,0x00,0x00,};unsigned char  *hzcode;    void main(){  WDTCTL=WDTPW+WDTHOLD;        //停止WDT   LCD_Init();//初使化  LCD_SetDisplay(LCD_CLEAR);        //显示“你”  hzcode= hz16_16;  LCD_PutChar(0,0,CHINESE_16_16,hzcode);  //显示“好”    hzcode= hz24_24;  LCD_PutChar(16,1,CHINESE_24_24,hzcode);    //显示分割线  for(int x=0;x<127;x++)    LCD_DrawPoint(x,32,1);     //显示“G”  hzcode= ascii8_16;  LCD_PutChar(100,5,ASCII_W8_H16,hzcode);  //显示“V”   hzcode= ascii12_24;  LCD_PutChar(108,5,ASCII_W12_H24,hzcode);     }

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

驱动ST7565显示汉字以及画点相关推荐

  1. 51单片机+LCD12864驱动显示汉字模板+Proteus仿真

    51单片机+LCD12864驱动显示汉字模板+Proteus仿真 Proteus仿真效果 汉字显示方法 汉字通过取模软件取模. 取模软件:pctolcd2002 取模方式: 工程文件架构 主程序代码 ...

  2. 第七篇 亚龙236 led 16*32点阵显示显示汉字

    第七篇 亚龙236 led 16*32点阵显示显示汉字 亚龙236设备显示模块有led点阵,16*32点阵可以显示汉字或图形. 这个模块只能教学用,实际的户外屏用的电路和它从原理上不一样.数码管模块也 ...

  3. stm32f103程序——0.96OLED(修改显示汉字函数)

    网盘链接:https://pan.baidu.com/s/1ov-lE3sD2nMpV33Q9E7omw 提取码:2333 一.写作说明 1.1 前言 备注:本文所使用的液晶屏为0.96OLED IP ...

  4. 0.96寸OLED显示汉字,数字,英文,图片,GIF动画+取模软件使用+代码解析

    前言 本次我们学习一下STM32F103关于OLED显示汉字,数字,英文,图片,GIF动画,和介绍各种取模软件的使用,主要教会大家使用和修改OLED驱动的代码,对汉字大小,图片分辨率进行代码修改并显示 ...

  5. pdfstamper生成pdf无法显示汉字_正点原子STM32F4/F7水星开发板资料连载第四十六章 汉字显示实验...

    1)实验平台:正点原子水星 STM32F4/F7 开发板 2)摘自<STM32F7 开发指南(HAL 库版)>关注官方微信号公众号,获取更多资料:正点原子 3)全套实验源码+手册+视频下载 ...

  6. zigbee板子:lcd显示汉字

    main函数 #include <ioCC2530.h> #include "LCD.h"void main() {//unsigned char i=0; LCD_I ...

  7. 使用Tslib在触摸屏上显示汉字

    终于到了在触摸屏上显示汉字了,真正写代码.测试的时间是1天,在此之前的一切准备.学习花费约2周到3周时间.而为了获取触摸屏上显示的图像,花费约2天.由于网络驱动已经接近于放弃状态,NFS用不了,只好用 ...

  8. 点阵字体显示系列之三:使用ncurses显示汉字

    ncurses这个库,最早听说应该是当年刚接触Linux的时候,当时,我们宿舍就一个人在鼓捣Linux,他是我们后来的班长,如今在ZLG混,也不知混得怎么样了.我也不知道哪条神经线路出现故障了,竟然傻 ...

  9. 使用Tslib在触摸屏上显示汉字【转】

    转自:http://www.latelee.org/embedded-linux/use-tslib-to-display-chinese-character.html 终于到了在触摸屏上显示汉字了, ...

最新文章

  1. 学习使用Bing Maps Silverlight Control(五):离线使用和自定义地图模式
  2. matlab 字符分割
  3. CodeSite使用小结
  4. [Windows编程] 监视DLL装载/卸载
  5. python爬取京东商品图片_python利用urllib实现爬取京东网站商品图片的爬虫实例
  6. Google Maps API编程资源大全
  7. Angular自学笔记(?)DI提供者
  8. go语言打包html,Go语言-打包静态文件
  9. composer安装Workerman报错:Installation failed, reverting ./composer.json to its original content....
  10. 微信支付v2开发(7) 告警通知
  11. xgboost与LightGBM的区别
  12. oracle归档日志百分比,Oracle归档日志处理
  13. 英伟达显卡不同架构_【英伟达NVIDIA显卡GPU架构核心代号名称一览】(截止到 2018·08)...
  14. PS实用方法(抠出完整的头发丝)
  15. Android程序员在大厂工作是什么体验?
  16. 是否可以同时学习两门编程语言?——我的语言学习经验告诉我不行
  17. 湖大ACM10155——Making change
  18. C++中string类函数常用函数大全
  19. Windows NT引导过程源代码分析
  20. 5.Hiveguigun滚(ノ`Д)ノ竟然竞争谨慎谨慎谨慎哈喇子罢工八公

热门文章

  1. 如何能免费将图片无损压缩到100K?
  2. 希沃智能助教在实际教学中的应用
  3. 京东撸货核心法则,6个步骤很详细,拿走不谢!
  4. STM32入门100步 第2期 STM32家族大起底
  5. Matlab慕课学习交流
  6. win10显示服务器登录失,win10电脑user profile service服务登录失败怎么办
  7. maven多仓库配置——公司仓库和阿里仓库
  8. 速度环PID控制直流电机
  9. 领课教育系统 - 开源的微服务分布式在线教育系统
  10. 三姐妹不吸烟患肺癌,做饭人需要了解油烟的三大危害