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

news/2025/3/23 4:40:07/

目录

  • 联盛德 HLK-W806 (一): Ubuntu20.04下的开发环境配置, 编译和烧录说明
  • 联盛德 HLK-W806 (二): Win10下的开发环境配置, 编译和烧录说明
  • 联盛德 HLK-W806 (三): 免按键自动下载和复位
  • 联盛德 HLK-W806 (四): 软件SPI和硬件SPI驱动ST7735液晶LCD
  • 联盛德 HLK-W806 (五): W801开发板上手报告
  • 联盛德 HLK-W806 (六): I2C驱动SSD1306 128x64 OLED液晶屏
  • 联盛德 HLK-W806 (七): 兼容开发板 LuatOS Air103
  • 联盛德 HLK-W806 (八): 4线SPI驱动SSD1306/SSD1315 128x64 OLED液晶屏
  • 联盛德 HLK-W806 (九): 软件SPI和硬件SPI驱动ST7789V液晶LCD
  • 联盛德 HLK-W806 (十): 在 CDK IDE开发环境中使用WM-SDK-W806
  • 联盛德 HLK-W806 (十一): 软件SPI和硬件SPI驱动ST7567液晶LCD

SSD1306/SSD1315 OLED

0.96的128x64 OLED液晶屏是嵌入式应用中最常见的一种屏幕, 这种屏幕常见的pin脚类型有两种: I2C和SPI, 驱动通常是SSD1306, 最近会有一些是SSD1315

  • I2C类型的OLED只有4个pin脚, 不可修改连接模式, 比较好辨认
  • SPI类型的OLED有6/7/8pin几种类型, 最常见的是7pin, 带协议选项的模块, 这种模块的背面PCB会有三种模式的选择说明, 后面列出的Rx代表那些位置需要焊接电阻, 通常这些电阻阻值都是5KR, 默认出厂都是4线SPI的模式

在SPI模式下, SSD1306和SSD1315的驱动方式是一样的. 因为W806可以使用硬件SPI, 刷新速度比I2C方式要快将近10倍, 下面介绍的是4线SPI模式的驱动

连接

虽然是4线SPI, 也需要连全部7根线, 4线没算上VCC, GND和Reset, 对应本演示的连接方式为

  • PB14 -> CS
  • PB15 -> SCK/CLK/D0
  • PB17 -> MOSI/SDA/D1
  • PB10 -> RES(Reset)
  • PB11 -> DC
  • GND -> GND
  • 3.3V -> VCC

库文件

本示例由I2C的示例改进得到, 增加了SPI传输方法, 顺带更新了一下演示功能, 这个库文件支持

  • 画点
  • 画线
  • 画圆
  • 输出文字(需要软字库)
  • 画图

使用

驱动SSD1306/SSD1315时, 需要引入的文件为

  • ssd1306.c
  • ssd1306.h
  • ssd1306_fonts.c
  • ssd1306_fonts.h

在main.c中加入头文件并初始化 SPI_HandleTypeDef

#include "ssd1306.h"SPI_HandleTypeDef hspi;static void SPI_Init(void)
{hspi.Instance = SPI;hspi.Init.Mode = SPI_MODE_MASTER;hspi.Init.CLKPolarity = SPI_POLARITY_LOW;hspi.Init.CLKPhase = SPI_PHASE_1EDGE;hspi.Init.NSS = SPI_NSS_SOFT;hspi.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_40;hspi.Init.FirstByte = SPI_LITTLEENDIAN;if (HAL_SPI_Init(&hspi) != HAL_OK){Error_Handler();}
}static void GPIO_Init(void)
{GPIO_InitTypeDef GPIO_InitStruct = {0};__HAL_RCC_GPIO_CLK_ENABLE();GPIO_InitStruct.Pin = SSD1306_RES_PIN;GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT;GPIO_InitStruct.Pull = GPIO_NOPULL;HAL_GPIO_Init(SSD1306_RES_PORT, &GPIO_InitStruct);GPIO_InitStruct.Pin = SSD1306_DC_PIN;GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT;GPIO_InitStruct.Pull = GPIO_NOPULL;HAL_GPIO_Init(SSD1306_DC_PORT, &GPIO_InitStruct);
}

在ssd1306.h中, 确认设置的模式为SPI

/*** Mode switch: 0 - SPI, 1 - I2C*/
#define SSD1306_MODE_I2C          0

修改当前屏幕对应的参数: 宽度, 高度

/* SSD1306 settings */
/* SSD1306 width in pixels */
#ifndef SSD1306_WIDTH
#define SSD1306_WIDTH            128
#endif
/* SSD1306 LCD height in pixels */
#ifndef SSD1306_HEIGHT
#define SSD1306_HEIGHT           64
#endif

然后就可以在代码中使用了

# 初始化
GPIO_Init();
SPI_Init();
uint8_t res = SSD1306_Init();
printf("OLED init: %d\n", res);
# 定位绘画起点
SSD1306_GotoXY(5, 5);
# 输出字符
SSD1306_Puts("OLED:11x18", &Font_11x18, 1);
# 更新显示
SSD1306_UpdateScreen(); // display

清屏

SSD1306_Fill(0); // clear oled

画线

int y1 = 64, y2 = 0;
while (y1 > 0)
{SSD1306_DrawLine(0, y1, 128, y2, 1);SSD1306_UpdateScreen();y1 -= 2;y2 += 2;
}

填充反色, 画圆

SSD1306_Fill(1); // clear oled
SSD1306_UpdateScreen();
SSD1306_DrawCircle(64, 32, 25, 0);
SSD1306_UpdateScreen();
SSD1306_DrawCircle(128, 32, 25, 0);
SSD1306_UpdateScreen();
SSD1306_DrawCircle(0, 32, 25, 0);
SSD1306_UpdateScreen();
SSD1306_DrawCircle(32, 32, 25, 0);
SSD1306_UpdateScreen();
SSD1306_DrawCircle(96, 32, 25, 0);
SSD1306_UpdateScreen();

相关代码

代码已经更新到SDK的I2C示例(同时支持I2C和SPI)

  • Github: wm-sdk-w806/tree/main/demo/i2c/ssd1306_oled
  • Gitee: wm-sdk-w806/tree/main/demo/i2c/ssd1306_oled

参考

  • OLED displays (SSD1306 and SSD1315) http://cholla.mmto.org/electronics/displays/oled/

http://www.ppmy.cn/news/153619.html

相关文章

联盛德W806,W801刷固件步骤

本文针对无基础玩家参考,如有不对的欢迎指正 1)需要准备物料 1.开发板801或806 2.CH340驱动 (USB转串口驱动) 3.烧入工具(官方首页-芯片-W800-开发工具- 4.PC端固件烧录工具:链接仅作实例,具体以官网最新为准 W800串…

w806大黄蜂 android 刷机

http://www.592zn.com/thread-171992-1-1.html 小白可以看懂的刷机教程 手机一买回来就刷了刀大的原生安卓2.3.4的卡刷rom,由于自己以前有很多刷机经验, 所以这次刷机也没有太大问题 ,在群里聊天,看到有的人还在询问天语w806刷原…

移动魔百盒CM201-1_CW_S905L2_MT7668_线刷固件包

移动魔百合CM201-1_CW_S905L2_MT7668_先刷固件包 双头数据线一条; 机顶盒一个; 一、运行刷机工具--选择左上角的文件按钮--选择导入烧录包 ; 二.选择你下载好的后缀为.img的文件,然后等待加载 ; 三.烧录包加载完毕&am…

W801单片机学习笔记——调试器的配置与使用(适用于W801和W806)

1.前言 在以往的Cortex-M内核单片机的开发中,最离不开的一个东西就是调试器,什么J-Link,ST-Link,DAP-Link等等,没了他们调试程序感觉浑身难受,效率直线下降。调试器就好比是战士的枪,W801单片机…

湖北移动魔百盒CM311-1s_CH代工_S905L3B_5621DS_安卓9.0_线刷固件包

准备工作: 双头数据线一条; 机顶盒一个; 关于双公头数据线其实制作也很简单,找两条废旧闲置的数据线,从中间剪断 然后将这两个部分在对色接上就行了! 一、运行刷机工具--选择左上角的文件按钮--选择导入烧…

天语W619小黄蜂usb驱动下载,附件安装驱动器教程

天语W619小黄蜂usb驱动下载,附件安装驱动器教程 语言: 简体中文版本: 星级: 时间: 12-07-30适用机型: W619大小: 1.7M下载次数: 2473次上传者: admin 立即下载 1、USB驱动安装 这里有两个路径要选择,请看图的时候注意区分,将下载的Driver驱动…

W806串口管脚复用

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 标题W806串口管脚复用 W806串口管脚复用 一、 目的:说明W806串口管脚复用的方法。 二、 用到的资料:1、硬件:W806开发板。2、软件&#x…

创维E900V21E/E900V22E_S905L3B/S905L2B通刷_支持5621DS无线_完美语音线刷固件

创维E900V21E/E900V22E_S905L3B/S905L2B通刷_支持5621DS无线_完美语音线刷固件 固件特点: 1、修改dns,三网通用; 2、开放原厂固件屏蔽的市场安装和u盘安装apk; 3、无开机广告,无系统更新,不在被强制升级…