/** * OLED SSD1306 / SSD1315 128x64 I2C 驱动 * 基于硬件 I2C2 (PB10=SCL, PB11=SDA) * * 芯片选择: 修改下方 OLED_CHIP 宏即可切换 * OLED_CHIP_SSD1306 - 外部电荷泵 (0x8D 0x14) * OLED_CHIP_SSD1315 - 内置 DC-DC (0xAD 0x8A) */ #ifndef OLED_H #define OLED_H #include "main.h" #include "i2c.h" /* ---- 芯片选择 ---- */ #define OLED_CHIP_SSD1306 0 #define OLED_CHIP_SSD1315 1 #define OLED_CHIP OLED_CHIP_SSD1315 /* 根据实际模块修改 */ #define OLED_ADDR 0x78 /* SSD1306 I2C 地址 (SA0=0) */ #define OLED_WIDTH 128 #define OLED_HEIGHT 64 #define OLED_PAGES 8 /* 64/8 = 8 pages */ /* OLED 初始化 */ void OLED_Init(void); /* 基础操作 */ void OLED_Clear(void); void OLED_Display(void); /* 刷新显存到屏幕 */ void OLED_SetCursor(uint8_t x, uint8_t y); /* x:0-127, y:0-7(page) */ /* 绘制函数 */ void OLED_DrawPixel(uint8_t x, uint8_t y, uint8_t color); /* y:0-63 */ void OLED_DrawLine(uint8_t x1, uint8_t y1, uint8_t x2, uint8_t y2); void OLED_DrawRect(uint8_t x, uint8_t y, uint8_t w, uint8_t h); void OLED_FillRect(uint8_t x, uint8_t y, uint8_t w, uint8_t h, uint8_t color); void OLED_DrawCircle(uint8_t cx, uint8_t cy, uint8_t r); /* 文字绘制 */ void OLED_ShowChar(uint8_t x, uint8_t y, char ch, uint8_t size); /* size:6或16 */ void OLED_ShowString(uint8_t x, uint8_t y, const char *str, uint8_t size); void OLED_ShowNum(uint8_t x, uint8_t y, uint32_t num, uint8_t len, uint8_t size); /* 汉字绘制 (使用 ui/words.h 中的字库) */ void OLED_ShowCN(uint8_t x, uint8_t y, uint8_t index); /* 图片绘制 */ void OLED_DrawBitmap(uint8_t x, uint8_t y, const uint8_t *bmp, uint8_t w, uint8_t h); /* 反色/滚动 */ void OLED_InvertDisplay(uint8_t invert); void OLED_StartScrollRight(uint8_t start_page, uint8_t end_page); void OLED_StopScroll(void); /* 进度条 */ void OLED_DrawProgressBar(uint8_t x, uint8_t y, uint8_t w, uint8_t h, uint8_t percent); /* 外部显存缓冲区 (128*64/8 = 1024 bytes) */ extern uint8_t OLED_Buffer[OLED_WIDTH * OLED_HEIGHT / 8]; /* 开机图片 (来自 ui/image.h) */ extern const unsigned char bitmap_bytes[]; #endif /* OLED_H */