联盛德 HLK-W806 (六): I2C驱动SSD1306 128x64 OLED液晶屏
目录
- 联盛德 HLK-W806 (一): Ubuntu20.04下的开发环境配置, 编译和烧录说明
- 联盛德 HLK-W806 (二): Win10下的开发环境配置, 编译和烧录说明
- 联盛德 HLK-W806 (三): 免按键自动下载和复位
- 联盛德 HLK-W806 (四): 软件SPI和硬件SPI驱动ST7735液晶LCD
- 联盛德 HLK-W806 (五): W801开发板上手报告
- 联盛德 HLK-W806 (六): I2C驱动SSD1306 128x64 OLED液晶屏
SSD1306 OLED

SSD1306驱动的128x64 OLED液晶屏是嵌入式应用中最常见的一种屏幕, 特点是亮度高耗电小可视角度大.
这种屏幕常见的pin脚类型有两种: 4线的I2C和6/7/8线的SPI. 这里介绍的是I2C类型的连接和驱动.
连接
对应本演示的连接方式为
- SCL -> PA1
- SDA -> PA4
- GND -> GND
- VCC -> 3.3V
W806的I2C只有两种选择: PA1+PA4 和 PB20+PB19
库文件
本示例移植自Github上Lutsai Alexander的 stm32libs项目, 根据W806的I2C HAL接口修改了传输部分, 去除了DMA方法, 并修改了字体展示部分以适应当前SDK的字体格式. 这个库文件支持
- 画点
- 画线
- 画圆
- 输出文字(需要软字库)
- 画图
使用
驱动SSD1306时, 需要引入的文件为
- ssd1306.c
- ssd1306.h
- ssd1306_fonts.c
- ssd1306_fonts.h
在main.c中加入头文件并初始化 I2C_HandleTypeDef, 如果不使用PA1+PA4, 需要修改下面的I2C_Init()代码.
#include "ssd1306.h"
I2C_HandleTypeDef hi2c;
void I2C_Init(void)
{
hi2c.SCL_Port = GPIOA;
hi2c.SCL_Pin = GPIO_PIN_1;
hi2c.SDA_Port = GPIOA;
hi2c.SDA_Pin = GPIO_PIN_4;
HAL_I2C_Init(&hi2c);
}
在ssd1306.h中修改当前屏幕对应的参数: 地址, 宽度, 高度
/* I2C address */
#ifndef SSD1306_I2C_ADDR
#define SSD1306_I2C_ADDR 0x78
#endif
/* 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
然后就可以在代码中使用了
# 初始化
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示例
- Github: wm-sdk-w806/tree/main/demo/i2c/ssd1306_oled
- Gitee: wm-sdk-w806/tree/main/demo/i2c/ssd1306_oled
参考
联盛德 HLK-W806 (六): I2C驱动SSD1306 128x64 OLED液晶屏的更多相关文章
- 联盛德 HLK-W806 (八): 4线SPI驱动SSD1306/SSD1315 128x64 OLED液晶屏
目录 联盛德 HLK-W806 (一): Ubuntu20.04下的开发环境配置, 编译和烧录说明 联盛德 HLK-W806 (二): Win10下的开发环境配置, 编译和烧录说明 联盛德 HLK-W ...
- 联盛德 HLK-W806 (九): 软件SPI和硬件SPI驱动ST7789V液晶LCD
目录 联盛德 HLK-W806 (一): Ubuntu20.04下的开发环境配置, 编译和烧录说明 联盛德 HLK-W806 (二): Win10下的开发环境配置, 编译和烧录说明 联盛德 HLK-W ...
- 联盛德 HLK-W806 (十一): 软件SPI和硬件SPI驱动ST7567液晶LCD
目录 联盛德 HLK-W806 (一): Ubuntu20.04下的开发环境配置, 编译和烧录说明 联盛德 HLK-W806 (二): Win10下的开发环境配置, 编译和烧录说明 联盛德 HLK-W ...
- 联盛德 HLK-W806 (七): 兼容开发板 LuatOS Air103
目录 联盛德 HLK-W806 (一): Ubuntu20.04下的开发环境配置, 编译和烧录说明 联盛德 HLK-W806 (二): Win10下的开发环境配置, 编译和烧录说明 联盛德 HLK-W ...
- 联盛德 HLK-W806 (十): 在 CDK IDE开发环境中使用WM-SDK-W806
目录 联盛德 HLK-W806 (一): Ubuntu20.04下的开发环境配置, 编译和烧录说明 联盛德 HLK-W806 (二): Win10下的开发环境配置, 编译和烧录说明 联盛德 HLK-W ...
- 联盛德 HLK-W806 (十二): Makefile组织结构和编译流程说明
目录 联盛德 HLK-W806 (一): Ubuntu20.04下的开发环境配置, 编译和烧录说明 联盛德 HLK-W806 (二): Win10下的开发环境配置, 编译和烧录说明 联盛德 HLK-W ...
- 联盛德 HLK-W806 (十三): 运行FatFs读写FAT和exFat格式的SD卡/TF卡
目录 联盛德 HLK-W806 (一): Ubuntu20.04下的开发环境配置, 编译和烧录说明 联盛德 HLK-W806 (二): Win10下的开发环境配置, 编译和烧录说明 联盛德 HLK-W ...
- 联盛德 HLK-W806 (四): 软件SPI和硬件SPI驱动ST7735液晶LCD
目录 联盛德 HLK-W806 (一): Ubuntu20.04下的开发环境配置, 编译和烧录说明 联盛德 HLK-W806 (二): Win10下的开发环境配置, 编译和烧录说明 联盛德 HLK-W ...
- 联盛德 HLK-W806 (一): Ubuntu20.04下的开发环境配置, 编译和烧录说明
目录 联盛德 HLK-W806 (一): Ubuntu20.04下的开发环境配置, 编译和烧录说明 联盛德 HLK-W806 (二): Win10下的开发环境配置, 编译和烧录说明 联盛德 HLK-W ...
随机推荐
- 该如何有效的提高C/C++语言编程能力
很多答案都谈到算法的重要性,我的答案主要集中在C++上,只是一些个人经验. 其实我以前也有这样的困惑,感觉完了不知道怎么用.而且我也不是学计算机的,也没有从事相关工作,所以大概有十年的时间都没写什么程 ...
- 最新JS正则表达式验证手机号码(2019)
根据移动.联通.电信的电话号码号段,实现一个简单的正则表达式来验证手机号码: // 手机号校验 export function isPhoneNumber(phoneNum) { // let reg ...
- Element - 日期禁用集合(持续更新)
当前日期之前的日期禁用 <el-date-picker v-model="form.startTime" type="date" placeholder= ...
- 01_WPF概述
目录 Windows 图形演化 高级API 分辨率无关性 WPF体系结构 我的微信公众号 Windows 图形演化 在 WPF 之前,windows 开发一直使用本质上相同的显示技术.每个传统 win ...
- 二,zabbix与php的一些问题
zabbix 检查先决条件 一.php-bcmath 不支持 php 安装 bcmath 扩展(编译安装) PHP的linux版本需要手动安装BCMath扩展,在PHP的源码包中默认包含BCMath的 ...
- APP 自动化之系统按键事件(五)
转载记录方便后续自己使用: 代码就一句driver.keyevent()括号内填入的是物理按键的数字代号 代号表: 电话键 KEYCODE_CALL 拨号键 5 KEYCODE_ENDCALL 挂机键 ...
- TypeScript 泛型及应用
TypeScript 泛型及应用 一.泛型是什么 二.泛型接口 三.泛型类 四.泛型约束 4.1 确保属性存在 4.2 检查对象上的键是否存在 五.泛型参数默认类型 六.泛型条件类型 七.泛型工具类型 ...
- 添加su权限
在root用户下 visudo amy ALL=(ALL) NOPASSWD:ALL 在amy用户下 vim ~/.bashrc alias sd = "sudo"
- Part 32 AngularJS controller as syntax
So far in this video series we have been using $scope to expose the members from the controller to t ...
- 大爽Python入门教程 3-6 答案
大爽Python入门公开课教案 点击查看教程总目录 1 求平方和 使用循环,计算列表所有项的平方和,并输出这个和. 列表示例 lst = [8, 5, 7, 12, 19, 21, 10, 3, 2, ...