Files
ZhaTianRC/Core/Inc/oled.h
admin f3df7276b2 feat: 长按返回键2s开关机功能
- 开机: 长按返回键2s开机,显示左侧Logo+右侧'Starting...'开机画面2秒
- 关机: 主页未连接接收机时长按返回键2s关机
  - 关闭OLED/LED/PWM/NRF24L01/USB/外设时钟 → STOP休眠
  - 唤醒后自动复位重启
- 已连接接收机时屏蔽关机,防止飞行中误操作
- 添加 Input_IsKeyHeldFor() 指定时长按键检测
- 添加 OLED_Off() 关闭显示
- 更新 README.md 文档
2026-06-25 23:19:31 +08:00

67 lines
2.2 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_Off(void); /* 关闭 OLED 显示 */
/* 基础操作 */
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 */