用esp32的21引脚和22引脚写一个驱动SSD1309的代码
时间: 2024-05-13 07:15:38 浏览: 177
以ESP32为主控的LED与OLED驱动代码
以下是使用ESP32的21引脚和22引脚驱动SSD1309 OLED显示屏的代码:
```c
#include <Wire.h>
#define OLED_ADDR 0x3C // OLED显示屏的I2C地址
// 定义SSD1309 OLED显示屏的初始化命令
const uint8_t init_cmd[] = {
0xAE, // 关闭显示
0xD5, 0x80, // 设置显示时钟分频因子/震荡器频率(默认值)
0xA8, 0x3F, // 设置多路复用率
0xD3, 0x00, // 设置显示偏移
0x40, // 设置显示起始行
0x8D, 0x14, // 启用电荷泵
0x20, 0x00, // 设置存储模式(水平地址模式)
0xA0, // 设置段重映射(左右翻转)
0xC0, // 设置COM重映射(上下翻转)
0xDA, 0x12, // 设置COM硬件配置
0x81, 0xCF, // 设置对比度
0xD9, 0xF1, // 设置预充电周期
0xDB, 0x40, // 设置VCOMH Deselect Level
0xAF // 打开显示
};
void setup() {
Wire.begin(21, 22); // 初始化I2C总线并设置SDA和SCL引脚
Wire.setClock(100000); // 设置I2C总线时钟速率为100kHz
// 发送初始化命令
Wire.beginTransmission(OLED_ADDR);
for (uint8_t i = 0; i < sizeof(init_cmd); i++) {
Wire.write(init_cmd[i]);
}
Wire.endTransmission();
}
void loop() {
// 在OLED显示屏上显示“Hello, World!”
Wire.beginTransmission(OLED_ADDR);
Wire.write(0x00); // 设置控制字节,低4位为列地址,高4位为页地址
Wire.write(0x00); // 第0页
Wire.write(0x10); // 第1列
Wire.write('H');
Wire.write('e');
Wire.write('l');
Wire.write('l');
Wire.write('o');
Wire.write(',');
Wire.write(' ');
Wire.write('W');
Wire.write('o');
Wire.write('r');
Wire.write('l');
Wire.write('d');
Wire.write('!');
Wire.endTransmission();
delay(1000);
}
```
这段代码使用ESP32的21引脚和22引脚作为I2C总线的SDA和SCL引脚,并通过Wire库与SSD1309 OLED显示屏通信。在setup函数中,发送了SSD1309 OLED显示屏的初始化命令,包括设置多路复用率、对比度、预充电周期等参数,以及打开显示。在loop函数中,通过Wire库向OLED显示屏发送数据,以在屏幕上显示“Hello, World!”。
阅读全文