思路
代码分块
include
#include <stdio.h>
#include <driver/i2c.h>
#include <string.h>
I2C初始化
此处SDA引脚为GPIO4,SCL引脚为GPIO5
void i2c_init()
{
i2c_config_t conf = {
.mode = I2C_MODE_MASTER,
.sda_io_num = 4,
.scl_io_num = 5,
.sda_pullup_en = GPIO_PULLUP_ENABLE,
.scl_pullup_en = GPIO_PULLUP_ENABLE,
.master.clk_speed = 400000};
i2c_param_config(0, &conf);
i2c_driver_install(0, I2C_MODE_MASTER, 0, 0, 0);
}
SSD1306初始化
void ssd1306_init(uint8_t *buffer)
{
uint8_t init_data[] = {
0xae, // 熄屏
0x20, 0x00, // 水平寻址
0x40, // 显示起始行地址
0xa1, // 正常列扫描
0xa8, 0x3f, // 复用率
0xc8, // 正常行扫描
0xd3, 0x00, // 设置COM偏移量,即屏幕像上偏移的行数
0xda, 0x12, // 使用备选引脚配置,并禁用左右反置
0xd5, 0x80, // 设置分频因子与振荡频率
0xd9, 0x22, // 设置vcomh电压为0.83*Vcc
0xdb, 0x40, //
0x81, 0xff, // 亮度最大
0x8d, 0x14, // 关闭电荷泵
0xa6,
0x2e, // 禁止滚动
0xaf}; // 开屏
i2c_cmd_handle_t cmd = i2c_cmd_link_create();
i2c_master_start(cmd);
i2c_master_write_byte(cmd, 0x78, true);
i2c_master_write_byte(cmd, 0x00, true);
i2c_master_write(cmd, init_data, 25, true);
i2c_master_stop(cmd);
i2c_master_cmd_begin(0, cmd, 1000 / portTICK_PERIOD_MS);
i2c_cmd_link_delete(cmd);
clear_screen(buffer);
};
清屏
void clear_screen(uint8_t *buffer)
{
memset(buffer, 0, 1024);
};
画一个像素点
void pixel(ui

本文详细介绍了如何通过I2C接口初始化SSD1306OLED显示屏,并提供了一系列基本图形操作函数如像素、线条和图形绘制,以及刷新显示的函数,用于在128*64像素的OLED屏幕上实现简单的图形显示。
最低0.47元/天 解锁文章
363

被折叠的 条评论
为什么被折叠?



