0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

LCD12864显示屏概述及控制程序

CHANBAEK 来源:CSDN-_会飞_的鱼 作者:CSDN-_会飞_的鱼 2023-03-07 15:12 次阅读

一. 概述

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. 引脚说明

LCD12864的引脚总共有20个,如图:

截图20230301181839.png

截图20230301181839.png

其中,引脚PSB为并/串行接口选择引脚,高电平为并行控制; 低电平为串行控制。

3. 电路图

微信图片_20230223144318.jpg

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

三. 控制程序

1.控制时序

LCD12864控制时序有两种,一种为并行控制时序(本次是以并行为例),另一种是串行控制时序。

简单来说,大部分情况下我们只对显示屏做写操作,读操作很少用,所以读操作就不做介绍。 LCD12864显示屏控制程序简化下来,也相对简单,只需要实现忙检查、写数据、写指令、初始化四个控制函数即可实现对LCD12864的控制。 写时序如图:

截图20230301181839.png

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. 显示坐标关系

截图20230301181839.png

如上图所示,第一行显示的地址为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);
}
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 存储器
    +关注

    关注

    38

    文章

    7154

    浏览量

    162038
  • 液晶
    +关注

    关注

    6

    文章

    596

    浏览量

    69288
  • 显示屏
    +关注

    关注

    28

    文章

    4231

    浏览量

    72715
  • LCD12864
    +关注

    关注

    7

    文章

    232

    浏览量

    44577
  • 显示模块
    +关注

    关注

    1

    文章

    46

    浏览量

    23524
收藏 人收藏

    评论

    相关推荐

    这个怎么把它读出来并显示lcd12864显示屏上?

    0x2bFILENAME曲目文件名内码,为双字节的字符串,以0x0000为结束(只读 / 0x0010)这个怎么把它读出来并显示lcd12864显示屏
    发表于 09-29 18:49

    神们,谁能帮我把这程序里边的lcd12232的显示屏程序改为能在lcd12864上面显示并使用

    神们,谁能帮我把这程序里边的lcd12232的显示屏程序改为能在lcd12864上面显示并使用,
    发表于 10-09 21:17

    用STM32F103R6来控制LCD12864显示屏

    很久没来CSDN这更新了,最近因为需要用到STM32F103R6来控制LCD12864显示屏,手中没有材料,就尝试用了Protues来仿真一、创建Protues工程文件现在Protues8.3版本
    发表于 08-24 08:13

    LCD12864显示屏怎么使用

    一.概述LCD12864显示屏是所说的点阵液晶显示模块,就是由12864个液晶显示点组成的一个1
    发表于 02-07 06:23

    LCD12864的相关资料分享

    废话不多说,LCD12864是一款分辨率为64X128的液晶显示屏。  常见ST7920主控的LCD12864 引脚定义如下:  1 VSS - 模块的电源地  2 VDD - 模块的电源正端  3
    发表于 02-15 06:41

    LCD12864直接写屏驱动程序

    LCD12864直接写屏驱动程序12864LCD直接写屏,省去显示缓冲区,-LCD12864 written directly scree
    发表于 03-12 17:29 528次下载

    LCD12864 显示汉字

    无字库LCD12864显示汉字,有程序,有仿真图。
    发表于 05-05 17:40 66次下载

    LCD12864液晶显示的设计

    LCD12864液晶显示的设计基于MSP430单片机片内温度12864显示程序
    发表于 06-21 17:56 27次下载

    人体电子称 LCD12864显示

    人体电子称 LCD12864显示
    发表于 09-15 08:43 24次下载

    LCD12864串口显示

    LCD12864串口显示
    发表于 10-10 16:31 69次下载
    <b class='flag-5'>LCD12864</b>串口<b class='flag-5'>显示</b>

    如何使用LCD12864显示屏显示温湿度的详细程序和资料免费下载

    本文档的主要内容详细介绍的是如何使用LCD12864显示屏显示温湿度的详细程序和资料免费下载。
    发表于 10-11 08:00 68次下载
    如何使用<b class='flag-5'>LCD12864</b><b class='flag-5'>显示屏</b><b class='flag-5'>显示</b>温湿度的详细<b class='flag-5'>程序</b>和资料免费下载

    LCD12864显示程序免费下载

    本文档的主要内容详细介绍的是LCD12864显示程序免费下载。
    发表于 05-09 08:00 59次下载
    <b class='flag-5'>LCD12864</b>的<b class='flag-5'>显示</b><b class='flag-5'>程序</b>免费下载

    LCD12864串行显示程序免费下载

    本文档的主要内容详细介绍的是LCD12864串行显示程序免费下载。
    发表于 07-15 08:00 28次下载
    <b class='flag-5'>LCD12864</b>串行<b class='flag-5'>显示</b><b class='flag-5'>程序</b>免费下载

    LCD12864的液晶显示程序免费下载

    本文档的主要内容详细介绍的是LCD12864的液晶显示程序免费下载。
    发表于 06-24 08:00 29次下载
    <b class='flag-5'>LCD12864</b>的液晶<b class='flag-5'>显示</b><b class='flag-5'>程序</b>免费下载

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

    一.概述LCD12864显示屏是所说的点阵液晶显示模块,就是由12864个液晶显示点组成的一个1
    发表于 12-04 10:21 13次下载
    详解<b class='flag-5'>LCD12864</b><b class='flag-5'>显示屏</b>的使用(并行<b class='flag-5'>控制</b>)