首页 > 其他分享 >带I2C的LCD12864使用经验总结和例程(RSCG12864B)

带I2C的LCD12864使用经验总结和例程(RSCG12864B)

时间:2024-10-01 10:12:25浏览次数:7  
标签:例程 图片下载 RSCG12864B LCD12864 指令 地址 屏幕 I2C 下载

搬运说明:本文是本人在24年4月CSDN上发布的,现全文搬运至博客园,图片水印暂未去除,并删除原CSDN博文。

本文简要说明了带I2C协议的LCD12864屏幕的使用经验与教训,特别是厂家说明书说法有误或未提及的内容。文末也提供一个本人编写的STC89C52单片机读取SHT30温湿度传感器并显示在LCD12864屏幕上的例程,这两个模块都是I2C通信的。

目录

0.概况

1.I2C地址

2.隐藏指令

3.字符串显示指令的结尾问题

4.图片下载器使用

5.使用例程

6.小结

0.概况
X宝上卖带I2C通信的带中文字库的LCD12864液晶屏的店铺很少,源头厂家似乎都是深圳Raylid,型号是RSCG12864B。并且内建Flash,可以长期存储若干张图片(具体多少还没详细测试,至少6张没问题),有一定的可玩性。图片下载需要用到原厂的“图片下载器”,实物图如下。

我买的店铺提供了原厂说明书,他们的技术网站提供了些资料;原厂官网资料也很少,其它的资料基本就没了。在调试使用时遇到不少问题,简要总结以下,和大家分享。

X宝店铺的技术网站(https://www.yuque.com/ultirobot/arduino/fybqqke17ox2rtm9)

厂家官网(http://www.raylid.cn/)

1.I2C地址
说明书第7小节指出这块I2C屏幕支持通过广播地址0x00发送指令,实测也是没问题的。

当时我考虑到I2C总线上挂载众多模块时,广播地址也许会有冲突或者不好使的时候,就拼命想知道器件的唯一地址。问店铺客服,他们也只知道广播地址。后来仔细阅读说明书第7小节关于数据包格式的内容,发现厂家给的图片中提到了器件地址的前5bit都是1,再结合A1、A0两个自定义地址引脚就可以知道完整的I2C地址。出厂时A1=A0=1,因此向I2C LCD屏幕写入指令的地址就是0b1111 1110,也就是0xfe。

2.隐藏指令
使用过程中还发现说明书未提到的隐藏指令:

① 显示出厂预置的版本信息的0x00指令

注意,这里说的是指令,而不是广播地址0x00。也就是说通过I2C总线发送0x00(广播地址) 0x00(指令),即发送2次0x00,屏幕就会以最大亮度显示型号、版本信息,可用于初步判断屏幕好坏。

② 和图片下载有关0xc0 00 0c命令

原厂图片下载器板卡上用了CH340芯片,所以我想它和我另外购买的USB转I2C调试器功能应该差不多。通过逻辑分析仪监测,图片下载器向LCD屏幕传输图片时的关键指令是0xc0 00 0c,这条指令后紧跟着就是1KB×n的图片数据。不接屏幕下载器,用USB转I2C调试器,手动发送这条命令也是可以让LCD进入图片下载模式的。(下图第一行0x13 80是设置屏幕亮度,第二行0xc0 00 0c是启动图片下载指令,从第3行以后的N多行是图片数据,这里的图片数据就是Image2Lcd软件生成bin文件的十六进制数据)

3.字符串显示指令的结尾问题
根据说明书,0x24~0x28是显示ASCII/汉字的指令,这几条命令表示字体大小不同,命令格式均为0x2?后紧跟字符十六进制数据,最后发送一个结尾符号。重点来了,坑爹的中文说明书说每条字符串显示指令以0x0d作为结尾符号。

例如,我从USB转I2C调试器,多次发送显示“ABC”的指令(0xfe 24 41 42 43,多次发送时屏幕光标自动往后移动)。不写结尾符号时,会发现两次之间多了一个$符号,它对应的ASCII码就是0x24,也就是说不写结尾符号,屏幕就一直处于显示字符串的指令中,后续发送的所有命令或数据都将被视为是字符串的组成数据。

如果我发送中文说明书要求的0x0d结尾符号,就会发现两次之间不仅多了一个$符号,还多了一个空格(或者是无法显示的ASCII字符)。一查ASCII码表,0x0d对应的字符就是无法显示的。

最终是查询英文说明书,发现上面写的是以字符串显示指令以0x00结尾!!!一试果然就正常,多次发送时不会有多于符号或空格了。说好的中国人不骗中国人的呀,厂家也太坑了吧!

4.图片下载器使用
这个下载器是脱机下载的,也就是说通过厂家的上位机软件,是把图片数据下载到板卡的存储空间里面了。

上位机传输图片时,可以接OR不接屏幕在下载器上。得按RESET按钮,使下载器进入接收数据的状态,再去点击下载。

下载器脱机使用时也是从USB取电,此时下载器和屏幕连接好,先按RESET,再按ENTER,就开始从下载器向屏幕传输图片数据。原厂说明书没有讲清楚脱机下载步骤。另外根据说明书,下载器的ON/OFF开关不是指打开或关闭下载器,而是批量连续下载和单次下载的选择,批量下载是指有很多片屏幕,都需要下载同样的图片文件;单次下载是指向单块屏幕传输完成图片文件后,ENTER键成为浏览图片的功能键,按一下ENTER,屏幕就循环显示内置Flash中的一张图片,按顺序显示。

5.使用例程
实验案例中,将这块LCD12864屏幕和SHT30温湿度传感器,挂载到同一条I2C总线上,另外还有一块常规并口驱动的LCD1602。在LCD1602上显示温湿度,在I2C LCD12864上显示温度。

调试时发现I2C LCD12864总是显示不正常。一部分原因是上面第3条提到的字符串显示指令结尾的问题,在找到正确的结尾数据后关于字符串的显示基本正常了。除此之外,还有其它未知的错误,导致I2C屏幕有时错误显示出厂信息,屏幕处于最大亮度,而且多余信息不会消除掉,也就是下图所示的样子。结合第2条所述,我猜应该是I2C屏幕从I2C总线上错误地收到了0x00指令,这是显示出厂信息的指令。用逻辑分析仪观察,也确实看到了向I2C LCD屏幕(地址0xfe)写入00命令。最后也不知道怎么的,在主程序中交换了SHT30的初始化函数和I2C LCD的初始化函数,即先初始化I2C LCD,延时一段时间后初始化SHT30,问题似乎就解决了。

另外,本人菜鸟,非电子专业科班,暂时不会画电路原理图,各位如果照着例程做,看程序注释应该能明白接线图。使用的是最常规的STC89C52RC单片机,工作在6T模式下。

6.小结
上面提到的几点仅为本人在实验使用时遇到的波折,仅供各位参考,欢迎讨论指导。关于这块屏幕的中英文说明书、图片下载器说明书、使用例程的源代码文件都打包在这里了。

标签:例程,图片下载,RSCG12864B,LCD12864,指令,地址,屏幕,I2C,下载
From: https://www.cnblogs.com/qianqiuxue/p/18442708

相关文章

  • 24 基于51单片机的公交车报站仿真(LCD12864、DS1302、串口)
    目录一、主要功能二、硬件资源三、程序编程四、实现现象一、主要功能基于51单片机,采用DS1302时钟模块读取时间,通过LCD12864显示实时时间,然后两个按键,一个按下表示到站,一个按下表示没到站。到达站点,蜂鸣器发出声音,屏幕显示到站,通过串口发送信息如果没到站,屏幕显示未......
  • ADAU1701的Dynamics Processors算法补充例程合集(10个例程)
    作者的话做ADAU1701,心血来潮,再过了一遍SigmaDSP的算法合辑,发现有不少遗留的,比较有特点的算法,就在这个系列文章里一一呈现吧。ADAU1701我写了超过100个例程,但是都很早期,2018年开始弄的,我感觉并不是很全,那这一次就彻底把他补全一下,这个系列文章,将把我能够找到的,ADI原厂提供......
  • 10 Windows批处理之调用例程和bat文件
    在前文中,我介绍了标签和非顺序执行,这两者在本文中也起着重要作用。我将很快介绍一个已经讨论过的命令的新变化,允许您创建和调用由标签定义的例程。不是简单地在标签之后将控制权交给代码,而是在例程执行后将控制权返回到调用它的位置。在编写更复杂、更有趣的bat文件时,您需要完全理......
  • 10 Windows批处理之调用例程和bat文件
    在前文中,我介绍了标签和非顺序执行,这两者在本文中也起着重要作用。我将很快介绍一个已经讨论过的命令的新变化,允许您创建和调用由标签定义的例程。不是简单地在标签之后将控制权交给代码,而是在例程执行后将控制权返回到调用它的位置。在编写更复杂、更有趣的bat文件时,您需要完全理......
  • MATLAB代码|中心差分卡尔曼滤波(CDKF)的滤波例程,无需下载,直接复制到MATLAB上面就能运行
    文章目录CDKF介绍代码运行结果各模块解析初始化系统模型设置CDKF循环绘图另有关于EKF和CDKF的对比程序:EKF+CDKF两个滤波的MATLAB程序,估计三轴位置,带中文注释——https://blog.csdn.net/callmeup/article/details/136610153。CDKF介绍中心差分卡尔......
  • MATLAB下的粒子滤波例程|三维非线性模型|组合导航|PF代码(无需下载,直接复制到MATLAB上
    文章目录模型与程序概述PF介绍运行结果程序代码各部分模块的作用模型与程序概述模拟INS、GPS组合导航的应用背景。在模型预处理的时候通过迭代计算三维位置的真值和滤波前(模拟纯INS计算)的值。通过PFPFPF(粒子滤波,p......
  • 正点原子Linux Framebuffer编程:解决示例程序在开发板上LCD显示错位和颜色异常
    正点原子LinuxFramebuffer编程:解决示例程序在开发板上运行7寸LCD显示错位和颜色异常作者在学习【正点原子】I.MX6U嵌入式LinuxC应用编程指南V1.4时,发现其配套的程序在开发板上运行不正常。使用的硬件版本:正点原子I.MX6UALPHAV2.4版本底板,LCD:正点原子7寸1024*600,型号ATK-MD0......
  • FPGA案例程序
    由于FPGA编程通常依赖于特定的硬件描述语言(HDL)和FPGA开发环境(如XilinxVivado、IntelQuartus等),以下代码将以VerilogHDL为例,并且是一个高度简化的示例,用于说明FPGA编程的基本概念。以下是一个简单的Verilog模块,该模块实现了一个基本的计数器功能。计数器从0开始计数,每当接......
  • BOOST c++库学习 之 boost.thread入门实战指南 使用boost.thread库以及读写锁mutex的
    Boost.Thread库简介1.概述Boost.Thread库是Boost库中专门用于处理多线程编程的模块。它提供了一组跨平台的线程管理和同步工具,帮助开发者在C++中更轻松地编写多线程程序。Boost.Thread的设计目标是使多线程编程更加简单、可靠,同时保持高效和可移植性。2.Boost.Thread......
  • VannaAI(带有 Ollama 和 ChromaDB)示例程序在训练模型步骤失败
    我开始测试VannaAI,并且我正在运行一个基于使用Ollama、ChromaDB为Postgres生成SQL的示例程序:fromvanna.ollamaimportOllamafromvanna.chromadbimportChromaDB_VectorStoreclassMyVanna(ChromaDB_VectorStore,Ollama):def__init__(self,confi......