目录

ST7567介绍

ST7567是128x64分辨率单色LCD液晶显示屏常用的芯片方案. ST7567是点阵LCD驱动集成电路, 可以使用8位并口或4线SPI串口(SPI-4)直接连接外部微控制器. 从MPU传输的数据存储在内部65x132 bits的显示数据内存(DDRAM). 在 DDRAM 中存储的数据与LCD点阵直接关联. ST7567 包含 132 段输出, 64 位输出和 1 个公共图标输出, 输出不需要外部时钟驱动.

特性

单片驱动 Single-chip LCD Controller & Driver, 片内显示内存 On-chip Display Data RAM (DDRAM)

  • 容量Capacity: 65x132=8580 bits
  • 直接显示模式 Directly display RAM pattern from DDRAM

可选的显示占空比 Selectable Display Duty (by SEL2 & SEL1)

  • 1/65 duty : 65 common x 132 segment
  • 1/55 duty : 55 common x 132 segment
  • 1/49 duty : 49 common x 132 segment
  • 1/33 duty : 33 common x 132 segment

微控制器接口 Microprocessor Interface

  • 双向8位并口Bidirectional 8-bit parallel interface supports: 8080-series and 6800-series MPU
  • SPI-4串口(只写) Serial interface (SPI-4) is also supported (write only)

附加功能 Abundant Functions

  • 显示开关 Display ON/OFF,
  • 正显/反显 Normal/Reverse Display Mode,
  • 设置显示开始位置 Set Display Start Line,
  • 读取IC状态 Read IC Status,
  • 显示全部点阵 Set all Display Points ON,
  • 设置LCD基准 Set LCD Bias,
  • 电量控制 Electronic Volume Control,
  • 写入后保持起点 Read-modify-Write,
  • 段驱动方向设置 Select Segment Driver Direction,
  • 节电模式 Power Saving Mode,
  • 位驱动方向设置 Select Common Driver Direction,
  • 电压调节电阻比值设置 Select Voltage Regulator Resistor Ratio (for V0).

外部硬件复位脚 External Hardware Reset Pin (RSTB)

内建振荡信号源 Built-in Oscillation Circuit

  • 无需外部振荡源 No external component required

低功耗模拟电路 Low Power Consumption Analog Circuit

  • Voltage Booster (4X, 5X)
  • High-accuracy Voltage Regulator for LCD Vop: (Thermal Gradient: -0.05%/°C)
  • Voltage Follower for LCD Bias Voltage

Wide Operation Voltage Range

  • VDD1-VSS1=1.8V~3.3V
  • VDD2-VSS2=2.4V~3.3V
  • VDD3-VSS3=2.4V~3.3V

温度范围 Temperature Range: -30~85°C

封装类型 Package Type: COG

指令表

命令模式和数据模式的切换

  • A0低: 命令模式
  • A0高: 数据模式

指令列表

  1. Display ON/OFF

    AF:ON, AE:OFF
  2. Set Start Line

    0 0 0 1 S5 S4 S3 S2 S1 S0 Set display start line
  3. Set Page Address

    0 0 1 0 1 1 Y3 Y2 Y1 Y0 Set page address
  4. Set Column Address

    0 0 0 0 0 1 X7 X6 X5 X4 Set column address (MSB)

    0 0 0 0 0 0 X3 X2 X1 X0 Set column address (LSB)
  5. Read Status: Read IC Status

    0 1 0 MX D RST 0 0 0 0
  6. Write Data: Write display data to RAM

    1 0 D7 D6 D5 D4 D3 D2 D1 D0
  7. Read Data: Read display data from RAM

    1 1 D7 D6 D5 D4 D3 D2 D1 D0
  8. SEG Direction: Set scan direction of SEG

    0 0 1 0 1 0 0 0 0 MX

    MX=1, reverse direction

    MX=0, normal direction
  9. Inverse Display: INV =1, inverse display, INV =0, normal display

    0 0 1 0 1 0 0 1 1 INV
  10. All Pixel ON: AP=1, set all pixel ON, AP=0, normal display

    0 0 1 0 1 0 0 1 0 AP
  11. Bias Select: Select bias setting, 0=1/9; 1=1/7 (at 1/65 duty)

    0 0 1 0 1 0 0 0 1 BS
  12. Read-modify-Write: Column address increment: Read:+0 , Write:+1

    0 0 1 1 1 0 0 0 0 0
  13. END: Exit Read-modify-Write mode

    0 0 1 1 1 0 1 1 1 0
  14. RESET: Software reset

    0 0 1 1 1 0 0 0 1 0
  15. COM Direction: Set output direction of COM, MY=1, reverse direction, MY=0, normal direction

    0 0 1 1 0 0 MY - - -
  16. Power Control, Control built-in power circuit ON/OFF

    0 0 0 0 1 0 1 VB VR VF
  17. Regulation Ratio: Select regulation resistor ratio

    0 0 0 0 1 0 0 RR2 RR1 RR0
  18. Set EV: Double command, Set EV0 electronic volume (EV) level

    0 0 1 0 0 0 0 0 0 1

    0 0 0 0 EV5 EV4 EV3 EV2 EV1 EV0
  19. Set Booster: Double command, Set booster level: BL=0: 4X, BL=1: 5X

    0 0 1 1 1 1 1 0 0 0

    0 0 0 0 0 0 0 0 0 BL
  20. Power Save: Display OFF + All Pixel ON

    0 0 + Compound Command
  21. NOP: No operation

    0 0 1 1 1 0 0 0 1 1
  22. Test: Do NOT use. Reserved for testing.

    0 0 1 1 1 1 1 1 1 -

ST7567 128x64 LCD 模块

模块规格图

PIN脚定义

  1. NC
  2. NC
  3. LED_A 背光正极, 加1~5K电阻后接VCC, 或连接GPIO以便程序控制背光
  4. LED_K 背光负极, 接地
  5. GND 接地
  6. CSB 片选, CS
  7. RESET 复位脚, 接GPIO
  8. AO 命令/数据切换
  9. SCLK SPI时钟
  10. SDA SPI MOSI
  11. VDD 接VCC
  12. VSS 逻辑地, 接地
  13. VO: V0 is the LCD driving voltage for common circuits at negative frame.
  14. XVO: XV0 is the LCD driving voltage for common circuits at positive frame.
  15. VG: VG is the LCD driving voltage for segment circuits.
  16. GND 接地
  17. NC
  18. NC

接线

完整需要10根接线, 其中LED_A可以加电阻后直接接3.3V, RESET可以悬空, 这样只需要接8根线.

3. LED_A 加1~5K电阻 -> PB16
4. LED_K -> GND
5. GND -> GND
6. CSB -> PB14
7. RESET -> PB10
8. AO -> PB11
9. SCLK -> PB15
10. SDA -> PB17
11. VDD -> 3.3V
12. VSS -> GND

演示代码的使用

SPI驱动部分与SSD1306相同, 指令很少, 只有22个, 与SSD1306相比, 增加了背光控制, 增加了硬件复位.

本示例使用的代码

指令定义

/* ST7567 commands definitions */
#define ST7567_DISPLAY_OFF 0xAE /* 0xae: Display OFF (sleep mode) */
#define ST7567_DISPLAY_ON 0xAF /* 0xaf: Display ON in normal mode */ #define ST7567_SET_START_LINE 0x40 /* 0x40-7f: Set display start line */
#define ST7567_SET_START_LINE_MASK 0x3f #define ST7567_SET_PAGE_ADDRESS 0xB0 /* 0xb0-b7: Set page start address */
#define ST7567_SET_PAGE_ADDRESS_MASK 0x07 #define ST7567_SET_COLUMN_ADDRESS_MSB 0x10 /* 0x10-0x1f: Set higher column address */
#define ST7567_SET_COLUMN_ADDRESS_MSB_MASK 0x0f #define ST7567_SET_COLUMN_ADDRESS_LSB 0x00 /* 0x00-0x0f: Set lower column address */
#define ST7567_SET_COLUMN_ADDRESS_LSB_MASK 0x0F /**
* SEG: 0 - 131
*/
#define ST7567_SEG_DIRECTION_NORMAL 0xA0 /* 0xa0: Column address 0 is mapped to SEG0 */
#define ST7567_SEG_DIRECTION_REVERSE 0xA1 /* 0xa1: Column address 128 is mapped to SEG0 */ /**
* COM: 0 - 63
*/
#define ST7567_COM_DIRECTION_NORMAL 0xC0 /* 0xc0: Set COM output direction, normal mode */
#define ST7567_COM_DIRECTION_REVERSE 0xC8 /* 0xc8: Set COM output direction, reverse mode */ #define ST7567_INVERSE_DISPLAY_OFF 0xA6 /* 0xa6: Normal display */
#define ST7567_INVERSE_DISPLAY_ON 0xA7 /* 0xa7: Inverse display */ #define ST7567_ALL_PIXEL_ON 0xA5 /* 0xa5: Entire display ON */
#define ST7567_ALL_PIXEL_NORMAL 0xA4 /* 0xa4: Resume to RAM content display */ #define ST7567_BIAS_1_9 0xA2 /* 0xa2: Select BIAS setting 1/9 */
#define ST7567_BIAS_1_7 0xA3 /* 0xa3: Select BIAS setting 1/7 */ #define ST7567_READ_MODIFY_WRITE_START 0xE0 /* 0xe0: Enter the Read Modify Write mode */
#define ST7567_READ_MODIFY_WRITE_END 0xEE /* 0xee: Leave the Read Modify Write mode */
#define ST7567_RESET 0xE2 /* 0xe2: Software RESET */ /**
* This instruction controls the built-in power circuits.
* Typically, these 3 flags are turned ON at the same time.
*/
#define ST7567_POWER_CONTROL 0x28
#define ST7567_POWER_CONTROL_VF 0x01
#define ST7567_POWER_CONTROL_VR 0x02
#define ST7567_POWER_CONTROL_VB 0x04 /**
* The operation voltage (V0) calculation formula is shown below:
* (RR comes from Regulation Ratio, EV comes from EV[5:0])
* V0 = RR X [ 1 – (63 – EV) / 162 ] X 2.1, or
* V0 = RR X [ ( 99 + EV ) / 162 ] X 2.1
*/
#define ST7567_REGULATION_RATIO 0x20
#define ST7567_REGULATION_RATIO_3_0 0x00
#define ST7567_REGULATION_RATIO_3_5 0x01
#define ST7567_REGULATION_RATIO_4_0 0x02
#define ST7567_REGULATION_RATIO_4_5 0x03
#define ST7567_REGULATION_RATIO_5_0 0x04 /* Default */
#define ST7567_REGULATION_RATIO_5_5 0x05
#define ST7567_REGULATION_RATIO_6_0 0x06
#define ST7567_REGULATION_RATIO_6_5 0x07 /**
* This is double byte instruction. The first byte set ST7567 into EV
* adjust mode and the following instruction will change the EV setting.
* That means these 2 bytes must be used together. They control the electronic
* volume to adjust a suitable V0 voltage for the LCD.
*/
#define ST7567_SET_EV 0x81
#define ST7567_SET_EV_MASK 0x3F #define ST7567_SET_BOOSTER 0xF8 /* Set booster level */
#define ST7567_SET_BOOSTER_4X 0x00
#define ST7567_SET_BOOSTER_5X 0x01 #define ST7567_NOP 0xE3
#define ST7567_TEST 0xFE

显示内存和偏移量

ST7567的显示与内存并非一一对应, 每一行为132byte, 这额外的4个byte并不会显示在屏幕上, 但是会占位.

/**
* In datasheet, it says "the column address is increased (+1) after each display
* data access (read/write). This allows MPU accessing DDRAM content continuously.
* This feature stops at the end of each page (Column Address “83h”) because the
* Column Address and Page Address circuits are independent. For example, both Page
* Address and Column Address should be assigned for changing the DDRAM pointer
* from (Page-0, Column-83h) to (Page-1, Column-0)."
* In actual test the Page Address will grow automatically.
*/
/* ST7567 data buffer */
static uint8_t ST7567_Buffer_all[(ST7567_WIDTH + ST7567_SEG_EXPAND) * ST7567_HEIGHT / 8];

在行方向翻转后, 需要在代码中考虑这4个byte的偏移量, 否则显示会不完整.

#if ST7567_X_ORIENT == ST7567_SEG_DIRECTION_REVERSE
#define ST7567_X_OFFSET ST7567_SEG_EXPAND
#else
#define ST7567_X_OFFSET 0
#endif // 基础方法: 在指定的位置绘制点
void ST7567_DrawPixel(uint16_t x, uint16_t y, uint8_t color)
{
if (x >= ST7567_WIDTH || y >= ST7567_HEIGHT)
{
/* Error */
return;
} if (color == ST7567_COLOR_FRONT)
{
ST7567_Buffer_all[ST7567_X_OFFSET + x + (y / 8) * (ST7567_WIDTH + ST7567_SEG_EXPAND)] |= 1 << (y % 8);
}
else
{
ST7567_Buffer_all[ST7567_X_OFFSET + x + (y / 8) * (ST7567_WIDTH + ST7567_SEG_EXPAND)] &= ~(1 << (y % 8));
}
}

设置项

在 st7567.h 中, 对以下宏定义进行设置. 如果只是运行demo, 建议先用默认配置跑通. 如果对pin脚进行了修改, 对应的也要调整连线.

// 设置是否使用硬件SPI
#define ST7567_HARDWARE_SPI 1 // 设置PIN脚
// CS: B4, B14
#define ST7567_CS_PORT GPIOB
#define ST7567_CS_PIN GPIO_PIN_14
// SCK: B1, B2, B15, B24
#define ST7567_SCK_PORT GPIOB
#define ST7567_SCK_PIN GPIO_PIN_15
// MOSI: B5, B17, B26, PA7
#define ST7567_MOSI_PORT GPIOB
#define ST7567_MOSI_PIN GPIO_PIN_17
// MISO: B0, B3, B16, B25 #define ST7567_RES_PORT GPIOB
#define ST7567_RES_PIN GPIO_PIN_10
#define ST7567_DC_PORT GPIOB
#define ST7567_DC_PIN GPIO_PIN_11
#define ST7567_BL_PORT GPIOB
#define ST7567_BL_PIN GPIO_PIN_16 // 设置屏幕的宽
// X width
#define ST7567_WIDTH 128
// 设置屏幕的高
// Y height
#define ST7567_HEIGHT 64
// 设置每行的附加字节数, 默认为4
// Additional bytes in each row
#define ST7567_SEG_EXPAND 4
// 行方向
// X orientation
#define ST7567_X_ORIENT ST7567_SEG_DIRECTION_REVERSE
// 列方向
// Y orientation
#define ST7567_Y_ORIENT ST7567_COM_DIRECTION_NORMAL

st7567.c 中的LCD初始化方法, 这里的参数如果不适合你的LCD, 需要根据手册调整.

有几处修改后容易导致不显示的选项, 需要谨慎修改

  • ST7567_POWER_CONTROL 这个是升压设置, 当前这块屏幕, 只有三个位都置1时, 屏幕才有显示, 其它选项都不行
  • ST7567_SET_EV 这个是对比度电压设置, 范围为0 - 0x3F, 太低(< 0x10)会显示全空白, 太高(> 0x32)会显示为全黑
  • ST7567_ALL_PIXEL_NORMAL 如果设置为 ST7567_ALL_PIXEL_ON 可能并非全黑, 而是全空白. 未跑通时建议用NORMAL
  • ST7567_SET_PAGE_ADDRESS 和 ST7567_SET_COLUMN_ADDRESS_MSB, ST7567_SET_COLUMN_ADDRESS_LSB 用于设置显示的开始行和列位置, 需要初始化到原点.
void ST7567_Init(void)
{
ST7567_Reset();
ST7567_BackLight_On(); ST7567_WriteCommand(ST7567_RESET);
ST7567_WriteCommand(ST7567_POWER_CONTROL
|ST7567_POWER_CONTROL_VB
|ST7567_POWER_CONTROL_VR
|ST7567_POWER_CONTROL_VF);
ST7567_WriteCommand(ST7567_SET_EV);
ST7567_WriteCommand(ST7567_SET_EV_MASK & 0x20);
ST7567_WriteCommand(ST7567_BIAS_1_9);
ST7567_WriteCommand(ST7567_X_ORIENT);
ST7567_WriteCommand(ST7567_Y_ORIENT);
ST7567_WriteCommand(ST7567_REGULATION_RATIO | ST7567_REGULATION_RATIO_5_0);
ST7567_WriteCommand(ST7567_INVERSE_DISPLAY_OFF);
ST7567_WriteCommand(ST7567_DISPLAY_ON);
ST7567_WriteCommand(ST7567_ALL_PIXEL_NORMAL); ST7567_WriteCommand(ST7567_SET_START_LINE | (0x00 & ST7567_SET_START_LINE_MASK));
ST7567_WriteCommand(ST7567_SET_PAGE_ADDRESS | (0x00 & ST7567_SET_PAGE_ADDRESS_MASK));
ST7567_WriteCommand(ST7567_SET_COLUMN_ADDRESS_MSB);
ST7567_WriteCommand(ST7567_SET_COLUMN_ADDRESS_LSB);
}

图形绘制

图形绘制的方法与SSD1306一致, 可以绘制点, 线, 圈, 文字, 反显, 调节对比度, 开关背光

int main(void)
{
//... // 绘制直线
ST7567_DrawLine(0, 0, 127, 0, 1);
ST7567_DrawLine(0, 0, 0, 63, 1);
ST7567_DrawLine(127, 0, 127, 63, 1);
ST7567_DrawLine(0, 63, 127, 63, 1); // 绘制文字
ST7567_Puts("LCD:ST7567", &Font_6x12, 1); // 绘制后, 需要使用这个方法刷新LCD显示
ST7567_UpdateScreen(); // 设置对比度
while (y1 <= 0x30)
{
ST7567_SetContrast(y1++);
HAL_Delay(100);
} // 反显
ST7567_ToggleInvert();
ST7567_UpdateScreen(); // 绘制圆
ST7567_DrawCircle(64, 32, 25, 0);
ST7567_UpdateScreen(); //...
}

实际演示展示

B站视频: https://www.bilibili.com/video/BV1VZ4y1X7p7

LCD液晶屏的延迟很高, 变化太快, 每秒帧数在七八帧以上, 基本就看不清了. 这点不如OLED屏幕.

联盛德 HLK-W806 (十一): 软件SPI和硬件SPI驱动ST7567液晶LCD的更多相关文章

  1. 联盛德 HLK-W806 (十二): Makefile组织结构和编译流程说明

    目录 联盛德 HLK-W806 (一): Ubuntu20.04下的开发环境配置, 编译和烧录说明 联盛德 HLK-W806 (二): Win10下的开发环境配置, 编译和烧录说明 联盛德 HLK-W ...

  2. 联盛德 HLK-W806 (十三): 运行FatFs读写FAT和exFat格式的SD卡/TF卡

    目录 联盛德 HLK-W806 (一): Ubuntu20.04下的开发环境配置, 编译和烧录说明 联盛德 HLK-W806 (二): Win10下的开发环境配置, 编译和烧录说明 联盛德 HLK-W ...

  3. 联盛德 HLK-W806 (四): 软件SPI和硬件SPI驱动ST7735液晶LCD

    目录 联盛德 HLK-W806 (一): Ubuntu20.04下的开发环境配置, 编译和烧录说明 联盛德 HLK-W806 (二): Win10下的开发环境配置, 编译和烧录说明 联盛德 HLK-W ...

  4. 联盛德 HLK-W806 (九): 软件SPI和硬件SPI驱动ST7789V液晶LCD

    目录 联盛德 HLK-W806 (一): Ubuntu20.04下的开发环境配置, 编译和烧录说明 联盛德 HLK-W806 (二): Win10下的开发环境配置, 编译和烧录说明 联盛德 HLK-W ...

  5. 联盛德 HLK-W806 (八): 4线SPI驱动SSD1306/SSD1315 128x64 OLED液晶屏

    目录 联盛德 HLK-W806 (一): Ubuntu20.04下的开发环境配置, 编译和烧录说明 联盛德 HLK-W806 (二): Win10下的开发环境配置, 编译和烧录说明 联盛德 HLK-W ...

  6. 联盛德 HLK-W806 (一): Ubuntu20.04下的开发环境配置, 编译和烧录说明

    目录 联盛德 HLK-W806 (一): Ubuntu20.04下的开发环境配置, 编译和烧录说明 联盛德 HLK-W806 (二): Win10下的开发环境配置, 编译和烧录说明 联盛德 HLK-W ...

  7. 联盛德 HLK-W806 (五): W801开发板上手报告

    目录 联盛德 HLK-W806 (一): Ubuntu20.04下的开发环境配置, 编译和烧录说明 联盛德 HLK-W806 (二): Win10下的开发环境配置, 编译和烧录说明 联盛德 HLK-W ...

  8. 联盛德 HLK-W806 (二): Win10下的开发环境配置, 编译和烧录说明

    目录 联盛德 HLK-W806 (一): Ubuntu20.04下的开发环境配置, 编译和烧录说明 联盛德 HLK-W806 (二): Win10下的开发环境配置, 编译和烧录说明 联盛德 HLK-W ...

  9. 联盛德 HLK-W806 (三): 免按键自动下载和复位

    目录 联盛德 HLK-W806 (一): Ubuntu20.04下的开发环境配置, 编译和烧录说明 联盛德 HLK-W806 (二): Win10下的开发环境配置, 编译和烧录说明 联盛德 HLK-W ...

随机推荐

  1. C语言下的Led灯

    1. 设计思想 1.1 设置处理器模式 设置sp啥的汇编要先进入SVC模式,超级管理员特权模式,这样就可以访问所有寄存器了,需要用到cpsr寄存器 0到4位要设置svc模式10011 = 0x13, ...

  2. Linux——基础命令用法(上)

    一.Linux基础命令 1.Linux命令行的格式 命令行的格式为:用户名+主机名+当前工作目录 输入内容的命令格式为:命令 [-短选项/--长选项] [参数] [root@localhost ~]# ...

  3. Redis基本数据类型底层数据结构

    Redis数据类型底层数据结构 Redis目前基本的数据类型有String.List.Set.ZSet.Hash五种,首先Redis是C语言开发的,所以底层就是用C语言封装数据结构或者C语言本身提供的 ...

  4. html中引入外部js文件,使用外部js文件里的方法

    外部js文件1: /** * 加了window.onload 后,直接引入js文件即可 * 页面资源全部加载完毕后会自动调用window.onload里的回调函数 */ window.addEvent ...

  5. JavaWeb 请求转发重定向

    请求转发和重定向 request除了可以作为请求对象之外,还可以作为域对象,但是该域对象的取值范围,是一次请求范围之内(浏览器地址栏没有发生跳转访问别的资源) 作用:将servlet中的数据通过req ...

  6. Topcoder 14719 - RatingProgressAward(最小割)

    题面传送门 神仙最小割--好久没写过网络流了,故写题解以祭之( 首先考虑一个非常 trivial 的问题:如果知道排列顺序之后怎样计算最大值,用脚趾头想一下就能知道是原序列的最大子段和,因为每个课程之 ...

  7. Python基础笔记3

    高级特性 代码不是越多越好,而是越少越好.代码不是越复杂越好,而是越简单越好.代码越少,开发效率越高. 1.切片 切片(Slice)操作符,取一个list或tuple的部分元素非常常见. 列表 L = ...

  8. go搭建beego框架 go安装bee报错 github.com/derekparker/delve@v1.4.0: parsing go.mod:

    go搭建beego框架 go安装bee报错 go使用beego框架的时候,需要安装bee,安装的时候遇到一些坑报错,这里跟大家分享一下,有助于快速安装bee,搭建好beego环境 1. 首先切换到go ...

  9. Ubuntu 和 windows1下文件夹共享的指令

    第一个是通过拖拉的方式将文件放到当前的目录下面,即 mv +路径 + . 第二个是将文件放到了硬盘里面/mnt/hgfs/linusshare/里面

  10. 【模板】二分图最大权完美匹配(KM算法)/洛谷P6577

    题目链接 https://www.luogu.com.cn/problem/P6577 题目大意 给定一个二分图,其左右点的个数各为 \(n\),带权边数为 \(m\),保证存在完美匹配. 求一种完美 ...