目录

  • 联盛德 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/

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

  1. 联盛德 HLK-W806 (六): I2C驱动SSD1306 128x64 OLED液晶屏

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

  2. STM32—4线SPI驱动SSD1306 OLED

    文章目录 一.OLED简介 二.驱动SSD1306所需知识 1.引脚介绍 2.通信时序 3.显存GRAM 4.字库 5.SSD1306基本命令 三.代码讲解 1.相关引脚配置 2.模拟SPI通信 3. ...

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

    目录 联盛德 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 (十一): 软件SPI和硬件SPI驱动ST7567液晶LCD

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

  6. 【联盛德W806上手笔记】七、I2C

    目录 WM_SDK_W806_v0.6.0的库函数 函数 参数 宏 应用示例 初始化 使用 测试 I2C 控制器 功能概述 主要特性 功能描述 传输速率选择 中断及启动停止可控 快速输出及检测信号 寄 ...

  7. 【联盛德W806上手笔记】一、开发环境和烧录程序

    目录 简介 芯片外观 MCU 特性 安全特性 低功耗模式 芯片结构 管脚定义 极限参数 开发环境 SDK的获取 从官网获取 从Q群获取 iosetting大佬 维护的wm-sdk-w806 打开工程 ...

  8. 联盛德W806最小系统开发板第一次上手准备工作

    W806 芯片 是一款安全 IoT MCU 芯片.芯片集成 32 位 CPU 处理器,内置 UART.GPIO.SPI.SDIO.I2C.I2S.PSRAM.7816.ADC.LCD.TouchSen ...

  9. 联盛德W806-KIT开发板试用评测系列之二:ADC 功能使用与测试

    联盛德W806-KIT开发板试用评测系列 之二:ADC 功能使用与测试 作者:大信<QQ8125036> 今天着手对W806开发板ADC功能做测试,都知道ADC在物联网应用场景中常需要用到 ...

最新文章

  1. vue下轻松解决模拟微信视频缩略图拖拽→吸附窗口边界的功能
  2. 阿里移动电商背后的技术航母
  3. gif透明背景动画_常用GIF动图制作工具,抖音里面的动图都是这些工具做出来的...
  4. Jenkins --SVN
  5. 成功必读本:培养人脉的106个技巧
  6. sql oracle 递归查询语句,深入sql oracle递归查询
  7. verilog中assign和always@(*)的区别和易忽略的点
  8. 单张图片上传预览【超简洁,未完待续】
  9. Firefox Javascript引擎变成单线程
  10. struts2上传多文件(b)
  11. curl: (52) Empty reply from server
  12. Eclipse+svn+subclipse配置
  13. poj 3040 Allowance (贪心
  14. windows系统mysql定时备份
  15. 第三方支付业务流程介绍
  16. 关于 WMV、WMA、ASF、ASX 等格式和 Windows Media Player 的说明
  17. JavaScript:点击按钮打开/关闭网页
  18. 你知道百度的全景街景地图是怎么做的吗?
  19. 用css的animation动画属性来实现一个H5场景动态电子邀请函
  20. 谈一谈url实现文件下载

热门文章

  1. E+H超声波液位计变送器维修FMU90-R11CA111AA3A
  2. 再谈java内存模型
  3. 基于Springboot的特产销售平台设计与实现毕业设计源码091036
  4. java查看so函数_java - 加入星火功能时,Eclipse不检测的Java main()函数 - SO中文参考 - www.soinside.com...
  5. 32位驱动安装到64位操作系统时出错
  6. 计算机控制版面交换鼠标左右键,鼠标左右键怎么互换呢?左右键互换设置方法...
  7. python做游戏辅助用到的库
  8. Adobe国际认证|使用 Adob​e Acrobat 在线增强协作
  9. linux怎么生成图形,如何在Ubuntu 16.04中创建GIF动态图片
  10. 微生物组学研究手段概览2——宏基因组和宏转录组