• 一. LCD12864简介记录
    • 1.LCD12864B V2.0的实物图
  • 二.引脚定义
    • 1.原理图
    • 2.串行引脚连接
  • 三.串行通信时序图
    • 1. 串行模式下传输一个字节过程
    • 2.举例
  • 四. LCD内部资源及显示原理
    • 1.基本指令
    • 2.显示状态开关
    • 3.进入设定点
    • 4.清除显示(0X01)
    • 5.汉字显示
  • 五.结语

一. LCD12864简介记录

大家好,我是DW,刚开始学习STM32单片机,随手记录学习的过程,每天进步依点点吧,加油,奥利给!!
LCD12864是一种具有4位/8位并行、2线或三线串行多种接口方式,内部含有国际一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为128X64,内置8192个1616点汉字,和128个168点ASCII字符集,利用该模块灵活的接口方式和简单方便的操作指令,可构成全中文人机交互图形界面可以显示8X4行16X16点阵的汉字,也可以完成图形显示。
LCD12864从字面意思就是横向可以显示128个像素点,纵向可以显示64个像素点。LCD12864液晶模块分为带字库版本和不带字库版本,本实验选用的是3.3V带中文字库版本。

1.LCD12864B V2.0的实物图

二.引脚定义

1.原理图

2.串行引脚连接

1.GND
2.3.3V
3.VO不连接
4.RS–PB6
5.R/W–PB7
6.EN–PB8
15.PSB–GND(拉低为串行,拉高为并行)
17.RST–PC13(复位按键)
19.BLA–3.3V
20.GND

补充:

VO引脚可以调节屏幕对比度,LCD背部自带可调电位器VR1,本实验直接调节VR1,不外接可调电阻。
PSB串并行调节选择,串行方式直接将该引脚接地即可

三.串行通信时序图

1. 串行模式下传输一个字节过程

(1)CS为片选信号,先将CS拉高,LCD可以接收数据或者指令;
(2)一个时钟脉冲对应一个高位,SID前五个“1”为控制字符
写数据: RW=0,RS=0;写指令: RW=0,RS=1,最后一位保留0
(3)其次,当对LCD进行写指令时 CMD=0xf8(11111 000);写数据时 DAT=0xfa(11111 010) ;
(4)最后,数据拆开两组来发,第一组发的是高位,第二组发的是低位;高4位先出,之后右移4位,把低4位数据写进去;(当CS=1时,数据同步到数据总线上)

2.举例

比如你想发送的数据为“1”,对应二进制为0011 0001,那么发送的顺序就是:
(1).因为是数据,所以先发送 0xfa (11111 010);
(2).发送0011 0001 分为两组:
第一组:高四位为数据“1”的高四位(0011),低4位补0 (0000), 发送的数据为:0011 0000;
第二组:右移四位,高四位为数据“0”的低四位(0001),低4位补0(0000), 发送的数据为:0001 0000;
到此一个字节发送完成。
写指令之前,必须先发送 11111 000 (即0xF8);
写数据之前,必须先发送 11111 010 (即0xFA).

所以,发送数据和命令的代码如下:

void SendByte(u8 data)
{       CS_HIGH;//CS先拉高for(u8 i=0;i<8;i++)   {        ((data<<i)&0x80) ? DATA_HIGH:DATA_LOW;//移位+判断高位    //一个时钟脉冲对于一个高位CLK_LOW;         CLK_HIGH;} CS_LOW;//释放CS
}
void LCD12864_Write_Cmd_Data(u8 cmd,u8 data){SendByte(cmd);SendByte(data&0xf0);SendByte((data<<4)&0xf0);//分两次输送数据完毕delay_ms(2);//此处加上延时,其他地方可以不加延时
}

(3).由时序图可以知道,完成一个字节数据的发送需要24个时钟周期,发送一个字节的有效数据实际上发送了3个字节
(4).在时钟线CLK拉低时,数据线SID上的数据才允许变化,在时钟线CLK拉高时,SID上的数据必须保持稳定

四. LCD内部资源及显示原理

LCD的控制芯片为ST7920 ,ST7920有丰富的内部资源,里面也有许许多多的指令,让人看得眼花缭乱,我就说几个本实验用到的指令,其他的指令用到了再去学习也不晚。

1.基本指令

当我们在写指令时需要先写入0X30基令,下面是数据手册上对应的的指令表

对应的操作为:

LCD12864_Write_Cmd_Data(CMD,0x30);//基本指令

2.显示状态开关


一般配置为 0X0C :显示器开,光标关闭

LCD12864_Write_Cmd_Data(CMD,0x0C);

3.进入设定点

地址加1,数据不移动,地址移动:0X06

I/D:写入新数据后光标移动方向,高电平右移,低电平左移,
S:写入新数据后显示屏字符是否整体左移或右移一个字符,高电平表示有效,低电平表示无效

LCD12864_Write_Cmd_Data(CMD,0x06);

4.清除显示(0X01)


至此我们就完成了所有指令的编写

LCD12864_Write_Cmd_Data(CMD,0x30);//基本指令
LCD12864_Write_Cmd_Data(CMD,0x0C);//开机显示不显示光标
LCD12864_Write_Cmd_Data(CMD,0x06);
LCD12864_Write_Cmd_Data(CMD,0x01);//清屏

5.汉字显示


由此,我们只需创建一个数组,并写一个显示函数即可,其代码如下:

u8 const TABLE[]=
{   0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,         0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,         0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,        0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f,
}; /* 显示字符或汉字row: row(0~3)col: line(0~7) str: 要显示的字符或汉字*/
void LCD_Display_Words(u8 row,u8 col,u8 *str)
{   LCD12864_Write_Cmd_Data(CMD,TABLE[8*row+col]);//光标位置while(*str>0){ LCD12864_Write_Cmd_Data(DAT,*str);   //写数据str++;     }
}

五.结语

创作不易,如果有用的话,给个点赞,什么问题评论留言,谢谢大家!
好的,一起来看看LCD的显示吧

附件

//lcd12864.c
#include "LCD12864.h"
#include "delay.h"  #define CMD 0XF8
#define DAT 0XFA
u8 const TABLE[]=
{   0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,         0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,         0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,        0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f,
};
void SendByte(u8 data)
{       CS_HIGH;for(u8 i=0;i<8;i++)   {       ((data<<i)&0x80) ? DATA_HIGH:DATA_LOW;//移位+判断高位  为真写1 反之写0   CLK_LOW;         CLK_HIGH;} CS_LOW;
}
void LCD12864_Write_Cmd_Data(u8 cmd,u8 data){SendByte(cmd);SendByte(data&0xf0);SendByte((data<<4)&0xf0);//分两次输送数据完毕delay_ms(2);//此处加上延时,其他地方可以不加延时
}
void LCD_GPIO_Config(void)
{GPIO_InitTypeDef   GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC,ENABLE);//PB6 PB7 PB8GPIO_InitStructure.GPIO_Pin = CS|DATA|CLK;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(LCD_PROT, &GPIO_InitStructure);//复位键PC13GPIO_InitStructure.GPIO_Pin = LCD_RST;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(RST_PROT, &GPIO_InitStructure);
}
void LCD_Init(void)
{//复位刷新LCD_GPIO_Config(); GPIO_ResetBits(RST_PROT,LCD_RST);         GPIO_SetBits(RST_PROT,LCD_RST);         LCD12864_Write_Cmd_Data(CMD,0x30);//基本指令LCD12864_Write_Cmd_Data(CMD,0x0C);//开机显示不显示光标LCD12864_Write_Cmd_Data(CMD,0x06);LCD12864_Write_Cmd_Data(CMD,0x01);//清屏
}
/*! *  @brief      显示字符或汉字*  @param  row: row(0~3)*  @param  col: line(0~7) *  @param   str: 要显示的字符或汉字*///改动处 2022/4/8
void LCD_Display_Words(u8 row,u8 col,u8 *str)
{   LCD12864_Write_Cmd_Data(CMD,TABLE[8*row+col]);//光标位置while(*str>0){ LCD12864_Write_Cmd_Data(DAT,*str);   //写数据str++;     }
}
//lcd12864.h
#ifndef __LCD12864A_H
#define __LCD12864A_H#include "sys.h"//此处更改对应引脚即可,其他地方不需要更改
//片选    PB6 PB7 PB8
#define CS          GPIO_Pin_6          //RS
#define DATA        GPIO_Pin_7          //R/W
#define CLK         GPIO_Pin_8          //E
#define LCD_PROT        GPIOB//复位 更改对应复位引脚
#define LCD_RST           GPIO_Pin_13
#define RST_PROT          GPIOC//片选
#define CS_HIGH GPIO_SetBits(LCD_PROT,CS)
#define CS_LOW  GPIO_ResetBits(LCD_PROT,CS)//数据
#define DATA_HIGH GPIO_SetBits(LCD_PROT,DATA)
#define DATA_LOW  GPIO_ResetBits(LCD_PROT,DATA)//时钟
#define CLK_HIGH GPIO_SetBits(LCD_PROT,CLK)
#define CLK_LOW  GPIO_ResetBits(LCD_PROT,CLK)void SendByte(u8 Dbyte);
void LCD_GPIO_Config(void);
void LCD_Init(void);
void LCD12864_Write_Cmd_Data(u8 cmd,u8 data);
void LCD_Display_Words(u8 row,u8 col,u8 *str);#endif //main.c
#include "sys.h"
#include "delay.h"
#include "LCD12864.h"int main(void){delay_init();LCD_Init();      LCD_Display_Words(0,0,(u8 *)"花间一壶酒");LCD_Display_Words(1,0,(u8 *)"独酌无双亲");  LCD_Display_Words(2,0,(u8 *)"举杯邀明月");LCD_Display_Words(3,0,(u8 *)"对影成三人");while(1);
}

3.在LCD12864上显示属于你的文字相关推荐

  1. css如何实现鼠标移至图片上显示遮罩层及文字

    css如何实现鼠标移至图片上显示遮罩层及文字 问题:一张图片当鼠标移动到上方时,会显示一个遮罩层,并且显示一些提示文字 html: <div class="contentimg&quo ...

  2. 鼠标悬停 -css如何实现鼠标移至图片上显示遮罩层及文字

    搜索这个效果的时候,很多人都是用css结合jQuery实现的,其实直接用css也可以实现哦~ 效果前: 效果后: 代码: <!DOCTYPE html> <html lang=&qu ...

  3. java怎么在窗口上显示字_java 输出文字到新建窗口

    展开全部 可以使用 JLabel.JTextField 组件显示文字.下面是一个示e5a48de588b63231313335323631343130323136353331333365646238例 ...

  4. STM32如何在LCD上显示单词、文字、图片等

    本文将介绍STM32F103R6如何在LCD12864上显示文字图片 注:本文中用到的字模软件,我放在了文章末尾,点击链接即可下载,是绿色版软件,解压即可使用! 点击下载LCD12864上显示文字图片 ...

  5. 点阵LCD12864的显示原理(不带字库)

    点阵LCD12864的显示原理(不带字库) 在数字电路中,所有的数据都是以0和1保存的,对LCD控制器进行不同的数据操作,可以得到不同的结果.对于显示英文操作,由于英文字母种类很少,只需要8位(一字节 ...

  6. 51单片机DS18B20+DS1302+LCD12864实时显示时间日期温度

    文章目录 介绍 Proteus仿真运行效果 源程序 主函数 DS1302时钟函数 DS18B20函数 LCD12864(不带字库) sharing函数 mine头文件 介绍 DS18B20采集温度 D ...

  7. STC15W4K56S4学习笔记——LCD12864滚动显示

    STC15W4K56S4学习笔记--LCD12864滚动显示 ​ 最近在准备学校的单片机校赛,重新回顾了一遍51单片机,上手了STC15W4K56S4试验箱,写一些笔记来记录一下,水平有限,有错误的希 ...

  8. python网页查询然后返回结果_使用pythondjang在html页面上显示查询到的API结果

    我目前正在使用django webframework创建一个python应用程序,它允许用户查询外部API来获取有关食物营养(例如卡路里.脂肪)的信息.目前,当用户在网页上的搜索栏中输入食物时,API ...

  9. R语言ggplot2可视化百分比显示实战:纵轴显示为百分比、在柱状图上显示百分比、按照因子变量绘制分组子图(纵轴显示为百分比)、可视化图中显示数据百分比

    R语言ggplot2可视化百分比显示实战:纵轴显示为百分比.在柱状图上显示百分比.按照因子变量绘制分组子图(纵轴显示为百分比).可视化图中显示数据百分比 目录

  10. R语言使用ggplot2可视化堆叠条形图,并在堆叠条形图上显示数据值实战

    R语言使用ggplot2可视化堆叠条形图,并在堆叠条形图上显示数据值实战 目录 R语言使用gg

最新文章

  1. VRRP在企业网中的应用(H3C设备)
  2. 湖北民族学院c语言试卷,C实验参考答案(湖北民族学院计算机c语言课后习题答案).doc...
  3. apache php隐藏头信息的方法,科技常识:nginx/apache/php隐藏http头部版本信息的实现方法...
  4. 文件的删除和文件信息的读取
  5. mysql备份服务器中的_使用 Shell 备份远程服务器上的 MySQL 数据库到本机
  6. ruby array_Ruby中带有示例的Array.delete_if方法
  7. 程序员每天少吃===活120岁
  8. 怎么用睡袋拉人_宝宝晚上翻身踢被子又着凉了,别再盖被子,给宝宝穿婴儿睡袋吧...
  9. 光纤 matlab,matlab – 均衡光纤通道的最小均方
  10. error: failed to push some refs to ‘......‘解决方案
  11. 51nod-独木舟问题
  12. vue项目,路由跳转页面后滚动条自动回到顶部
  13. stm32mp1 Cortex M4开发篇6:TIM定时器中断
  14. 高琪飞机项目飞机爆炸图片_爆炸式的工作机会和多项目同步
  15. 程序员为什么不写注释
  16. uni-app使用 getUserInfo 报错 fail can only be invoked by user TAP gesture 解决方法
  17. 王的机器第一本书「快乐机器学习」飨你
  18. linux 日志报警,linux日志报警怎么解决
  19. JS添加iframe标签
  20. 【原创】大数据基础之Zookeeper(1)介绍、安装及使用

热门文章

  1. LabVIEW入门教程
  2. php xss漏洞扫描工具,XSS漏洞扫描器工具:XSpear
  3. 关于Matpower用于攻击检测仿真方法的文献摘录
  4. linux下php zipArchive采用ZipArchive::OVERWRITE失败,返回错误码:9
  5. uni中一些插件的使用
  6. TBS 腾讯浏览服务(X5WebView) 集成指南
  7. PHP九九乘法表代码
  8. CRC校验和CRC各种算法
  9. 如何把HTML背景图片变透明,photoshop怎样把图片背景变透明
  10. rman备份mysql_rman备份与还原