STC8H开发(十): SPI驱动Nokia5110 LCD(PCD8544)
目录
- STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解)
- STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解)
- STC8H开发(三): 基于FwLib_STC8的模数转换ADC介绍和演示用例说明
- STC8H开发(四): FwLib_STC8 封装库的介绍和使用注意事项
- STC8H开发(五): SPI驱动nRF24L01无线模块
- STC8H开发(六): SPI驱动ADXL345三轴加速度检测模块
- STC8H开发(七): I2C驱动MPU6050三轴加速度+三轴角速度检测模块
- STC8H开发(八): NRF24L01无线传输音频(对讲机原型)
- STC8H开发(九): STC8H8K64U模拟USB HID外设
- STC8H开发(十): SPI驱动Nokia5110 LCD(PCD8544)
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脚
- 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的显示结构
只能定位到字节, 定位后写入数据, 会按设置好的寻址方式往下写
- 设置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: FwLib_STC8/tree/master/demo/spi/pcd8544_nokia5110_lcd
- Gitee: FwLib_STC8/tree/master/demo/spi/pcd8544_nokia5110_lcd
初始化
// 重置
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
参考
- https://github.com/adafruit/Adafruit-PCD8544-Nokia-5110-LCD-library
- https://lastminuteengineers.com/nokia-5110-lcd-arduino-tutorial/
- 使用Arduino UNO 驱动 Nokia5110 LCD https://www.youtube.com/watch?v=VtZvf5T98FI
STC8H开发(十): SPI驱动Nokia5110 LCD(PCD8544)的更多相关文章
- STC8H开发(六): SPI驱动ADXL345三轴加速度检测模块
目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...
- STC8H开发(五): SPI驱动nRF24L01无线模块
目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...
- STC8H开发(十二): I2C驱动AT24C08,AT24C32系列EEPROM存储
目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...
- STC8H开发(十四): I2C驱动RX8025T高精度实时时钟芯片
目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...
- STC8H开发(十五): GPIO驱动Ci24R1无线模块
目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...
- STC8H开发(十六): GPIO驱动XL2400无线模块
目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...
- STC8H开发(十三): I2C驱动DS3231高精度实时时钟芯片
目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...
- STC8H开发(七): I2C驱动MPU6050三轴加速度+三轴角速度检测模块
目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...
- STC8H开发(十一): GPIO单线驱动多个DS18B20数字温度计
目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...
随机推荐
- 每日学习--Kociemba魔方算法
由图可知19步还原魔方
- caioj 1031: [视频]递归1(全排列)【DFS】【全排列】
题目大意:先给一个正整数 n( 1 < = n < = 10 ),输出1到n的所有全排列. 题解:这道题目我们可以用递归来实现,递归在图论中又称为"深度优先搜索"(De ...
- Django + Taro 前后端分离项目实现企业微信登录
前言 还是最近在做的一个小项目,后端用的是Django搭配RestFramework做接口,前端第一次尝试用京东开源的Taro框架来做多端(目前需要做用于企业微信的H5端和微信小程序) 本文记录一下企 ...
- JDK1.8.0_181的无限制强度加密策略文件变动(转载)
JDK1.8.0_181的无限制强度加密策略文件变动 原文地址 https://my.oschina.net/my1313677/blog/3109613 作者 葉者 日常记录 2019/09/23 ...
- Linux内核--链表结构(一)
一.前言 Linux内核链表结构是一种双向循环链表结构,与传统的链表结构不同,Linux内核链表结构仅包含前驱和后继指针,不包含数据域.使用链表结构,仅需在结构体成员中包含list_head*成员就行 ...
- Java实现负载均衡算法--轮询和加权轮询
1.普通轮询算法 轮询(Round Robin,RR)是依次将用户的访问请求,按循环顺序分配到web服务节点上,从1开始到最后一台服务器节点结束,然后再开始新一轮的循环.这种算法简单,但是没有考虑到每 ...
- acwing刷题--激光炸弹--前缀和(后期会有优化做法)
地图上有 N 个目标,用整数 Xi,Yi 表示目标在地图上的位置,每个目标都有一个价值 Wi. 注意:不同目标可能在同一位置. 现在有一种新型的激光炸弹,可以摧毁一个包含 R×R 个位置的正方形内的所 ...
- Java web与web gis学习笔记(一)——Tomcat环境搭建
系列链接: Java web与web gis学习笔记(一)--Tomcat环境搭建 Java web与web gis学习笔记(二)--百度地图API调用 JavaWeb和WebGIS学习笔记(三)-- ...
- MySQL数据存储
MySQL体系架构 客户端连接器 提供与MySQL服务器建立的支持.目前几乎支持所有主流的服务端编程技术,例如常见的 Java.C.Python..NET等,它们通过各自API技术与MySQL建立连接 ...
- vue build 指定环境
前言 其实很简单的东西,搜索时很是费劲,特此记录下来.网上有很多资料,但都是五花八门,特此记录 使用 项目根目录中创建环境变量使用文件 .env #所有环境都会加载 .env.development ...