66 lines
2.1 KiB
C
66 lines
2.1 KiB
C
/**
|
|
* 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 */
|