目录

Nokia5110 LCD

有片很早以前买的Nokia5110 LCD一直在纸箱里吃灰. 可能是买其它配件时送的? 没有合适的用途一直扔在那里, 偶尔见到总会想什么时候有空给它点一下.

外观长这样. 其实市面上这种模块有几个不同的版本, 另一种版本是上下有两排排针, 方便不同的PCB布局, 功能是一样的.

单色LCD, 84x48像素, 带4颗蓝色LED灯珠作为背光. 显示芯片是Philips PCD8544.

因为是Nokia5110手机的显示屏, 所以一般都叫它Nokia5110 LCD. 在2014年大屏手机还没流行的年代, 这是个相当不错的显示输出设备, 相对于1602和2004LCD, 体积小分辨率高, 便宜量又足.

现在遍地12864的LCD/OLED, 还有分辨率更高的彩色LCD可以选择, 这个模块也就没什么人用了.

PCD8544

  • 菲利普生产的单片低功耗CMOS LCD驱动控制器芯片, 用于驱动84x48像素的LCD
  • 接口是SPI
  • 显示内存 = 6 banks x 84 segments x 8 bits = 4032 bits = 504字节
  • Each bank contains 84 columns/segments (from 0 to 83)
  • Each column can store 8 bits of data (from 0 to 7)

Pin脚

  1. RST 复位
  2. CE 片选, CS
  3. DC 数据/指令选择, D/C
  4. DIN SPI数据, MOSI
  5. CLK SPI时钟线
  6. VCC 电源, 这个模块兼容3.3V和5V, 如果没有标识建议使用3.3V
  7. BL 背光
  8. GND 接地

指令说明

PCD8544 的指令很少, 比 ST7567还少. 显示机制和 ST7567 基本上是一样的.

写数据和写命令

使用D/C pin控制, 高电平表示写入数据, 低电平表示写命令

功能设置

Function set: 0x20, 叠加下面的参数

  • Power down control: 0x04 关机模式
  • Entry mode: 0x02 寻址方式, 设置后变成垂直寻址, 先下再右; 正常模式是先右再下, 一般使用正常模式
  • Extended instruction set: 开启扩展指令. 开启后可以修改温度参数, 电压基准偏移, 显示电压, 后面两个用于调节LCD的对比度

显示控制

Display control: 0x08, 叠加下面的参数

  • Display blank 显示空白: 0x00
  • Normal mode 正常显示: 0x04
  • All display segment on 显示全部: 0x01
  • Inverse video mode 反显模式: 0x05

坐标定位

PCD8544的显示结构

只能定位到字节, 定位后写入数据, 会按设置好的寻址方式往下写

  • 设置x坐标: 0x80 叠加 [0x00, 0x84) 之间的值
  • 设置y坐标: 0x40 叠加 [0x00, 0x06) 之间的值

扩展指令

下面的命令必须在开启扩展指令后执行才有效

  • Temperature control 温度因子, 0x04 叠加取值 [0x00, 0x03]
  • Bias system 电压基准控制, 0x10 叠加取值 [0x00, 0x07]
  • Set Vop 显示电压控制, 0x80 叠加取值 [0x00, 0x7F]

这三个指令需要说明一下, 设置不当可能会显示全黑或者完全无显示

  • 温度因子可以不设置, 使用默认
  • 电压基准设置得越大, 最后的实际显示电压越高, LCD显示部分就越黑, 如果屏幕无显示, 可以先调成0x07试试
  • 显示电压高低和设置的值成正比, 值越高实际显示电压越高, LCD显示部分就越黑

使用 STC8H 进行测试

以下使用 STC8H3K32 和 FwLib_STC8 进行测试

接线

上电前一定要检查一下VCC和GND是否正确, 电压是否正确

P37   -> RES, RESET
P36 -> DC, A0
P35 -> CE, Chip Select
P32 -> SCK, SCL, CLK, Clock
P12 -> BL, Backlight
P34 -> MOSI, Din
GND -> GND
3.3V -> VCC

代码

代码可以从GitHub或者Gitee下载

初始化

// 重置
PCD8544_Reset();
// 设置对比度, 如果显示太淡或太深, 需要自行调整
PCD8544_SetContrast(0x06, 0x20);
// 设置为正常显示模式
PCD8544_SetDisplayNormal();

开启和关闭背光

// 开启背光
PCD8544_SetBackLightState(HAL_State_ON);
// 关闭背光
PCD8544_SetBackLightState(HAL_State_OFF);

清屏

PCD8544_Fill(0);
PCD8544_UpdateScreen();

反显

开启反显后, 需要再设置为正常显示模式才能恢复, 不能通过再次调用反显恢复

PCD8544_SetDisplayInverted();

画线

// 从(0,0)画线到(83,0)
PCD8544_DrawLine(0, 0, 83, 0, 1);
PCD8544_DrawLine(0, 0, 0, 47, 1);
PCD8544_DrawLine(83, 0, 83, 47, 1);
PCD8544_DrawLine(0, 47, 83, 47, 1);
PCD8544_UpdateScreen();

显示文字

// 移动坐标到(3,3)
PCD8544_GotoXY(3, 3);
// 使用5x7字体显示英文
PCD8544_Puts("LCD:PCD8544", &Font_5x7, 1);
PCD8544_UpdateScreen();

关机模式

// 关机
PCD8544_SetPowerDownMode(HAL_State_ON);
// 开机
PCD8544_SetPowerDownMode(HAL_State_OFF);

参数说明

这三个扩展命令会影响显示, 设置不当会变成全白或全黑

#define PCD8544_SETTEMP             0x04 // Extended instruction set - Set temperature coefficient
#define PCD8544_SETBIAS 0x10 // Extended instruction set - Set bias system
#define PCD8544_SETVOP 0x80 // Extended instruction set - Write Vop to register

其中

  • PCD8544_SETTEMP是温度因子, 通常不需要设置
  • PCD8544_SETBIAS是偏压级别, 通常设置为[3,7]之间的指, 对应的写入就是[0x13, 0x17]
  • PCD8544_SETVOP是系统电压, 会受上面的两个参数影响

如果初始化后无显示或显示全黑的, 可以根据上面的范围调整.

演示

视频中可以看到不同基准电压下, 调节显示电压造成的对比度变化

https://www.bilibili.com/video/BV1eF411G7Y7

参考

STC8H开发(十): SPI驱动Nokia5110 LCD(PCD8544)的更多相关文章

  1. STC8H开发(六): SPI驱动ADXL345三轴加速度检测模块

    目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...

  2. STC8H开发(五): SPI驱动nRF24L01无线模块

    目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...

  3. STC8H开发(十二): I2C驱动AT24C08,AT24C32系列EEPROM存储

    目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...

  4. STC8H开发(十四): I2C驱动RX8025T高精度实时时钟芯片

    目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...

  5. STC8H开发(十五): GPIO驱动Ci24R1无线模块

    目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...

  6. STC8H开发(十六): GPIO驱动XL2400无线模块

    目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...

  7. STC8H开发(十三): I2C驱动DS3231高精度实时时钟芯片

    目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...

  8. STC8H开发(七): I2C驱动MPU6050三轴加速度+三轴角速度检测模块

    目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...

  9. STC8H开发(十一): GPIO单线驱动多个DS18B20数字温度计

    目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...

随机推荐

  1. ccf颁奖晚会

    感想: 首先,十分感谢学校给我们参加比赛的机会,给予我们这次难能可贵的学习机会,第一次在这么大型的赛场中展现自己,我们也不免有些紧张.从最开始在线上进行模型训练,到我们不远千里在江苏进行场地的勘察,到 ...

  2. 【Android开发】【第三方SDK】 安卓版分词功能

    功能介绍: 获取剪切板内容,进行分词: 点击分解后的词,填入输入框: 点击叉号将地址拼接起来返回主界面 用途: 增加用户的体验效果,可以直接在微信上复制地址,然后通过此功能确认地址. 附上git地址 ...

  3. Shiro 安全框架详解二(概念+权限案例实现)

    Shiro 安全框架详解二 总结内容 一.登录认证 二.Shiro 授权 1. 概念 2. 授权流程图 三.基于 ini 的授权认证案例实现 1. 实现原理图 2. 实现代码 2.1 添加 maven ...

  4. mysql 合并查询结果

     UNION 使用 UNION 关键字是,数据库系统会将所有的查询结果合并到一起,然后去除掉相同的记录:   UNION ALL 使用 UNION ALL,不会去除掉系统的记录:

  5. Python数据展示 - 生成表格图片

    前言 前一篇文章介绍了推送信息到企业微信群里,其中一个项目推送的信息是使用Python自动生成的表格,本文来讲讲如何用Python生成表格图片. 选一个合适库 Python最大的优点就是第三方库丰富, ...

  6. 从实例学习 Go 语言、"并发内容" 学习笔记及心得体会、Go指南

    第一轮学习 golang "并发内容" 学习笔记,Go指南练习题目解析.使用学习资料 <Go-zh/tour tour>.记录我认为会比较容易忘记的知识点,进行补充,整 ...

  7. 新手小白入门C语言第五章:C存储类

    一 .存储类 在理解C的存储类之前,首先要搞懂的概念有:作用域.生存周期.连接属性 C中的存储类说明符实际上是上述属性的不同组合 作用域:一个C变量的作用域可以是 代码块作用域(在函数内部代码块中定义 ...

  8. 【kubevirt】VirtualMachineInstanceReplicaSet(vmis)-扩缩容-弹性伸缩

    @ 目录 概述/理解 使用场景 创建vmis 扩缩容 弹性伸缩 方法1 方法2 概述/理解 VirtualMachineInstanceReplicaSet(vmis)确保指定数量的 VirtualM ...

  9. 浅谈Java-String到底是值传递还是引用传递?

    参数传递 Java 中的参数传递分为 "值传递""引用传递" 如果你学过 C/C++应该很好理解,就是所谓的 "值传递" 和 "指 ...

  10. 从防御者视角来看APT攻击

    前言 APT防御的重要性毋庸讳言,为了帮助各位师傅在防御方面建立一个总体认识,本文会将APT防御方法分为三类,分别是:监控.检测和缓解技术,并分别进行梳理,介绍分析代表性技术.这一篇分析现有的监控技术 ...