详解LCD12864显示屏的使用(并行控制)

详解LCD12864显示屏的使用(并行控制)一 概述 LCD12864 显示屏是所说的点阵液晶显示模块 就是由 12864 个液晶显示点组成的一个 128 列 64 行的阵列 所以也就叫成了 12864 每个显示点都对应着有一位二进制数 0 表示灭 1 表示亮 存储这些点阵信息的 RAM 被称为显示数据存储器 如果要显示某个图形或汉字就是将相应的点阵信息写入到对应的存储单元中 图形或汉字的点阵信息是由自己设计 如果模块带有字库 则不需要自己设计汉字 这时候问题的

一.概述

LCD12864显示屏是所说的点阵液晶显示模块,就是由12864个液晶显示点组成的一个128列64行的阵列,所以也就叫成了12864。每个显示点都对应着有一位二进制数,0表示灭,1表示亮。存储这些点阵信息的RAM被称为显示数据存储器。如果要显示某个图形或汉字就是将相应的点阵信息写入到对应的存储单元中。图形或汉字的点阵信息是由自己设计(如果模块带有字库,则不需要自己设计汉字),这时候问题的关键是显示点在液晶屏上的位置与其在存储器中的地址之间的关系。

二.LCD12864基本参数
1.电气参数
  • 电源电压:VDD:+3.0–+5.5V
  • 显示分辨率:128×64点
  • 内置汉字字库,提供8192个16×16点阵汉字(简繁体可选)
  • 内置128个16×8点阵字符
  • 2MHZ时钟频率
  • 显示方式:STN、半透、正显
  • 驱动方式:1/32DUTY,1/5BIAS
  • 视角方向:6点
  • 背光方式:侧部高亮白色LED,功耗仅为普通LED的1/5—1/10
  • 通讯方式:串行、并口可选
  • 内置DC-DC转换电路,无需外加负压
  • 无需片选信号,简化软件设计
  • 工作温度:0℃-+55℃,
  • 存储温度:-20℃-+60℃
2.引脚说明
3. 电路图

在这里插入图片描述
其中可调电阻用于调整显示器的对比度。三极管是为增强电流的驱动能力,为背光LED提供足够的驱动电流。

三.控制程序
1.控制时序
2. 忙状态检查函数
/* * 函 数 名 : LCD12864_Busy * 函数功能 : 检测LCD是否忙 * 输 入 : 无 * 输 出 : 1或0(1表示不忙,0表示忙) */ uchar LCD12864_Busy(void) { uchar i = 0; LCD12864_RS = 0; //选择命令 LCD12864_RW = 1; //选择读取 LCD12864_EN = 1; LCD12864_Delay1ms(1); while((LCD12864_DATAPORT & 0x80) == 0x80) //检测读取到的值 { i++; if(i > 100) { LCD12864_EN = 0; return 0; //超过等待时间返回0表示失败 } } LCD12864_EN = 0; return 1; } 
3. 写指令函数
/* * 函 数 名 : LCD12864_WriteCmd * 函数功能 : 写命令 * 输 入 : cmd * 输 出 : 无 */ void LCD12864_WriteCmd(uchar cmd) { uchar i; i = 0; while( LCD12864_Busy() == 0) { LCD12864_Delay1ms(1); i++; if( i>100) { return; //超过等待退出 } } LCD12864_RS = 0; //选择命令 LCD12864_RW = 0; //选择写入 LCD12864_EN = 0; //初始化使能端 LCD12864_DATAPORT = cmd; //放置数据 LCD12864_EN = 1; //写时序 LCD12864_Delay1ms(5); LCD12864_EN = 0; } 
4. 写数据函数
/* * 函 数 名 : LCD12864_WriteData * 函数功能 : 写数据 * 输 入 : dat * 输 出 : 无 */ void LCD12864_WriteData(uchar dat) { uchar i; i = 0; while( LCD12864_Busy() == 0) { LCD12864_Delay1ms(1); i++; if( i>100) { return; //超过等待退出 } } LCD12864_RS = 1; //选择数据 LCD12864_RW = 0; //选择写入 LCD12864_EN = 0; //初始化使能端 LCD12864_DATAPORT = dat; //放置数据 LCD12864_EN = 1; //写时序 LCD12864_Delay1ms(5); LCD12864_EN = 0; } 

与LCD1602一样,LCD12864写数据和写指令的区别在于RS引脚的电平;RS为高电平时,写数据;RS为低电平时,写指令。

5. 初始化函数
/* * 函 数 名 : LCD12864_Init * 函数功能 : 初始化LCD12864 * 输 入 : 无 * 输 出 : 无 */ void LCD12864_Init() { LCD12864_PSB = 1; //选择并行输入 LCD12864_RST = 1; //复位 ​ LCD12864_WriteCmd(0x30); //选择基本指令操作 LCD12864_WriteCmd(0x0c); //显示开,关光标 LCD12864_WriteCmd(0x01); //清除LCD12864的显示内容 } 
四.显示程序

在LCD12864上显示特定的字符,实际上就是对LCD12864的DDRAM上写入对应的数据,显示屏便显示你想要的字符。其中,英文字符占用1个字节,中文字符占用2个字节。

1. 显示坐标关系

在这里插入图片描述
如上图所示,第一行显示的地址为80H-87H,第二行为90H-97H,第三行为88H-8FH,第四行为98H-9FH。所以要显示屏上哪个位置显示哪个汉字,只需要写入对应位置的地址,再写入对应汉字即可。

2. 显示汉字

只要实现以上忙检查、写数据、写指令、初始化四个控制函数,就可以实现LCD12864显示屏汉字的显示控制。

显示函数只需要写入起始坐标,然后显示对应的汉字。

/* * 函 数 名 : LCD12864_SetWindow * 函数功能 : 设置在基本指令模式下设置显示坐标,并显示汉字。注意:x是设置行,y是设置列 * 输 入 : x, y,word * 输 出 : 无 */ void LCD12864_SetWindow(uchar x, uchar y,uchar *word) { uchar pos; uchar i=y; if(x == 0) // 第一行的地址是80H x = 0x80; else if(x == 1) //第二行的地址是90H x = 0x90; else if(x == 2) //第三行的地址是88H x = 0x88; else if(x == 3) //第三行的地址是98H x = 0x98; pos = x + y; LCD12864_WriteCmd(pos); while(word[i]!='\0') { if(i<16) //判断是否在本行的显示范围内 { LCD12864_WriteData(word[i]); i++; } } } 
3.主函数

最后,在主函数上实现汉字的显示了。

#include 
  
    #include"lcd12864.h" ​ unsigned char code CharCode[]="电子应用学习馆"; ​ void main() { unsigned char i; ​ LCD12864_Init(); LCD12864_SetWindow(0, 0,CharCode); while(1); } 
  

如需LCD12864相关资料及例程, 请关注公众号,首页回复LCD12864获取资料
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/202200.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月20日 上午7:40
下一篇 2026年3月20日 上午7:40


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号