Add core firmware modules: input, menu, NRF24L01, OLED, protocol, PWM, storage + UI assets

This commit is contained in:
root
2026-06-25 22:55:41 +08:00
parent 97ab93e93d
commit 5c0ff0ce63
22 changed files with 3671 additions and 17 deletions

65
Core/Inc/oled.h Normal file
View File

@@ -0,0 +1,65 @@
/**
* 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 */