lcd12864简介
带中文字库的128X64是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为128×64,内置8192个16*16点汉字,和128个16*8点ASCII字符集。利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人机交互图形界面。可以显示8×4行16×16点阵的汉字。也可完成图形显示。低电压低功耗是其又一显著特点。由该模块构成的液晶显示方案与同类型的图形点阵液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块。
注:
我们所用的LCD屏的命名,基本都是按照其分辨率来进行命名的 比如lcd1602 就是分辨率为16×2 lcd128128 就是分辨率为128×128
《C语言运算符与操作符的用法全面汇总(非常有用)》
将字符“A”的低四位清零 保留高四位 可以做“A”&240( 0xf0)
0100 0001——————“A”的二进制数
1111 0000——————240的二进制数
------------------
0001 0000 保留了“A”的高四位
将字符“A”的低四位变为高四位 可以用<<(左移运算符) A<<4
0100 0001——————“A”的二进制数
0001 0000 ——————保留了“A”的低四位
6 完成一个字节数据的发送需要24个时钟周期 因为1个字节实际是发送了3个字节 (3x8)
7.只有在时钟线SCLK拉低时,数据线SID上的数据才允许变化,在时钟线SCLK高电平时,SID上的数据必须保持稳定(不能变化)
这点与IIC是相同的
LCD内部资源/显示原理
LCD的控制芯片为ST7920 ,ST7920有丰富的内部资源,并且内部的ROM已经固化存储了中文字库,半角英文/数字字符
也就是自带中文字库
ST7920的内部资源:
提供8 位,4 位并行接口及串行接口可选
自动电源启动复位功能
内部自建振荡源
1、ST7920 内部固化了8192 个16×16 点阵的中文字型在CGROM(2M 位中文字型ROM)里。
2、固化有126 个16*8 点阵的半角英文/数字字符(ASCII)在HCGROM里。
3、提供4个16×16点阵自造字符的存储空间CGRAM(字形产生RAM)。
4、提供128×64的点阵绘图共1024个字节的存储空间GDRAM(点阵绘图RAM)。
5、提供1个16×15点阵图标的存储空间IRAM(ICON RAM)
6、64×16 位字符显示RAM (DDRAM 最多16 字符×4 行)
那么在LCD上显示字符或者汉字是怎么实现的呢:
LCD显示原理:
作为字符显示,在控制器内有个供写入字符代码的缓存器DDRAM ,你只要将要显示的中文字符编码或其他字符编码写入DDRAM(显示数据),也就是串行模式下发送一个字节数据,硬件将依照编码自动从CGROM(2M 中文字型ROM) HCGROM(16K ASCII码ROM) CGRAM(自定义字形RAM)三种字形中自动辨别选择对应的是那种字形的哪个字符/汉字编码,再将要显示的字符/汉字编码显示在屏幕上。
也就是字符显示是通过将字符显示编码写入字符显示RAM(DDRAM )实现的
模块内部的RAM提供64×16的显示空间 ,最多可以显示4行8字(32个汉字)或64个ASCII码字符的显示 一个汉字2个字节
DDRAM一共有32个字符显示区域,当然,字符显示的RAM的地址与32个字符显示区域有着一一对应的关系
字符显示时,DDRAM地址与液晶屏的位置:
通过写入不同的地址,就可以实现字符显示的不同位置
LCD控制指令
LCD12864提供了两套控制命令,分别为基本指令和扩展指令 ,涉及到了LCD的清屏,开关,显示字符位置等等
其实也就是向LCD写入特殊字符而已 ,根据RS和RW可以判断指令方式
下面我们介绍几个常用的:
1清屏
清除屏幕字符 ,也就是对整块屏幕写入空字符 并且将游标移到开始位置 在使用清屏时,需要加上一定的延时等待液晶稳定
RS RW | D7 D6 D5 D4 D3 D2 D1 D0 |
0 0 | 0000 0001 |
2显示状态开关
其中第6位置1打开显示,第7位与第8位对应游标相关设置 一般配置为 0X0C //显示器开,光标关闭,不反白
RS RW | D7 D6 D5 D4 D3 D2 D1 D0 |
0 0 | 0 0 0 0 1 1/0 1/0 1/0 |
3功能设定
DL = 0/1 : 4/8位数据 我们是使用8位 所以为1 RE=1时,使用扩充指令集,RE=0时,使用基本指令集,我们正常使用基本指令集 所以RE需要为0 一般配置为 0X30 // 基本指令集 8bit数据流
RS RW | D7 D6 D5 D4 D3 D2 D1 D0 |
0 0 | 0 0 1 1/0 任意 1/0 任意 任意 |
4游标功能设置
进入点设定 : 是表示在写入或者读取的时候,游标相对于上一个位置的移位 不设置即默认对地址加1(移1位) 如果你想要字符之间有空隙 可以修改移位
游标的位置移动设置,写入相对应的数据即可改变游标位置,实现LCD界面的书写, 32个字符显示区域对应32个地址
5读取BF忙标志和地址
忙标志BF:
BF标志提供内部工作状况,BF=1表示模块内部正在进行操作,此时模块不接受指令和数据. BF=0 模块为准备接受状态,可以接受指令和数据
6读/写数据
就是进行数据的读写,
写数据:
RS RW | D7 D6 D5 D4 D3 D2 D1 D0 |
1 0 | 8bit数据 |
读数据:
RS RW | D7 D6 D5 D4 D3 D2 D1 D0 |
1 1 | 8bit数据 |
7 CGRAM(自定义字形RAM)设置
设定该地址即可自定义字形编码,在显示图片时会先将图片编码写入这里,然后再读它进行显示
LCD初始化
我们把它分为6步分别讲解
1.在开电之后,首先要等待40ms以上,等待液晶自检,使LCD系统复位完成
2. 之后便是功能的设定 选择基本指令集或者扩充指令集 随后延时等待100us以上
3. 功能设定2 选择8bit数据流 或者 4bit数据流 随后延时37us以上
4. 开关显示 是否打开显示开关 随后延时100us以上
5.清屏 清空RAM并初始化光标位置 随后延时10us以上
6. 进入模式选择 也就是设定游标相对于上一个位置的移位 默认为地址自动+1
之后初始化完成,可以对LCD进行数据的写入或读取
当然第二步与第三布写入数据是相同的,可以只写一次然后延时137us以上也可
LCD图片显示
LCD12864在地址的排列上是分为上、下半屏来显示的,上半屏横向的列地址(X)是0-7(00h-07h),下半屏的列地址是8-15(08h-0fh)。而每个一地址都可写入两个字节的内容,它们是按高位在前低位在后排列的。垂直方向上的地址(Y)上半屏是0-31(00h-1fh),下半屏的Y地址仍是0-31(00h-1fh)
也就是一幅图片写入时垂直坐标Y要写64次 (上下屏) 水平横向坐标X要写8次
在每两个字节写入后时候就要重新设置垂直地址,再设置水平地址(连续写入两个字节确定X,Y地址) 然后再写图片的正常编码 这样便可以实现一幅图像的写入 简单说就是对每个位置写入图片的相对于位置的编码
图片显示的步骤
1切换到扩充指令
2 关闭绘图显示功能
3 先将垂直的坐标(Y)写入CGRAM地址
4 再将水平的位元组坐标(X)写入CGRAM地址
5 将高位字节D15-D8写入RAM中
6 将低位字节D7-D0写入到RAM中
重复3-6步,完成图片各个部分的写入 先写上半屏,再写下半屏
7 打开绘图显示功能 8切换回基本指令
其实也就是先打开CGRAM(自定义字形RAM) 然后把定义好的图片编码写入CGRAM 然后再对DDRAM正常写入该图片编码, 这时硬件将依照编码从CGRAM(自定义字形RAM)读取之前写入的图片编码,然后显示该图片
具体看代码即可
注意事项:
用带中文字库的128X64显示模块时应注意以下几点:
PS: 图片显示之后需要加上延时,否则会持续写入,不会有图片显示
图片写入CGRAM(自定义字形RAM)时必须要先写垂直地址坐标,再写水平地址坐标
①欲在某一个位置显示中文字符时,应先设定显示字符位置,即先设定显示地址,再写入中文字符编码。
②显示ASCII字符过程与显示中文字符过程相同。不过在显示连续字符时,只须设定一次显示地址,由模块自动对地址加1指向下一个字符位置,否则,显示的字符中将会有一个空ASCII字符位置。
③当字符编码为2字节时,应先写入高位字节,再写入低位字节。
④模块在接收指令前,向处理器必须先确认模块内部处于非忙状态,即读取BF标志时BF需为“0”,方可接受新的指令。如果在送出一个指令前不检查BF标志,则在前一个指令和这个指令中间必须延迟一段较长的时间,即等待前一个指令确定执行完成。指令执行的时间请参考指令表中的指令执行时间说明。
⑤“RE”为基本指令集与扩充指令集的选择控制位。当变更“RE”后,以后的指令集将维持在最后的状态,除非再次变更“RE”位,否则使用相同指令集时,无需每次均重设“RE”位。
上一篇:【STM32】STM32驱动 LCD12864程序代码(串行方式)
下一篇:STM32系统学习——RCC(使用HSE/HSI配置时钟)
推荐阅读最新更新时间:2024-11-11 22:40
设计资源 培训 开发板 精华推荐
- 使用 Semtech 的 SC4609 的参考设计
- LMV358MUTAG 运算放大器电压基准的典型应用电路
- DC573A、LTC2400CS8 演示板、24 位 Delta Sigma ADC
- 使用 Analog Devices 的 LTC6905CS5-100 的参考设计
- 使用 Analog Devices 的 LT1110CN8 的参考设计
- LTC1727ES8-5 单 5V 电源监视器的典型应用
- 使用 OP297 的 OP297EZ 简单桥式放大器的典型应用
- 简单的 400mV 系列参考
- DC2460A,基于 LTC5566 300MHz 至 6GHz 双路可编程增益下变频混频器的演示板
- ADR435A 5 Vout 超低噪声 XFET 电压基准的典型应用,具有灌电流和拉电流能力
- 有奖直播:如何利用瑞萨电子的GreenPAK™平台优化混合信号电路设计
- Littelfuse【智能家居的电路保护方案】在线研讨会 11月22日10点 强势登场!预报名、参与研讨会赢好礼!
- 下载安森美半导体 KNX 技术文档赢精美礼品!
- 我是大侦探之:寻找遗落的TI电源拼图
- 下载有好礼!超多精美礼品等您拿!
- 有奖直播:当代物联网智能天线设计趋势
- 4月25日上午10:00-11:30 ADI与您相约 TOF (Time Of Flight) 技术介绍及产品应用 有奖直播
- 看视频抽好礼:Type-C承载的高速串行标准,功能多样,挑战也不小
- Nexperia有奖直播|电动汽车中车规功率MOSFET和氮化镓器件的介绍及应用