Files
MoonshineOS/MSOS_ESP/main/oled.c
T
2026-07-30 19:20:34 +08:00

78 lines
1.5 KiB
C

#include "oled.h"
#include "iic.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
void oled_cmd(unsigned char IIC_Command)
{
unsigned char buf[2] = {0x00, IIC_Command};
iic_send_bytes(OLED_ADDRESS, buf, 2);
}
void oled_dat(unsigned char IIC_Data)
{
unsigned char buf[2] = {0x40, IIC_Data};
iic_send_bytes(OLED_ADDRESS, buf, 2);
}
void oled_set_pos(unsigned char x, unsigned char y)
{
x += OLED_COL_OFFSET;
oled_cmd(0xb0 + 7 - y);
oled_cmd(((x & 0xf0) >> 4) | 0x10);
oled_cmd((x & 0x0f) | 0x00);
}
void oled_init_dram(char a)
{
for (unsigned char y = 0; y < Y_WIDTH_; y++) {
oled_set_pos(0, y);
for (unsigned char x = 0; x < X_WIDTH; x++) {
oled_dat(a);
}
}
}
void oled_set_lum(unsigned char a)
{
oled_cmd(0x81);
oled_cmd((unsigned char)(a * 255 / 100));
}
void oled_init(void)
{
vTaskDelay(pdMS_TO_TICKS(200));
oled_cmd(0xAE);
oled_cmd(0xD5);
oled_cmd(0x80);
oled_cmd(0xA8);
oled_cmd(0x3F);
oled_cmd(0xD3);
oled_cmd(0x00);
oled_cmd(0x40);
#if (OLED_CONTROLLER == OLED_CTRL_SH1106)
oled_cmd(0xAD);
oled_cmd(0x8B);
#elif (OLED_CONTROLLER == OLED_CTRL_ST7315)
oled_cmd(0x8D);
oled_cmd(0x14);
#endif
oled_cmd(0x20);
oled_cmd(0x10);
oled_cmd(0xA1);
oled_cmd(0xC0);
oled_cmd(0xD9);
oled_cmd(0xf1);
oled_cmd(0xDB);
oled_cmd(0x30);
oled_cmd(0xA4);
oled_cmd(0xA6);
oled_cmd(0xAF);
oled_cmd(0x81);
oled_cmd(0xff);
oled_init_dram(0);
}