找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1210|回复: 0
收起左侧

STC8H硬件SPI驱动Nokia5110 LCD(PCD8544)

[复制链接]
ID:912806 发表于 2022-6-3 16:54 | 显示全部楼层 |阅读模式
Nokia5110 LCD

原文地址: https://www.cnblogs.com/milton/p/16339805.html

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

外观长这样. 其实市面上这种模块有几个不同的版本, 另一种版本是上下有两排排针, 方便不同的PCB布局, 功能是一样的.
Tutorial-for-Interfacing-Nokia-5110-Graphic-LCD-Display-with-Arduino.png

单色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脚

Nokia-5110-LCD-Module-Pinout.png

RST 复位
CE 片选, CS
DC 数据/指令选择, D/C
DIN SPI数据, MOSI
CLK SPI时钟线
VCC 电源, 这个模块兼容3.3V和5V, 如果没有标识建议使用3.3V
BL 背光
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的显示结构
Nokia-5110-PCD8544-LCD-DDRAM-Memory-Map.png

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

设置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下载

GitHub: https://github.com/IOsetting/FwL ... d8544_nokia5110_lcd
Gitee: https://gitee.com/iosetting/fw-l ... d8544_nokia5110_lcd

初始化
  1. // 重置
  2. PCD8544_Reset();
  3. // 设置对比度, 如果显示太淡或太深, 需要自行调整
  4. PCD8544_SetContrast(0x06, 0x20);
  5. // 设置为正常显示模式
  6. PCD8544_SetDisplayNormal();
复制代码

开启和关闭背光
  1. // 开启背光
  2. PCD8544_SetBackLightState(HAL_State_ON);
  3. // 关闭背光
  4. PCD8544_SetBackLightState(HAL_State_OFF);
复制代码

清屏
  1. PCD8544_Fill(0);
  2. PCD8544_UpdateScreen();
复制代码



反显
开启反显后, 需要再设置为正常显示模式才能恢复, 不能通过再次调用反显恢复
  1. PCD8544_SetDisplayInverted();
复制代码


画线
  1. // 从(0,0)画线到(83,0)
  2. PCD8544_DrawLine(0,   0,  83,  0, 1);
  3. PCD8544_DrawLine(0,   0,   0, 47, 1);
  4. PCD8544_DrawLine(83,  0,  83, 47, 1);
  5. PCD8544_DrawLine(0,  47,  83, 47, 1);
  6. PCD8544_UpdateScreen();
复制代码


显示文字
  1. // 移动坐标到(3,3)
  2. PCD8544_GotoXY(3, 3);
  3. // 使用5x7字体显示英文
  4. PCD8544_Puts("LCD:PCD8544", Font_5x7, 1);
  5. PCD8544_UpdateScreen();
复制代码


关机模式
  1. // 关机
  2. PCD8544_SetPowerDownMode(HAL_State_ON);
  3. // 开机
  4. PCD8544_SetPowerDownMode(HAL_State_OFF);
复制代码


参数说明
这三个扩展命令会影响显示, 设置不当会变成全白或全黑
  1. #define PCD8544_SETTEMP             0x04 // Extended instruction set - Set temperature coefficient
  2. #define PCD8544_SETBIAS             0x10 // Extended instruction set - Set bias system
  3. #define PCD8544_SETVOP              0x80 // Extended instruction set - Write Vop to register
复制代码


其中
PCD8544_SETTEMP是温度因子, 通常不需要设置
PCD8544_SETBIAS是偏压级别, 通常设置为[3,7]之间的指, 对应的写入就是[0x13, 0x17]
PCD8544_SETVOP是系统电压, 会受上面的两个参数影响
如果初始化后无显示或显示全黑的, 可以根据上面的范围调整.

演示

208621973.jpg

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

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


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表