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

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

目录

0.概况

1.I2C地址

2.隐藏指令

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

4.图片下载器使用

5.使用例程

6.小结


0.概况

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

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

X宝店铺的技术网站lcd12864显示屏_iic接口 · 语雀

厂家官网

RS232液晶屏_USB液晶屏_I2C液晶屏_SPI液晶屏_LVDS屏_HDMI屏_TFT液晶模块_点阵屏_黑白屏_OLED_触摸屏_显示管_机箱屏_显示屏生产厂家

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.小结

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

https://download.csdn.net/download/shmilyuho/89229723

  • 16
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
I2C接口12864LCD是一种液晶屏,它使用I2C总线进行通信。这种液晶屏通常使用ST7920、KS0107+KS0108或KS0086等主控芯片\[1\]。其中,RSCG12864B是一款具有I2C接口的COB液晶屏,它内建了中文字库(GB2312)和ASCII的三种点阵字库,分别是5*7点阵、6*12点阵和8*16点阵。这款液晶屏最出色的特点是可以存储多达2000张图片,只需将BIN格式的图片制作好并使用相应的下载工具,就可以将图片存储到液晶模块上\[1\]。 在使用I2C接口12864LCD时,需要进行相应的程序设计和硬件连接。例如,在STM32环境下,可以使用STM32F103C8T的I2C1控制RSCG12864B。具体的硬件连接是将PB7(SDA)连接到RSCG12864B的SDA引脚,将PB6(SCL)连接到RSCG12864B的SCL引脚。RSCG12864B内部自复位信号,并且支持通过RST硬件复位。此外,RSCG12864B的BUSY信号可以连接到MCU的任意IO口进行忙反馈信号的判断处理\[3\]。 在程序设计方面,可以使用"STM32CubeMX"工具生成项目文件,并添加RAYLID提供的应用库,以实现对LCD的控制。具体的步骤包括选择MCU型号、配置参数、项目设置、Library类型选择等。然后,通过点击"GENERATE CODE"生成项目文件,并将"RSCG12864B.c"拷贝至项目文件夹的"Src"目录下,将"RSCG12864B.h"拷贝至项目文件夹的"Inc"目录下。最后,在main函数中添加相应的显示代码,即可实现对LCD的控制\[3\]。 总之,I2C接口12864LCD是一种具有I2C接口的液晶屏,它可以通过I2C总线与MCU进行通信,并具有丰富的功能和存储图片的能力。在使用时,需要进行相应的程序设计和硬件连接\[1\]\[3\]。 #### 引用[.reference_title] - *1* [Arduino驱动I2C接口12864LCD大屏液晶模块方法及库文件](https://blog.csdn.net/lcdclass/article/details/65446526)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [【ESP32】12.I2C LCD1602液晶显示实验(LiquidCrystal_I2C库)](https://blog.csdn.net/super828/article/details/127456069)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [STM32如何驱动IIC接口12864液晶显示屏实战例程](https://blog.csdn.net/MASTA1/article/details/89388071)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值