驱动ST7565显示汉字以及画点

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

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

如下图,这里Y=6

1

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

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

2

接下来贴上代码,由于每个厂家的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); }

LCD(五)ST7565 132*65单色点阵驱动芯片 ST7565R是132*65点阵驱动IC,通常用来做128*64的LCD模块。在 LCD 上排列着 128×64 点阵,128 个列信号与驱动 IC 相连,64 个行信号也与驱动 IC 相连,IC 邦定在 LCD 玻璃上( COG工艺)128*64 点阵的单色图片显示4行,每行 8 个16*16 点阵的汉字显示8行,每行16 个 8*8 点阵的英文、数字、符号2.硬件设计。 阅读详情

相关推荐

嵌入式LCD裸屏驱动与自建汉字库实战:ST7565驱动与空间优化方案

在嵌入式系统开发中,LCD显示驱动是基础且关键的技术环节,尤其对于资源受限的MCU。其核心原理在于通过并口或串口通信协议,向显示控制器发送命令与数据,直接操作显存来控制每个像素点的亮灭。这项技术的价值在于能够实现高度定制化的图形界面,摆脱对预制字库的依赖,从而在Flash和RAM资源极其有限的环境下(如STM32F103等型号)完成复杂信息显示。典型的应用场景包括工业HMI、智能家居面板、便携式仪器仪表等需要显示中文菜单或状态信息的设备。本文聚焦于驱动ST7565控制器这类“裸屏”,并深入探讨如何通过自建精

weixin_30372371的博客 384

51单片机驱动ST7565串行12864液晶带仿真

51单片机驱动ST7565串行12864液晶带仿真,多级菜单,为.DSN后缀的仿真图可以实现运行,包含主程序代码为Keil的C语言代码项目和支持库。

AVR单片机驱动ST7565 LCD:从SPI通信到图形显示实战

在嵌入式系统开发中,SPI通信协议是实现单片机与外围设备高效数据交换的核心技术之一。其通过主从架构和全双工同步传输,为资源受限的微控制器提供了简洁而高速的串行通信方案。这项技术的核心价值在于极大节省了宝贵的IO引脚资源,同时保证了数据传输的可靠性,广泛应用于存储器、传感器及显示控制器等外设的连接。特别是在驱动点阵LCD模块时,SPI模式成为首选,它能以最少的连线完成复杂的显存数据写入。以经典的ST7565控制器为例,其显存采用独特的页-列寻址架构,开发者需通过SPI发送特定命令序列进行初始化、设置对比度及显

weixin_30383279的博客 347

ST7567_LCD12864.rar_ST7567_lcd12864_lcd12864 ST7567_液晶驱动

ST7567的LCD12864 驱动,包含一些基础的画线、画方框、圆圈等等图形的函数。

ST7565芯片手册

lcd驱动芯片st7565r数据手册!全英文详细介绍,有命令表,时序图等详细描述!

ST7565_12864_COG中文说明

ST7565的中文描述。基本指令集有详细的解释,简单的例程,与C51单片机的硬件连接电路。

ST7565显示驱动资源文件介绍:助力显示技术提升,驱动汉字与画点功能一网打尽

ST7565显示驱动资源文件介绍:助力显示技术提升,驱动汉字与画点功能一网打尽 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 在显示技术领域,ST7565显示驱动以其稳定的性能和广泛的应用,受到许多开发者的青睐。本文将为您详细介绍一个开源项目——ST7565显示驱动资源文件介绍,该项目提供了一个名为《驱动ST7565显示汉字以及画点.pdf》的宝贵资源,旨在帮助开发者...

gitblog_06728的博客 289

st7567驱动芯片说明书.pdf

一种点阵屏与段码屏结合显示屏的说明书,该显示屏采用ST7567芯片同时驱动点阵屏和段码屏,段码部分位于整块屏幕的上方,点阵屏位于整块屏幕的下方

ST7565显示驱动资源文件介绍

ST7565显示驱动资源文件介绍 去发现同类优质开源项目:https://gitcode.com/ 此仓库提供了一个关于ST7565显示驱动的重要资源文件,文件名为《驱动ST7565显示汉字以及画点.pdf》。以下是该文件的详细描述: 在最近的项目中,我们面临着使用ST7565控制器来显示汉字以及实现画点功能的需求。网络上有大量关于ST7565驱动显示文字的示例代码和教程,但关于画图功能的实例则相...

gitblog_06707的博客 367

LCD控制芯片ST7565介绍

LCD控制芯片ST7565广泛应用于各类便携式液晶产品的驱动中,该文章提供了一些可参考的程序,在嵌入式编程时可以用到。

ST7565p数据手册

官方数据手册~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

驱动ST7565显示汉字以及画点.pdf

最近需要用ST7565来显示汉字以及画点,发现网上关于ST7565驱动显示文字的例子也不少,不过画图方面的例子就很少了

LCD控制器-ST7567手册

LCD控制器 ST7567,好不容易找到的,很多网站上都是ST7565S的手册

【树莓派】wiringPi库驱动ST7565液晶

目录 准备工作 修改程序 运行效果 提示 完整代码 准备工作 翻出在老王家购买的ST7565液晶屏,就折腾它了。 树莓派使用wiringPi库,像这样就可以控制GPIO上的LED闪烁,很简单对吧? #include <wiringpi.h> #define LED 25 int main(void) { if(wiringPiSetup() < 0)return 1; pinMode (LED,OUTPUT) ; while(1)

weixin_44159067的博客 1456

ST7565R控制12864液晶中文说明书

ST7565R介绍,JLX12864G液晶控制说明

一文看懂分布式存储架构

目录一、集中存储结构二、分布式存储1 、分布式存储的兴起2 、分布式存储的重要性3 、分布式存储的种类和比较三、分布式理论浅析1 、一致性和可用性2 、数据分布3 、复制4 、分布式协议5、跨机房部署四、分布式文件系统1、 Google 文件系统( GFS )2、 Taobao 文件系统( TFS )3、 Fackbook Haystack 文件系统4、 CDN 内容分发网络五、分布式键值系统1、 Amazon Dynamo2、 Taobao Tiar3、 ETCD4 、产品选型比较( Etcd , Zoo

weixin_70730532的博客 2万+
上一篇: agsXMPP客户端关于好友在线状态的设置及其响应的方法
下一篇: C#(DotNET CF 2.0) 模拟WP7的拖拉控件方式
「已注销」
博客等级 码龄8年 1粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值