From c71e052cd8857039892f9c45572d36983315813d Mon Sep 17 00:00:00 2001 From: ZengHongKun <431250696@qq.com> Date: Sat, 23 May 2026 23:07:31 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E6=9B=B4=E6=96=B00.96oled=E6=98=BE?= =?UTF-8?q?=E7=A4=BA=EF=BC=8C=E4=BB=A5=E5=8F=8A=E7=A1=AC=E4=BB=B6iic?= =?UTF-8?q?=E9=80=9A=E4=BF=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/i2c/Base_I2C.c | 13 +- common/i2c/Base_I2C.h | 52 ++-- modules/oled/HW_OLED.c | 535 +++++++++++------------------------- modules/oled/HW_OLED.h | 251 ++++++----------- modules/oled/HW_OLED_Font.h | 262 ------------------ modules/oled/OLED_Font.h | 202 ++++++++++++++ 6 files changed, 469 insertions(+), 846 deletions(-) delete mode 100644 modules/oled/HW_OLED_Font.h create mode 100644 modules/oled/OLED_Font.h diff --git a/common/i2c/Base_I2C.c b/common/i2c/Base_I2C.c index ff59664..c140748 100644 --- a/common/i2c/Base_I2C.c +++ b/common/i2c/Base_I2C.c @@ -1,12 +1,11 @@ #include "Base_I2C.h" - - -HAL_StatusTypeDef Base_I2C_WriteCmd(uint8_t* hi2cX, uint16_t addr, uint8_t* txData, uint8_t len, uint16_t timeout) +HAL_StatusTypeDef Base_I2C_WriteCmd(I2C_HandleTypeDef *hi2cx, uint16_t addr, uint8_t *txData, uint16_t len, uint16_t timeout) { - return HAL_I2C_Master_Transmit((I2C_HandleTypeDef*)hi2cX, addr, (uint8_t*)txData, len, timeout); + // 调用HAL库I2C主机发送函数,直接透传参数 + return HAL_I2C_Master_Transmit(hi2cx, addr, txData, len, timeout); } - -HAL_StatusTypeDef Base_I2C_ReadCmd(uint8_t* hi2cX, uint16_t addr, uint8_t* rxData, uint8_t len, uint16_t timeout) +HAL_StatusTypeDef Base_I2C_ReadRegs(I2C_HandleTypeDef *hi2cx,uint16_t DevAddr, uint8_t RegAddr, uint8_t *buf, uint16_t len,uint16_t timeout) { - return HAL_I2C_Master_Receive((I2C_HandleTypeDef*)hi2cX, addr, (uint8_t*)rxData, len, timeout); + // 调用HAL库存储器读函数,使用8位寄存器地址模式读取数据 + return HAL_I2C_Mem_Read(hi2cx,DevAddr,RegAddr,I2C_MEMADD_SIZE_8BIT,buf,len,timeout); } diff --git a/common/i2c/Base_I2C.h b/common/i2c/Base_I2C.h index 9e79dad..a358f61 100644 --- a/common/i2c/Base_I2C.h +++ b/common/i2c/Base_I2C.h @@ -1,39 +1,29 @@ -#ifndef __Base_I2C_H -#define __Base_I2C_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include "stm32f1xx_hal.h" +#ifndef __BASE_I2C_H +#define __BASE_I2C_H +#include "main.h" #include "i2c.h" - - /** - * @brief 閫氳繃 I2C 鎺ュ彛鍐欏叆鍛戒护鏁版嵁 - * @param hi2cX: 鎸囧悜 I2C 鍙ユ焺鐨勬寚閽堬紝鐢ㄤ簬鎸囧畾浣跨敤鐨 I2C 鎬荤嚎瀹炰緥 - * @param addr: 鐩爣璁惧鐨 I2C 鍦板潃(7bit)锛屾爣璇嗚涓庝箣閫氫俊鐨勪粠璁惧 - * @param txData: 鎸囧悜寰呭彂閫佹暟鎹殑鎸囬拡锛屽寘鍚簡瑕佸啓鍏 I2C 璁惧鐨勫懡浠ゆ垨鏁版嵁鍐呭 - * @param len: 瑕佸彂閫佹暟鎹殑闀垮害锛屽嵆 txData 涓暟鎹殑瀛楄妭鏁 - * @param timeout: 鎿嶄綔瓒呮椂鏃堕棿锛岃嫢鍦ㄨ鏃堕棿鍐呮搷浣滄湭瀹屾垚锛屽垯鎿嶄綔澶辫触;鍗曚綅ms - * @retval HAL_StatusTypeDef: 鎿嶄綔鐘舵侊紝濡 HAL_OK 琛ㄧず鎴愬姛锛屽叾浠栧艰〃绀哄け璐 + * @brief I2C 主机发送指令(纯数据发送,无寄存器地址) + * @param hi2cx : I2C句柄指针(如 &hi2c1) + * @param addr : I2C设备地址(左移前的7位地址) + * @param txData : 发送数据缓冲区指针 + * @param len : 要发送的数据长度 + * @param timeout : 超时时间(单位ms) + * @retval HAL_StatusTypeDef HAL库状态值(HAL_OK表示成功) */ -HAL_StatusTypeDef Base_I2C_WriteCmd(uint8_t* hi2cX, uint16_t addr, uint8_t* txData, uint8_t len, uint16_t timeout = 100); +HAL_StatusTypeDef Base_I2C_WriteCmd(I2C_HandleTypeDef *hi2cx, uint16_t addr, uint8_t *txData, uint16_t len, uint16_t timeout); /** - * @brief 閫氳繃 I2C 鎺ュ彛璇诲彇鍛戒护鍝嶅簲鏁版嵁 - * @param hi2cX: 鎸囧悜 I2C 鍙ユ焺鐨勬寚閽堬紝鐢ㄤ簬鎸囧畾浣跨敤鐨 I2C 鎬荤嚎瀹炰緥 - * @param addr: 鐩爣璁惧鐨 I2C 鍦板潃(7bit)锛屾爣璇嗚涓庝箣閫氫俊鐨勪粠璁惧 - * @param rxData: 鎸囧悜鐢ㄤ簬瀛樺偍鎺ユ敹鍒版暟鎹殑缂撳啿鍖虹殑鎸囬拡锛岃鍙栧埌鐨勬暟鎹細瀛樹簬姝 - * @param len: 瑕佽鍙栨暟鎹殑闀垮害锛屽嵆鏈熸湜浠 I2C 璁惧璇诲彇鐨勫瓧鑺傛暟 - * @param timeout: 鎿嶄綔瓒呮椂鏃堕棿锛岃嫢鍦ㄨ鏃堕棿鍐呮搷浣滄湭瀹屾垚锛屽垯鎿嶄綔澶辫触;鍗曚綅ms - * @retval HAL_StatusTypeDef: 鎿嶄綔鐘舵侊紝濡 HAL_OK 琛ㄧず鎴愬姛锛屽叾浠栧艰〃绀哄け璐 + * @brief 读取 I2C 设备多个连续寄存器 + * @param hi2cx : I2C句柄指针(如 &hi2c1) + * @param DevAddr : 设备7位I2C地址(左移前) 如 0x15 + * @param RegAddr : 起始寄存器地址 如 0x01 + * @param buf : 接收数据的缓冲区 + * @param len : 要读取的字节数 + * @param timeout : 超时时间(单位ms) + * @retval HAL_OK 读取成功 + * @retval 其他值 读取失败 */ -HAL_StatusTypeDef Base_I2C_ReadCmd(uint8_t* hi2cx, uint16_t addr, uint8_t* rxData, uint8_t len, uint16_t timeout = 100); - -#ifdef __cplusplus -} +HAL_StatusTypeDef Base_I2C_ReadRegs(I2C_HandleTypeDef *hi2cx,uint16_t DevAddr, uint8_t RegAddr, uint8_t *buf, uint16_t len,uint16_t timeout); #endif -#endif /* __Base_I2C_H */ -//author: 淇℃伅23 闊╂灄鏉 \ No newline at end of file diff --git a/modules/oled/HW_OLED.c b/modules/oled/HW_OLED.c index 37ea8b3..cc7edee 100644 --- a/modules/oled/HW_OLED.c +++ b/modules/oled/HW_OLED.c @@ -1,387 +1,176 @@ -#include "oled_font.h" -#include "oled.h" -#include "Base_i2c.h" -#include "string.h" - -#define LEFT 0x27 -#define RIGHT 0x26 -#define UP 0X29 -#define DOWN 0x2A // 淇鎷煎啓 -#define ON 0xA7 -#define OFF 0xA6 - -#define OLED_Addr 0x78 - -uint16_t const displayWidth = 128; -uint16_t const displayHeight = 64; - -static uint8_t OLED_RAM[8][128]; - -// 淇褰㈠弬鍛藉悕涓哄皬椹煎嘲 +#include "main.h" +#include "i2c.h" +#include "Base_I2C.h" +#include "OLED_Font.h" +#include "HW_OLED.h" void HW_OLED_WriteByte(uint8_t regAddr, uint8_t data) { uint8_t TxData[2] = {regAddr, data}; Base_I2C_WriteCmd(&hi2c1, OLED_Addr, (uint8_t*)TxData, 2, 10); } - -// 淇褰㈠弬鍛藉悕涓哄皬椹煎嘲 -void HW_OLED_WriteCmd(uint8_t iicCommand) { - HAL_I2C_WriteByte(0x00, iicCommand); -} - -// 淇褰㈠弬鍛藉悕涓哄皬椹煎嘲 -void HW_OLED_WriteDat(uint8_t iicData) { - HAL_I2C_WriteByte(0x40, iicData); -} - -void HW_OLED_Init(void) { - HAL_Delay(500); - - HW_OLED_WriteCmd(0xAE); - HW_OLED_WriteCmd(0x20); +void OLED_WriteCommand(uint8_t iicCommand) { + HW_OLED_WriteByte(0x00, iicCommand); +} +void OLED_WriteData(uint8_t iicData) { + HW_OLED_WriteByte(0x40, iicData); +} +void OLED_SetCursor(uint8_t Y, uint8_t X) +{ + OLED_WriteCommand(0xB0 | Y); //设置Y位置 + OLED_WriteCommand(0x10 | ((X & 0xF0) >> 4)); //设置X位置高4位 + OLED_WriteCommand(0x00 | (X & 0x0F)); //设置X位置低4位 +} + +void OLED_Clear(void) +{ + uint8_t i, j; + for (j = 0; j < 8; j++) + { + OLED_SetCursor(j, 0); + for(i = 0; i < 128; i++) + { + OLED_WriteData(0x00); + } + } +} +void my_OLED_Clear(void) +{ + uint8_t i, j; + for (j = 0; j < 8; j++) + { + OLED_SetCursor(j, 0); + for(i = 0; i < 128; i++) + { + OLED_WriteData(0xff); + } + } +} + +void OLED_ShowChar(uint8_t Line, uint8_t Column, char Char) +{ + uint8_t i; + OLED_SetCursor((Line - 1) * 2, (Column - 1) * 8); //设置光标位置在上半部分 + for (i = 0; i < 8; i++) + { + OLED_WriteData(OLED_F8x16[Char - ' '][i]); //显示上半部分内容 + } + OLED_SetCursor((Line - 1) * 2 + 1, (Column - 1) * 8); //设置光标位置在下半部分 + for (i = 0; i < 8; i++) + { + OLED_WriteData(OLED_F8x16[Char - ' '][i + 8]); //显示下半部分内容 + } +} + +void OLED_ShowString(uint8_t Line, uint8_t Column, char *String) +{ + uint8_t i; + for (i = 0; String[i] != '\0'; i++) + { + OLED_ShowChar(Line, Column + i, String[i]); + } +} + +uint32_t OLED_Pow(uint32_t X, uint32_t Y) +{ + uint32_t Result = 1; + while (Y--) + { + Result *= X; + } + return Result; +} +void OLED_ShowNum(uint8_t Line, uint8_t Column, uint32_t Number, uint8_t Length) +{ + uint8_t i; + for (i = 0; i < Length; i++) + { + OLED_ShowChar(Line, Column + i, Number / OLED_Pow(10, Length - i - 1) % 10 + '0'); + } +} + +void OLED_ShowSignedNum(uint8_t Line, uint8_t Column, int32_t Number, uint8_t Length) +{ + uint8_t i; + uint32_t Number1; + if (Number >= 0) + { + OLED_ShowChar(Line, Column, '+'); + Number1 = Number; + } + else + { + OLED_ShowChar(Line, Column, '-'); + Number1 = -Number; + } + for (i = 0; i < Length; i++) + { + OLED_ShowChar(Line, Column + i + 1, Number1 / OLED_Pow(10, Length - i - 1) % 10 + '0'); + } +} +void OLED_ShowHexNum(uint8_t Line, uint8_t Column, uint32_t Number, uint8_t Length) +{ + uint8_t i, SingleNumber; + for (i = 0; i < Length; i++) + { + SingleNumber = Number / OLED_Pow(16, Length - i - 1) % 16; + if (SingleNumber < 10) + { + OLED_ShowChar(Line, Column + i, SingleNumber + '0'); + } + else + { + OLED_ShowChar(Line, Column + i, SingleNumber - 10 + 'A'); + } + } +} +void OLED_ShowBinNum(uint8_t Line, uint8_t Column, uint32_t Number, uint8_t Length) +{ + uint8_t i; + for (i = 0; i < Length; i++) + { + OLED_ShowChar(Line, Column + i, Number / OLED_Pow(2, Length - i - 1) % 2 + '0'); + } +} +void OLED_Init(void) +{ + HAL_Delay(100); + OLED_WriteCommand(0xAE); //关闭显示 - HW_OLED_WriteCmd(0x10); - HW_OLED_WriteCmd(0xb0); - HW_OLED_WriteCmd(0x00); - HW_OLED_WriteCmd(0x10); - - HW_OLED_WriteCmd(0xc8); - HW_OLED_WriteCmd(0x40); - HW_OLED_WriteCmd(0x81); - HW_OLED_WriteCmd(0xff); - HW_OLED_WriteCmd(0xa1); - HW_OLED_WriteCmd(0xa6); - HW_OLED_WriteCmd(0xa8); - HW_OLED_WriteCmd(0x3F); - HW_OLED_WriteCmd(0xa4); - HW_OLED_WriteCmd(0xd3); - HW_OLED_WriteCmd(0x00); - HW_OLED_WriteCmd(0xd5); - HW_OLED_WriteCmd(0xf0); - HW_OLED_WriteCmd(0xd9); - HW_OLED_WriteCmd(0x22); - HW_OLED_WriteCmd(0xda); - HW_OLED_WriteCmd(0x12); - HW_OLED_WriteCmd(0xdb); - HW_OLED_WriteCmd(0x20); - HW_OLED_WriteCmd(0x8d); - HW_OLED_WriteCmd(0x14); - HW_OLED_WriteCmd(0xaf); - - HW_OLED_FullyClear(); -} - -void HW_OLED_On(void) { - HW_OLED_WriteCmd(0X8D); - HW_OLED_WriteCmd(0X14); - HW_OLED_WriteCmd(0XAF); -} - -void HW_OLED_Off(void) { - HW_OLED_WriteCmd(0X8D); - HW_OLED_WriteCmd(0X10); - HW_OLED_WriteCmd(0XAE); -} - -void HW_OLED_RefreshRAM(void) { - for(uint16_t m = 0; m < displayHeight/8; m++) { - HW_OLED_WriteCmd(0xb0 + m); - HW_OLED_WriteCmd(0x00); - HW_OLED_WriteCmd(0x10); - for(uint16_t n = 0; n < displayWidth; n++) { - HW_OLED_WriteDat(OLED_RAM[m][n]); - } - } -} - -// 淇璇硶锛氱洿鎺ュ垵濮嬪寲鏁扮粍锛屽幓鎺夐敊璇惊鐜 -void HW_OLED_ClearRAM(void) { - memset(OLED_RAM, 0x00, sizeof(OLED_RAM)); -} - -void HW_OLED_FullyFill(uint8_t fillData) { - for(uint16_t m = 0; m < displayHeight/8; m++) { - for(uint16_t n = 0; n < displayWidth; n++) { - OLED_RAM[m][n] = fillData; - } - } - HW_OLED_RefreshRAM(); -} - -void HW_OLED_FullyClear(void) { - HW_OLED_FullyFill(RESET_PIXEL); -} - -void HW_OLED_SetPixel(int16_t x, int16_t y, uint8_t setPixel) { - if (x >= 0 && x < displayWidth && y >= 0 && y < displayHeight) { - if (setPixel) { - OLED_RAM[y/8][x] |= (0x01 << (y%8)); - } else { - OLED_RAM[y/8][x] &= ~(0x01 << (y%8)); - } - } -} - -PixelStatus HW_OLED_GetPixel(int16_t x, int16_t y) { - if (OLED_RAM[y/8][x] >> (y%8) & 0x01) - return SET_PIXEL; - return RESET_PIXEL; -} - -// 淇褰㈠弬鍛藉悕锛歝h 鈫 str锛孴extSize 鈫 textSize -void HW_OLED_ShowStr(int16_t x, int16_t y, uint8_t str[], uint8_t textSize) { - if (x >= 0 && x < displayWidth && y >= 0 && y < displayHeight) { - int32_t c = 0; - uint8_t j = 0; - switch (textSize) { - case 1: { - while (str[j] != '\0') { - c = str[j] - 32; - if (c < 0) - break; - - if (x >= 125 || (127 - x < 6)) { - x = 0; - y += 8; - if (63 - y < 8) - break; - } - for (uint8_t m = 0; m < 6; m++) { - for (uint8_t n = 0; n < 8; n++) { - HW_OLED_SetPixel(x + m, y + n, (F6x8[c][m] >> n) & 0x01); - } - } - x += 6; - j++; - } - } break; - case 2: { - while (str[j] != '\0') { - c = str[j] - 32; - if (c < 0) - break; - - if (x >= 127 || (127 - x < 8)) { - x = 0; - y += 16; - if (63 - y < 16) - break; - } - for (uint8_t m = 0; m < 2; m++) { - for (uint8_t n = 0; n < 8; n++) { - for (uint8_t i = 0; i < 8; i++) { - HW_OLED_SetPixel(x + n, y + i + m*8, (F8X16[c][n + m*8] >> i) & 0x01); - } - } - } - x += 8; - j++; - } - } break; - } - } - HW_OLED_RefreshRAM(); -} - -void HW_OLED_ShowCN(int16_t x, int16_t y, uint8_t* str) { - if (x >= 0 && x < displayWidth && y >= 0 && y < displayHeight) { - int32_t len = 0, offset = sizeof(F16x16_CN[0].index); - - while (str[len] != '\0') { - if (x >= 127 || (127 - x < 16)) { - x = 0; - y += 16; - if (63 - y < 16) - break; - } - for (uint8_t i = 0; i < sizeof(F16x16_CN)/sizeof(GB2312_CN); i++) { - if (((F16x16_CN[i].index[0] == str[len]) && (F16x16_CN[i].index[1] == str[len+1]))) { - for (uint8_t m = 0; m < 2; m++) { - for (uint8_t n = 0; n < 16; n++) { - for (uint8_t j = 0; j < 8; j++) { - HW_OLED_SetPixel(x + n, y + j + m*8, (F16x16_CN[i].encoder[n + m*16] >> j) & 0x01); - } - } - } - x += 16; - len += offset; - break; - } - else if (F16x16_CN[i].index[0] == str[len] && str[len] == 0x20) { - for (uint8_t m = 0; m < 2; m++) { - for (uint8_t n = 0; n < 16; n++) { - for (uint8_t j = 0; j < 8; j++) { - HW_OLED_SetPixel(x + n, y + j + m*8, (F16x16_CN[i].encoder[n + m*16] >> j) & 0x01); - } - } - } - x += 16; - len++; - break; - } - } - } - } - HW_OLED_RefreshRAM(); -} - -void HW_OLED_ShowMixedCH(int16_t x, int16_t y, uint8_t* str) { - if (x >= 0 && x < displayWidth && y >= 0 && y < displayHeight) { - int32_t len = 0, c, offset = sizeof(F16x16_CN[0].index); - - while (str[len] != '\0') { - if (str[len] >= 0xa1) { - for (uint8_t i = 0; i < sizeof(F16x16_CN)/sizeof(GB2312_CN); i++) { - if (((F16x16_CN[i].index[0] == str[len]) && (F16x16_CN[i].index[1] == str[len+1]))) { - if (x >= 127 || (127 - x < 16)) { - x = 0; - y += 16; - if (63 - y < 16) - break; - } - for (uint8_t m = 0; m < 2; m++) { - for (uint8_t n = 0; n < 16; n++) { - for (uint8_t j = 0; j < 8; j++) { - HW_OLED_SetPixel(x + n, y + j + m*8, (F16x16_CN[i].encoder[n + m*16] >> j) & 0x01); - } - } - } - x += 16; - len += offset; - break; - } - } - } - else if (str[len] <= 127) { - c = str[len] - 32; - if (c < 0) - break; - if (x >= 127 || (127 - x < 8)) { - x = 0; - y += 16; - if (63 - y < 16) - break; - } - for (uint8_t m = 0; m < 2; m++) { - for (uint8_t n = 0; n < 8; n++) { - for (uint8_t i = 0; i < 8; i++) { - HW_OLED_SetPixel(x + n, y + i + m*8, (F8X16[c][n + m*8] >> i) & 0x01); - } - } - } - x += 8; - len++; - } - } - } - HW_OLED_RefreshRAM(); -} - -// 淇褰㈠弬鍛藉悕锛歀 鈫 width锛孒 鈫 height锛孊MP 鈫 bmpData -void HW_OLED_DrawBMP(int16_t x0, int16_t y0, int16_t width, int16_t height, const uint8_t bmpData[]) { - if (x0 >= 0 && x0 < displayWidth && x0 + width <= displayWidth && - y0 >= 0 && y0 < displayHeight && y0 + height <= displayHeight) { - uint8_t *p = (uint8_t *)bmpData; - for(int16_t y = y0; y < y0 + height; y +=8) { - for(int16_t x = x0; x < x0 + width; x++) { - for(int16_t i = 0; i < 8; i++) { - HW_OLED_SetPixel(x, y + i, ((*p) >> i) & 0x01); - } - p++; - } - } - } - HW_OLED_RefreshRAM(); -} - -// 淇褰㈠弬鍛藉悕锛歀 鈫 width锛孒 鈫 height -void OLED_AreaFill(int16_t x0, int16_t y0, int16_t width, int16_t height, uint8_t fillData) { - if (x0 >= 0 && x0 < displayWidth && x0 + width <= displayWidth && - y0 >= 0 && y0 < displayHeight && y0 + height <= displayHeight) { - for(int16_t y = y0; y < y0 + height; y++) { - for(int16_t x = x0; x < x0 + width; x++) { - for(int16_t i = 0; i < 8; i++) { - HW_OLED_SetPixel(x, y + i, (fillData >> i) & SET_PIXEL); - } - } - } - HW_OLED_RefreshRAM(); - } -} - -// 淇褰㈠弬鍛藉悕锛歀 鈫 width锛孒 鈫 height -void OLED_AreaClear(int16_t x0, int16_t y0, int16_t width, int16_t height) { - if (x0 >= 0 && x0 < displayWidth && x0 + width <= displayWidth && - y0 >= 0 && y0 < displayHeight && y0 + height <= displayHeight) { - for(int16_t y = y0; y < y0 + height; y +=8) { - for(int16_t x = x0; x < x0 + width; x++) { - for(int16_t i = 0; i < 8; i++) { - HW_OLED_SetPixel(x, y + i, RESET_PIXEL); - } - } - } - HW_OLED_RefreshRAM(); - } -} + OLED_WriteCommand(0xD5); //设置显示时钟分频比/振荡器频率 + OLED_WriteCommand(0x80); + + OLED_WriteCommand(0xA8); //设置多路复用率 + OLED_WriteCommand(0x3F); + + OLED_WriteCommand(0xD3); //设置显示偏移 + OLED_WriteCommand(0x00); + + OLED_WriteCommand(0x40); //设置显示开始行 + + OLED_WriteCommand(0xA1); //设置左右方向,0xA1正常 0xA0左右反置 + + OLED_WriteCommand(0xC8); //设置上下方向,0xC8正常 0xC0上下反置 -void HW_OLED_FullyToggle(void) { - for(uint16_t m = 0; m < displayHeight/8; m++) { - for(uint16_t n = 0; n < displayWidth; n++) { - OLED_RAM[m][n] = ~OLED_RAM[m][n]; - } - } - HW_OLED_RefreshRAM(); -} + OLED_WriteCommand(0xDA); //设置COM引脚硬件配置 + OLED_WriteCommand(0x12); + + OLED_WriteCommand(0x81); //设置对比度控制 + OLED_WriteCommand(0xCF); -// 淇褰㈠弬鍛藉悕锛歀 鈫 width锛孒 鈫 height -void HW_OLED_AreaToggle(int16_t x0, int16_t y0, int16_t width, int16_t height) { - if (x0 >= 0 && x0 < displayWidth && x0 + width <= displayWidth && - y0 >= 0 && y0 < displayHeight && y0 + height <= displayHeight) { - for(int16_t y = y0; y < y0 + height; y +=8) { - for(int16_t x = x0; x < x0 + width; x++) { - for(int16_t i = 0; i < 8; i++) { - HW_OLED_SetPixel(x, y + i, !HW_OLED_GetPixel(x, y + i)); - } - } - } - HW_OLED_RefreshRAM(); - } -} + OLED_WriteCommand(0xD9); //设置预充电周期 + OLED_WriteCommand(0xF1); -void HW_OLED_VerticalShift(void) { - for(uint8_t i = 0; i < displayHeight; i++) { - HW_OLED_WriteCmd(0xd3); - HW_OLED_WriteCmd(i); - HAL_Delay(40); - } -} + OLED_WriteCommand(0xDB); //设置VCOMH取消选择级别 + OLED_WriteCommand(0x30); -void HW_OLED_HorizontalShift(uint8_t direction) { - HW_OLED_WriteCmd(direction); - HW_OLED_WriteCmd(0x00); - HW_OLED_WriteCmd(0x00); - HW_OLED_WriteCmd(0x05); - HW_OLED_WriteCmd(0x07); - HW_OLED_WriteCmd(0x00); - HW_OLED_WriteCmd(0xff); - HW_OLED_WriteCmd(0x2f); -} + OLED_WriteCommand(0xA4); //设置整个显示打开/关闭 -void HW_OLED_VerticalAndHorizontalShift(uint8_t direction) { - HW_OLED_WriteCmd(direction); - HW_OLED_WriteCmd(0x00); - HW_OLED_WriteCmd(0x00); - HW_OLED_WriteCmd(0x05); - HW_OLED_WriteCmd(0x07); - HW_OLED_WriteCmd(0x01); - HW_OLED_WriteCmd(0x2f); -} + OLED_WriteCommand(0xA6); //设置正常/倒转显示 -void HW_OLED_DisplayMode(uint8_t mode) { - HW_OLED_WriteCmd(mode); -} + OLED_WriteCommand(0x8D); //设置充电泵 + OLED_WriteCommand(0x14); -void HW_OLED_IntensityControl(uint8_t intensity) { - HW_OLED_WriteCmd(0x81); - HW_OLED_WriteCmd(intensity); + OLED_WriteCommand(0xAF); //开启显示 + + OLED_Clear(); //OLED清屏 } diff --git a/modules/oled/HW_OLED.h b/modules/oled/HW_OLED.h index 57ac6b3..2adff44 100644 --- a/modules/oled/HW_OLED.h +++ b/modules/oled/HW_OLED.h @@ -1,220 +1,125 @@ -#ifndef OLED_H__ -#define OLED_H__ +#ifndef __HW_OLED_H +#define __HW_OLED_H -#include "stm32f1xx_hal.h" // 鍖呭惈HAL搴 +#include "main.h" +#include "i2c.h" -/* BMP鍥剧墖璇存槑 - 鍥剧墖鏍煎紡涓轰綅鏄犲皠锛岀储寮曞垎鍒搴斿浘鐗囩殑瀹藉拰楂橈紝 - BMP_xx[H/8][L]; -*/ -extern const uint8_t BMP_Picture[64/8][64]; +/************************* + * 功能:OLED I2C 驱动头文件 + * 依赖:STM32 HAL库 I2C + * 说明:提供OLED初始化、清屏、显示字符串等基础接口 + *************************/ -/* 鍍忕礌鐘舵佹灇涓 */ -typedef enum -{ - SET_PIXEL = 0x01, - RESET_PIXEL = 0x00, -} PixelStatus; +/*==================== OLED 控制命令宏定义 ====================*/ +#define LEFT 0x27 // 左移命令 +#define RIGHT 0x26 // 右移命令 +#define UP 0x29 // 上移命令 +#define DOWN 0x2A // 下移命令 +#define ON 0xA7 // 显示开启/点亮命令 +#define OFF 0xA6 // 显示关闭/熄灭命令 -/** - * @brief 閫氳繃I2C鍐欏叆涓涓瓧鑺傛暟鎹 - * @param regAddr: 瑕佸啓鍏ユ暟鎹殑鍦板潃锛屽彇鍊艰寖鍥翠负0x00 - 0xFF - * @param data: 瑕佸啓鍏ョ殑瀛楄妭鏁版嵁锛屽彇鍊艰寖鍥翠负0x00 - 0xFF - * @retval 鏃 - */ -void HW_OLED_WriteByte(uint8_t regAddr, uint8_t data); - -/** - * @brief 鍐欏懡浠 - * @param iicCommand: 瑕佸啓鍏ョ殑IIC鍛戒护锛屽彇鍊艰寖鍥翠负0x00 - 0xFF - * @retval 鏃 - */ -void HW_OLED_WriteCmd(uint8_t iicCommand); - -/** - * @brief 鍐欐暟鎹 - * @param iicData: 瑕佸啓鍏ョ殑IIC鏁版嵁锛屽彇鍊艰寖鍥翠负0x00 - 0xFF - * @retval 鏃 - */ -void HW_OLED_WriteDat(uint8_t iicData); - -/** - * @brief 鍒濆鍖朞LED妯″潡 - * @param 鏃 - * @retval 鏃 - */ -void HW_OLED_Init(void); - -/** - * @brief 鎵撳紑OLED鏄剧ず - * @param 鏃 - * @retval 鏃 - */ -void HW_OLED_On(void); - -/** - * @brief 鍏抽棴OLED鏄剧ず -- 鐫$湢妯″紡涓嬶紝OLED鍔熻楀皬浜10uA - * @param 鏃 - * @retval 鏃 - */ -void HW_OLED_Off(void); +#define OLED_Addr 0x78 // OLED I2C 设备地址 -/** - * @brief 鍏ㄩ噺鍒锋柊 - * @param 鏃 - * @retval 鏃 - */ -void HW_OLED_RefreshRAM(void); - -/** - * @brief 娓呯┖鏁版嵁缂撳瓨 - * @param 鏃 - * @retval 鏃 - */ -void HW_OLED_ClearRAM(void); - -/** - * @brief 鍏ㄥ睆濉厖 0x00~0xff - * @param fillData: 濉厖鏁版嵁锛1瀛楄妭锛夛紝鍙栧艰寖鍥翠负0x00 - 0xFF - * @retval 鏃 - */ -void HW_OLED_FullyFill(uint8_t fillData); - -/** - * @brief 鍏ㄥ睆娓呯┖ - * @param 鏃 - * @retval 鏃 - */ -void HW_OLED_FullyClear(void); - -/** - * @brief 璁剧疆鎸囧畾鍍忕礌鐐圭殑鐘舵 - * @param x: 璧峰妯潗鏍囷紝鍙栧艰寖鍥翠负0 - 127 - * @param y: 璧峰绾靛潗鏍囷紝鍙栧艰寖鍥翠负0 - 63 - * @param setPixel: 璁剧疆鍍忕礌鐘舵侊紝鍙栧间负SET_PIXEL锛堢偣浜儚绱狅級鎴朢ESET_PIXEL锛堢唲鐏儚绱狅級 - * @retval 鏃 - */ -void HW_OLED_SetPixel(int16_t x, int16_t y, uint8_t setPixel); +/*==================== OLED 屏幕参数 ====================*/ +#define displayWidth 128 // OLED宽度:128 +#define displayHeight 64 // OLED高度:64 +/*==================== 底层I2C写函数 ====================*/ /** - * @brief 鑾峰彇鎸囧畾鍍忕礌鐐圭殑鐘舵 - * @param x: 璧峰妯潗鏍囷紝鍙栧艰寖鍥翠负0 - 127 - * @param y: 璧峰绾靛潗鏍囷紝鍙栧艰寖鍥翠负0 - 63 - * @retval PixelStatus: 杩斿洖鍍忕礌鐨勭姸鎬侊紝SET_PIXEL锛堝儚绱犵偣浜級鎴朢ESET_PIXEL锛堝儚绱犵唲鐏級 + * @brief OLED通过I2C写入一个字节(命令/数据) + * @param regAddr: 控制字节 0x00=命令 0x40=数据 + * @param data: 要写入的命令或数据 + * @retval 无 */ -PixelStatus HW_OLED_GetPixel(int16_t x, int16_t y); - -/** - * @brief 鏄剧ずcodetab.h涓殑ASCII瀛楃锛屾湁6*8鍜8*16鍙 - * @param x: 璧峰妯潗鏍囷紝鍙栧艰寖鍥翠负0 - 127 - * @param y: 璧峰绾靛潗鏍囷紝鍙栧艰寖鍥翠负0 - 63 - * @param str[]: 瑕佹樉绀虹殑瀛楃涓 - * @param textSize: 瀛椾綋澶у皬锛屽彇鍊间负1锛6*8瀛椾綋锛夋垨2锛8*16瀛椾綋锛 - * @retval 鏃 - */ -void HW_OLED_ShowStr(int16_t x, int16_t y, uint8_t str[], uint8_t textSize); +void HW_OLED_WriteByte(uint8_t regAddr, uint8_t data); /** - * @brief 鏄剧ずcodetab.h涓殑姹夊瓧锛16*16鐐归樀 - * @param x: 璧峰妯潗鏍囷紝鍙栧艰寖鍥翠负0 - 127 - * @param y: 璧峰绾靛潗鏍囷紝鍙栧艰寖鍥翠负0 - 7 - * @param str: 瀵瑰簲codetab.h涓殑姹夊瓧 - * @retval 鏃 + * @brief 向OLED写入命令 + * @param iicCommand: 命令值 + * @retval 无 */ -void HW_OLED_ShowCN(int16_t x, int16_t y, uint8_t* str); +void OLED_WriteCommand(uint8_t iicCommand); /** - * @brief 鏄剧ずcodetab.h涓殑姹夊瓧锛16*16鐐归樀锛岃嫳鏂囷紝8*16鐐归樀 - * @param x: 璧峰妯潗鏍囷紝鍙栧艰寖鍥翠负0 - 127 - * @param y: 璧峰绾靛潗鏍囷紝鍙栧艰寖鍥翠负0 - 7 - * @param str: 瀵瑰簲codetab.h涓殑姹夊瓧鍜岃嫳鏂 - * @retval 鏃 + * @brief 向OLED写入数据 + * @param iicData: 显示数据 + * @retval 无 */ -void HW_OLED_ShowMixedCH(int16_t x, int16_t y, uint8_t* str); +void OLED_WriteData(uint8_t iicData); /** - * @brief 鍥剧墖鏄剧ず鍑芥暟锛屾樉绀築MP浣嶅浘锛屾牸寮忎娇鐢ㄤ簩缁存暟缁勫瓨鍌 - * @param x0: 璧峰妯潗鏍囷紝鍙栧艰寖鍥翠负0 - 127 - * @param y0: 璧峰绾靛潗鏍囷紝鍙栧艰寖鍥翠负0 - 63 - * @param width: 鍥剧墖闀垮害锛屽彇鍊奸渶淇濊瘉鍥剧墖涓嶄細瓒呭嚭灞忓箷鑼冨洿 - * @param height: 鍥剧墖楂樺害锛屽彇鍊奸渶淇濊瘉鍥剧墖涓嶄細瓒呭嚭灞忓箷鑼冨洿 - * @param bmpData: 浣嶅浘鏁版嵁 - * @retval 鏃 + * @brief 设置OLED光标位置 + * @param Y: 页地址 0~7 + * @param X: 列地址 0~127 + * @retval 无 */ -void HW_OLED_DrawBMP(int16_t x0, int16_t y0, int16_t width, int16_t height, const uint8_t bmpData[]); +void OLED_SetCursor(uint8_t Y, uint8_t X); +/*==================== 屏幕操作函数 ====================*/ /** - * @brief 鍖哄煙濉厖 - * @param x0: 璧峰妯潗鏍囷紝鍙栧艰寖鍥翠负0 - 127 - * @param y0: 璧峰绾靛潗鏍囷紝鍙栧艰寖鍥翠负0 - 63 - * @param width: 濉厖鍖哄煙闀垮害锛屽彇鍊奸渶淇濊瘉鍖哄煙涓嶄細瓒呭嚭灞忓箷鑼冨洿 - * @param height: 濉厖鍖哄煙楂樺害锛屽彇鍊奸渶淇濊瘉鍖哄煙涓嶄細瓒呭嚭灞忓箷鑼冨洿 - * @param fillData: 濉厖鏁版嵁锛屽彇鍊艰寖鍥翠负0x00 - 0xFF - * @retval 鏃 + * @brief OLED初始化(上电必须调用) + * @param 无 + * @retval 无 */ -void HW_OLED_AreaFill(int16_t x0, int16_t y0, int16_t width, int16_t height, uint8_t fillData); +void OLED_Init(void); /** - * @brief 鍖哄煙娓呯┖ - * @param x0: 璧峰妯潗鏍囷紝鍙栧艰寖鍥翠负0 - 127 - * @param y0: 璧峰绾靛潗鏍囷紝鍙栧艰寖鍥翠负0 - 63 - * @param width: 娓呯┖鍖哄煙闀垮害锛屽彇鍊奸渶淇濊瘉鍖哄煙涓嶄細瓒呭嚭灞忓箷鑼冨洿 - * @param height: 娓呯┖鍖哄煙楂樺害锛屽彇鍊奸渶淇濊瘉鍖哄煙涓嶄細瓒呭嚭灞忓箷鑼冨洿 - * @retval 鏃 + * @brief OLED清屏(全黑) + * @param 无 + * @retval 无 */ -void HW_OLED_AreaClear(int16_t x0, int16_t y0, int16_t width, int16_t height); +void OLED_Clear(void); /** - * @brief 鍏ㄥ睆鍙嶈壊鏄剧ず - * @param 鏃 - * @retval 鏃 + * @brief OLED满屏点亮(全白) + * @param 无 + * @retval 无 */ -void HW_OLED_FullyToggle(void); +void my_OLED_Clear(void); +/*==================== 显示函数 ====================*/ /** - * @brief 鍖哄煙鍙嶈壊鏄剧ず - * @param x0: 璧峰妯潗鏍囷紝鍙栧艰寖鍥翠负0 - 127 - * @param y0: 璧峰绾靛潗鏍囷紝鍙栧艰寖鍥翠负0 - 63 - * @param width: 鍙嶈壊鍖哄煙闀垮害锛屽彇鍊奸渶淇濊瘉鍖哄煙涓嶄細瓒呭嚭灞忓箷鑼冨洿 - * @param height: 鍙嶈壊鍖哄煙楂樺害锛屽彇鍊奸渶淇濊瘉鍖哄煙涓嶄細瓒呭嚭灞忓箷鑼冨洿 - * @retval 鏃 + * @brief OLED显示单个字符(8x16字体) + * @param Line: 行 1~4 + * @param Column: 列 1~16 + * @param Char: 要显示的字符 + * @retval 无 */ -void HW_OLED_AreaToggle(int16_t x0, int16_t y0, int16_t width, int16_t height); +void OLED_ShowChar(uint8_t Line, uint8_t Column, char Char); /** - * @brief 鍏ㄥ睆鍨傜洿婊氬姩鏄剧ず - * @param 鏃 - * @retval 鏃 + * @brief OLED显示字符串 + * @param Line: 起始行 1~4 + * @param Column: 起始列 1~16 + * @param String: 字符串指针 + * @retval 无 */ -void HW_OLED_VerticalShift(void); +void OLED_ShowString(uint8_t Line, uint8_t Column, char *String); /** - * @brief 鍏ㄥ睆姘村钩婊氬姩鏄剧ず - * @param direction: 婊氬姩鏂瑰悜锛屽叿浣撳彇鍊煎惈涔夐渶鏍规嵁瀹為檯瀹炵幇纭畾 - * @retval 鏃 + * @brief OLED显示无符号十进制数字 + * @param Line: 行 + * @param Column: 列 + * @param Number: 数字 0~4294967295 + * @param Length: 显示位数 + * @retval 无 */ -void HW_OLED_HorizontalShift(uint8_t direction); +void OLED_ShowNum(uint8_t Line, uint8_t Column, uint32_t Number, uint8_t Length); /** - * @brief 鍏ㄥ睆鍚屾椂鍨傜洿鍜屾按骞虫粴鍔ㄦ樉绀 - * @param direction: 婊氬姩鏂瑰悜锛屽叿浣撳彇鍊煎惈涔夐渶鏍规嵁瀹為檯瀹炵幇纭畾 - * @retval 鏃 + * @brief OLED显示有符号十进制数字 */ -void HW_OLED_VerticalAndHorizontalShift(uint8_t direction); +void OLED_ShowSignedNum(uint8_t Line, uint8_t Column, int32_t Number, uint8_t Length); /** - * @brief 灞忓箷鏄剧ず妯″紡閫夋嫨 - * @param mode: 鏄剧ず妯″紡锛屽叿浣撳彇鍊煎惈涔夐渶鏍规嵁瀹為檯瀹炵幇纭畾 - * @retval 鏃 + * @brief OLED显示十六进制数字 */ -void HW_OLED_DisplayMode(uint8_t mode); +void OLED_ShowHexNum(uint8_t Line, uint8_t Column, uint32_t Number, uint8_t Length); /** - * @brief 灞忓箷浜害鎺у埗 - * @param intensity: 浜害鍊硷紝鍙栧艰寖鍥撮渶鏍规嵁瀹為檯纭欢纭畾 - * @retval 鏃 + * @brief OLED显示二进制数字 */ -void HW_OLED_IntensityControl(uint8_t intensity); +void OLED_ShowBinNum(uint8_t Line, uint8_t Column, uint32_t Number, uint8_t Length); #endif diff --git a/modules/oled/HW_OLED_Font.h b/modules/oled/HW_OLED_Font.h deleted file mode 100644 index ee300e1..0000000 --- a/modules/oled/HW_OLED_Font.h +++ /dev/null @@ -1,262 +0,0 @@ -#ifndef OLED_FONT_H__ -#define OLED_FONT_H__ -#ifdef __cplusplus - extern "C" { -#endif - -#include "stm32f1xx_hal.h" - -const uint8_t F6x8[][6] = -{ - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,// sp - 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00,// ! - 0x00, 0x00, 0x07, 0x00, 0x07, 0x00,// " - 0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14,// # - 0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12,// $ - 0x00, 0x62, 0x64, 0x08, 0x13, 0x23,// % - 0x00, 0x36, 0x49, 0x55, 0x22, 0x50,// & - 0x00, 0x00, 0x05, 0x03, 0x00, 0x00,// ' - 0x00, 0x00, 0x1c, 0x22, 0x41, 0x00,// ( - 0x00, 0x00, 0x41, 0x22, 0x1c, 0x00,// ) - 0x00, 0x14, 0x08, 0x3E, 0x08, 0x14,// * - 0x00, 0x08, 0x08, 0x3E, 0x08, 0x08,// + - 0x00, 0x00, 0x00, 0xA0, 0x60, 0x00,// , - 0x00, 0x08, 0x08, 0x08, 0x08, 0x08,// - - 0x00, 0x00, 0x60, 0x60, 0x00, 0x00,// . - 0x00, 0x20, 0x10, 0x08, 0x04, 0x02,// / - 0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E,// 0 - 0x00, 0x00, 0x42, 0x7F, 0x40, 0x00,// 1 - 0x00, 0x42, 0x61, 0x51, 0x49, 0x46,// 2 - 0x00, 0x21, 0x41, 0x45, 0x4B, 0x31,// 3 - 0x00, 0x18, 0x14, 0x12, 0x7F, 0x10,// 4 - 0x00, 0x27, 0x45, 0x45, 0x45, 0x39,// 5 - 0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30,// 6 - 0x00, 0x01, 0x71, 0x09, 0x05, 0x03,// 7 - 0x00, 0x36, 0x49, 0x49, 0x49, 0x36,// 8 - 0x00, 0x06, 0x49, 0x49, 0x29, 0x1E,// 9 - 0x00, 0x00, 0x36, 0x36, 0x00, 0x00,// : - 0x00, 0x00, 0x56, 0x36, 0x00, 0x00,// ; - 0x00, 0x08, 0x14, 0x22, 0x41, 0x00,// < - 0x00, 0x14, 0x14, 0x14, 0x14, 0x14,// = - 0x00, 0x00, 0x41, 0x22, 0x14, 0x08,// > - 0x00, 0x02, 0x01, 0x51, 0x09, 0x06,// ? - 0x00, 0x32, 0x49, 0x59, 0x51, 0x3E,// @ - 0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C,// A - 0x00, 0x7F, 0x49, 0x49, 0x49, 0x36,// B - 0x00, 0x3E, 0x41, 0x41, 0x41, 0x22,// C - 0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C,// D - 0x00, 0x7F, 0x49, 0x49, 0x49, 0x41,// E - 0x00, 0x7F, 0x09, 0x09, 0x09, 0x01,// F - 0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A,// G - 0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F,// H - 0x00, 0x00, 0x41, 0x7F, 0x41, 0x00,// I - 0x00, 0x20, 0x40, 0x41, 0x3F, 0x01,// J - 0x00, 0x7F, 0x08, 0x14, 0x22, 0x41,// K - 0x00, 0x7F, 0x40, 0x40, 0x40, 0x40,// L - 0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F,// M - 0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F,// N - 0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E,// O - 0x00, 0x7F, 0x09, 0x09, 0x09, 0x06,// P - 0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E,// Q - 0x00, 0x7F, 0x09, 0x19, 0x29, 0x46,// R - 0x00, 0x46, 0x49, 0x49, 0x49, 0x31,// S - 0x00, 0x01, 0x01, 0x7F, 0x01, 0x01,// T - 0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F,// U - 0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F,// V - 0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F,// W - 0x00, 0x63, 0x14, 0x08, 0x14, 0x63,// X - 0x00, 0x07, 0x08, 0x70, 0x08, 0x07,// Y - 0x00, 0x61, 0x51, 0x49, 0x45, 0x43,// Z - 0x00, 0x00, 0x7F, 0x41, 0x41, 0x00,// [ - 0x00, 0x55, 0x2A, 0x55, 0x2A, 0x55,// 55 - 0x00, 0x00, 0x41, 0x41, 0x7F, 0x00,// ] - 0x00, 0x04, 0x02, 0x01, 0x02, 0x04,// ^ - 0x00, 0x40, 0x40, 0x40, 0x40, 0x40,// _ - 0x00, 0x00, 0x01, 0x02, 0x04, 0x00,// ' - 0x00, 0x20, 0x54, 0x54, 0x54, 0x78,// a - 0x00, 0x7F, 0x48, 0x44, 0x44, 0x38,// b - 0x00, 0x38, 0x44, 0x44, 0x44, 0x20,// c - 0x00, 0x38, 0x44, 0x44, 0x48, 0x7F,// d - 0x00, 0x38, 0x54, 0x54, 0x54, 0x18,// e - 0x00, 0x08, 0x7E, 0x09, 0x01, 0x02,// f - 0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C,// g - 0x00, 0x7F, 0x08, 0x04, 0x04, 0x78,// h - 0x00, 0x00, 0x44, 0x7D, 0x40, 0x00,// i - 0x00, 0x40, 0x80, 0x84, 0x7D, 0x00,// j - 0x00, 0x7F, 0x10, 0x28, 0x44, 0x00,// k - 0x00, 0x00, 0x41, 0x7F, 0x40, 0x00,// l - 0x00, 0x7C, 0x04, 0x18, 0x04, 0x78,// m - 0x00, 0x7C, 0x08, 0x04, 0x04, 0x78,// n - 0x00, 0x38, 0x44, 0x44, 0x44, 0x38,// o - 0x00, 0xFC, 0x24, 0x24, 0x24, 0x18,// p - 0x00, 0x18, 0x24, 0x24, 0x18, 0xFC,// q - 0x00, 0x7C, 0x08, 0x04, 0x04, 0x08,// r - 0x00, 0x48, 0x54, 0x54, 0x54, 0x20,// s - 0x00, 0x04, 0x3F, 0x44, 0x40, 0x20,// t - 0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C,// u - 0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C,// v - 0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C,// w - 0x00, 0x44, 0x28, 0x10, 0x28, 0x44,// x - 0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C,// y - 0x00, 0x44, 0x64, 0x54, 0x4C, 0x44,// z - 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,// horiz lines -}; -/****************************************8*16鐨勭偣闃************************************/ -const uint8_t F8X16[][16]= -{ - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,// 0 - 0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x30,0x00,0x00,0x00,//! 1 - 0x00,0x10,0x0C,0x06,0x10,0x0C,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//" 2 - 0x40,0xC0,0x78,0x40,0xC0,0x78,0x40,0x00,0x04,0x3F,0x04,0x04,0x3F,0x04,0x04,0x00,//# 3 - 0x00,0x70,0x88,0xFC,0x08,0x30,0x00,0x00,0x00,0x18,0x20,0xFF,0x21,0x1E,0x00,0x00,//$ 4 - 0xF0,0x08,0xF0,0x00,0xE0,0x18,0x00,0x00,0x00,0x21,0x1C,0x03,0x1E,0x21,0x1E,0x00,//% 5 - 0x00,0xF0,0x08,0x88,0x70,0x00,0x00,0x00,0x1E,0x21,0x23,0x24,0x19,0x27,0x21,0x10,//& 6 - 0x10,0x16,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//' 7 - 0x00,0x00,0x00,0xE0,0x18,0x04,0x02,0x00,0x00,0x00,0x00,0x07,0x18,0x20,0x40,0x00,//( 8 - 0x00,0x02,0x04,0x18,0xE0,0x00,0x00,0x00,0x00,0x40,0x20,0x18,0x07,0x00,0x00,0x00,//) 9 - 0x40,0x40,0x80,0xF0,0x80,0x40,0x40,0x00,0x02,0x02,0x01,0x0F,0x01,0x02,0x02,0x00,//* 10 - 0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x1F,0x01,0x01,0x01,0x00,//+ 11 - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xB0,0x70,0x00,0x00,0x00,0x00,0x00,//, 12 - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,//- 13 - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,//. 14 - 0x00,0x00,0x00,0x00,0x80,0x60,0x18,0x04,0x00,0x60,0x18,0x06,0x01,0x00,0x00,0x00,/// 15 - 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,//0 16 - 0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//1 17 - 0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,//2 18 - 0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,//3 19 - 0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,//4 20 - 0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,//5 21 - 0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,//6 22 - 0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,//7 23 - 0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,//8 24 - 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,//9 25 - 0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,//: 26 - 0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x60,0x00,0x00,0x00,0x00,//; 27 - 0x00,0x00,0x80,0x40,0x20,0x10,0x08,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x00,//< 28 - 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,//= 29 - 0x00,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x20,0x10,0x08,0x04,0x02,0x01,0x00,//> 30 - 0x00,0x70,0x48,0x08,0x08,0x08,0xF0,0x00,0x00,0x00,0x00,0x30,0x36,0x01,0x00,0x00,//? 31 - 0xC0,0x30,0xC8,0x28,0xE8,0x10,0xE0,0x00,0x07,0x18,0x27,0x24,0x23,0x14,0x0B,0x00,//@ 32 - 0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00,0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20,//A 33 - 0x08,0xF8,0x88,0x88,0x88,0x70,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x11,0x0E,0x00,//B 34 - 0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00,//C 35 - 0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00,//D 36 - 0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x20,0x23,0x20,0x18,0x00,//E 37 - 0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x00,0x03,0x00,0x00,0x00,//F 38 - 0xC0,0x30,0x08,0x08,0x08,0x38,0x00,0x00,0x07,0x18,0x20,0x20,0x22,0x1E,0x02,0x00,//G 39 - 0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x20,0x3F,0x21,0x01,0x01,0x21,0x3F,0x20,//H 40 - 0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//I 41 - 0x00,0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,0x00,//J 42 - 0x08,0xF8,0x88,0xC0,0x28,0x18,0x08,0x00,0x20,0x3F,0x20,0x01,0x26,0x38,0x20,0x00,//K 43 - 0x08,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x20,0x30,0x00,//L 44 - 0x08,0xF8,0xF8,0x00,0xF8,0xF8,0x08,0x00,0x20,0x3F,0x00,0x3F,0x00,0x3F,0x20,0x00,//M 45 - 0x08,0xF8,0x30,0xC0,0x00,0x08,0xF8,0x08,0x20,0x3F,0x20,0x00,0x07,0x18,0x3F,0x00,//N 46 - 0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00,//O 47 - 0x08,0xF8,0x08,0x08,0x08,0x08,0xF0,0x00,0x20,0x3F,0x21,0x01,0x01,0x01,0x00,0x00,//P 48 - 0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x18,0x24,0x24,0x38,0x50,0x4F,0x00,//Q 49 - 0x08,0xF8,0x88,0x88,0x88,0x88,0x70,0x00,0x20,0x3F,0x20,0x00,0x03,0x0C,0x30,0x20,//R 50 - 0x00,0x70,0x88,0x08,0x08,0x08,0x38,0x00,0x00,0x38,0x20,0x21,0x21,0x22,0x1C,0x00,//S 51 - 0x18,0x08,0x08,0xF8,0x08,0x08,0x18,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//T 52 - 0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,//U 53 - 0x08,0x78,0x88,0x00,0x00,0xC8,0x38,0x08,0x00,0x00,0x07,0x38,0x0E,0x01,0x00,0x00,//V 54 - 0xF8,0x08,0x00,0xF8,0x00,0x08,0xF8,0x00,0x03,0x3C,0x07,0x00,0x07,0x3C,0x03,0x00,//W 55 - 0x08,0x18,0x68,0x80,0x80,0x68,0x18,0x08,0x20,0x30,0x2C,0x03,0x03,0x2C,0x30,0x20,//X 56 - 0x08,0x38,0xC8,0x00,0xC8,0x38,0x08,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//Y 57 - 0x10,0x08,0x08,0x08,0xC8,0x38,0x08,0x00,0x20,0x38,0x26,0x21,0x20,0x20,0x18,0x00,//Z 58 - 0x00,0x00,0x00,0xFE,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x7F,0x40,0x40,0x40,0x00,//[ 59 - 0x00,0x0C,0x30,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x06,0x38,0xC0,0x00,//\ 60 - 0x00,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0x00,0x40,0x40,0x40,0x7F,0x00,0x00,0x00,//] 61 - 0x00,0x00,0x04,0x02,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//^ 62 - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,//_ 63 - 0x00,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//` 64 - 0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x19,0x24,0x22,0x22,0x22,0x3F,0x20,//a 65 - 0x08,0xF8,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x3F,0x11,0x20,0x20,0x11,0x0E,0x00,//b 66 - 0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x0E,0x11,0x20,0x20,0x20,0x11,0x00,//c 67 - 0x00,0x00,0x00,0x80,0x80,0x88,0xF8,0x00,0x00,0x0E,0x11,0x20,0x20,0x10,0x3F,0x20,//d 68 - 0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x22,0x22,0x22,0x22,0x13,0x00,//e 69 - 0x00,0x80,0x80,0xF0,0x88,0x88,0x88,0x18,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//f 70 - 0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x6B,0x94,0x94,0x94,0x93,0x60,0x00,//g 71 - 0x08,0xF8,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,//h 72 - 0x00,0x80,0x98,0x98,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//i 73 - 0x00,0x00,0x00,0x80,0x98,0x98,0x00,0x00,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,//j 74 - 0x08,0xF8,0x00,0x00,0x80,0x80,0x80,0x00,0x20,0x3F,0x24,0x02,0x2D,0x30,0x20,0x00,//k 75 - 0x00,0x08,0x08,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//l 76 - 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F,//m 77 - 0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,//n 78 - 0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,//o 79 - 0x80,0x80,0x00,0x80,0x80,0x00,0x00,0x00,0x80,0xFF,0xA1,0x20,0x20,0x11,0x0E,0x00,//p 80 - 0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x0E,0x11,0x20,0x20,0xA0,0xFF,0x80,//q 81 - 0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x20,0x20,0x3F,0x21,0x20,0x00,0x01,0x00,//r 82 - 0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x33,0x24,0x24,0x24,0x24,0x19,0x00,//s 83 - 0x00,0x80,0x80,0xE0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x1F,0x20,0x20,0x00,0x00,//t 84 - 0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x1F,0x20,0x20,0x20,0x10,0x3F,0x20,//u 85 - 0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x00,0x01,0x0E,0x30,0x08,0x06,0x01,0x00,//v 86 - 0x80,0x80,0x00,0x80,0x00,0x80,0x80,0x80,0x0F,0x30,0x0C,0x03,0x0C,0x30,0x0F,0x00,//w 87 - 0x00,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x31,0x2E,0x0E,0x31,0x20,0x00,//x 88 - 0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x80,0x81,0x8E,0x70,0x18,0x06,0x01,0x00,//y 89 - 0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x21,0x30,0x2C,0x22,0x21,0x30,0x00,//z 90 - 0x00,0x00,0x00,0x00,0x80,0x7C,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x3F,0x40,0x40,//{ 91 - 0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,//| 92 - 0x00,0x02,0x02,0x7C,0x80,0x00,0x00,0x00,0x00,0x40,0x40,0x3F,0x00,0x00,0x00,0x00,//} 93 - 0x00,0x06,0x01,0x01,0x02,0x02,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//~ 94 -}; - -typedef struct { - char index[2]; - uint8_t encoder[32]; -}GB2312_CN; - -const GB2312_CN F16x16_CN[] = { - {"娓", - 0x10,0x60,0x02,0x8C,0x00,0x00,0xFE,0x92,0x92,0x92,0x92,0x92,0xFE,0x00,0x00,0x00,0x04,0x04,0x7E,0x01,0x40,0x7E,0x42,0x42,0x7E,0x42,0x7E,0x42,0x42,0x7E,0x40,0x00,/*"娓"*/ - }, - {"搴", - 0x00,0x00,0xFC,0x24,0x24,0x24,0xFC,0x25,0x26,0x24,0xFC,0x24,0x24,0x24,0x04,0x00,0x40,0x30,0x8F,0x80,0x84,0x4C,0x55,0x25,0x25,0x25,0x55,0x4C,0x80,0x80,0x80,0x00,/*"搴"*/ - } -}; - -const uint8_t BMP_Picture[64/8][64] = { -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80, -0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x40,0x30,0x1E, -0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x3C,0x40,0x60,0x20,0x20,0x20,0x20, -0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x60,0xC0,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x30,0x10,0x10,0x08,0x04,0x04,0x02,0xFD,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x10,0x10,0x0C,0x06,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE, -0x00,0x30,0x10,0x10,0x10,0x10,0x10,0x08,0x08,0x04,0x07,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFB,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0x30,0x00,0x00,0x00,0x00,0x03, -0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x50,0x80,0x00,0x00,0x80, -0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x3F,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x70,0xF0,0x0F, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -}; - - - -#ifdef __cplusplus -} -#endif -#endif - - - - diff --git a/modules/oled/OLED_Font.h b/modules/oled/OLED_Font.h new file mode 100644 index 0000000..6cd34bf --- /dev/null +++ b/modules/oled/OLED_Font.h @@ -0,0 +1,202 @@ +#ifndef __OLED_FONT_H +#define __OLED_FONT_H +#include "main.h" +/*OLED瀛楁ā搴擄紝瀹8鍍忕礌锛岄珮16鍍忕礌*/ +const uint8_t OLED_F8x16[][16]= +{ + {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},// 0 + + {0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x30,0x00,0x00,0x00},//! 1 + + {0x00,0x10,0x0C,0x06,0x10,0x0C,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//" 2 + + {0x40,0xC0,0x78,0x40,0xC0,0x78,0x40,0x00,0x04,0x3F,0x04,0x04,0x3F,0x04,0x04,0x00},//# 3 + + {0x00,0x70,0x88,0xFC,0x08,0x30,0x00,0x00,0x00,0x18,0x20,0xFF,0x21,0x1E,0x00,0x00},//$ 4 + + {0xF0,0x08,0xF0,0x00,0xE0,0x18,0x00,0x00,0x00,0x21,0x1C,0x03,0x1E,0x21,0x1E,0x00},//% 5 + + {0x00,0xF0,0x08,0x88,0x70,0x00,0x00,0x00,0x1E,0x21,0x23,0x24,0x19,0x27,0x21,0x10},//& 6 + + {0x10,0x16,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//' 7 + + {0x00,0x00,0x00,0xE0,0x18,0x04,0x02,0x00,0x00,0x00,0x00,0x07,0x18,0x20,0x40,0x00},//( 8 + + {0x00,0x02,0x04,0x18,0xE0,0x00,0x00,0x00,0x00,0x40,0x20,0x18,0x07,0x00,0x00,0x00},//) 9 + + {0x40,0x40,0x80,0xF0,0x80,0x40,0x40,0x00,0x02,0x02,0x01,0x0F,0x01,0x02,0x02,0x00},//* 10 + + {0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x1F,0x01,0x01,0x01,0x00},//+ 11 + + {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xB0,0x70,0x00,0x00,0x00,0x00,0x00},//, 12 + + {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01},//- 13 + + {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00},//. 14 + + {0x00,0x00,0x00,0x00,0x80,0x60,0x18,0x04,0x00,0x60,0x18,0x06,0x01,0x00,0x00,0x00},/// 15 + + {0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00},//0 16 + + {0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00},//1 17 + + {0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00},//2 18 + + {0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00},//3 19 + + {0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00},//4 20 + + {0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00},//5 21 + + {0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00},//6 22 + + {0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00},//7 23 + + {0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00},//8 24 + + {0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00},//9 25 + + {0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00},//: 26 + + {0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x60,0x00,0x00,0x00,0x00},//; 27 + + {0x00,0x00,0x80,0x40,0x20,0x10,0x08,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x00},//< 28 + + {0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00},//= 29 + + {0x00,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x20,0x10,0x08,0x04,0x02,0x01,0x00},//> 30 + + {0x00,0x70,0x48,0x08,0x08,0x08,0xF0,0x00,0x00,0x00,0x00,0x30,0x36,0x01,0x00,0x00},//? 31 + + {0xC0,0x30,0xC8,0x28,0xE8,0x10,0xE0,0x00,0x07,0x18,0x27,0x24,0x23,0x14,0x0B,0x00},//@ 32 + + {0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00,0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20},//A 33 + + {0x08,0xF8,0x88,0x88,0x88,0x70,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x11,0x0E,0x00},//B 34 + + {0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00},//C 35 + + {0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00},//D 36 + + {0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x20,0x23,0x20,0x18,0x00},//E 37 + + {0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x00,0x03,0x00,0x00,0x00},//F 38 + + {0xC0,0x30,0x08,0x08,0x08,0x38,0x00,0x00,0x07,0x18,0x20,0x20,0x22,0x1E,0x02,0x00},//G 39 + + {0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x20,0x3F,0x21,0x01,0x01,0x21,0x3F,0x20},//H 40 + + {0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00},//I 41 + + {0x00,0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,0x00},//J 42 + + {0x08,0xF8,0x88,0xC0,0x28,0x18,0x08,0x00,0x20,0x3F,0x20,0x01,0x26,0x38,0x20,0x00},//K 43 + + {0x08,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x20,0x30,0x00},//L 44 + + {0x08,0xF8,0xF8,0x00,0xF8,0xF8,0x08,0x00,0x20,0x3F,0x00,0x3F,0x00,0x3F,0x20,0x00},//M 45 + + {0x08,0xF8,0x30,0xC0,0x00,0x08,0xF8,0x08,0x20,0x3F,0x20,0x00,0x07,0x18,0x3F,0x00},//N 46 + + {0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00},//O 47 + + {0x08,0xF8,0x08,0x08,0x08,0x08,0xF0,0x00,0x20,0x3F,0x21,0x01,0x01,0x01,0x00,0x00},//P 48 + + {0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x18,0x24,0x24,0x38,0x50,0x4F,0x00},//Q 49 + + {0x08,0xF8,0x88,0x88,0x88,0x88,0x70,0x00,0x20,0x3F,0x20,0x00,0x03,0x0C,0x30,0x20},//R 50 + + {0x00,0x70,0x88,0x08,0x08,0x08,0x38,0x00,0x00,0x38,0x20,0x21,0x21,0x22,0x1C,0x00},//S 51 + + {0x18,0x08,0x08,0xF8,0x08,0x08,0x18,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00},//T 52 + + {0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00},//U 53 + + {0x08,0x78,0x88,0x00,0x00,0xC8,0x38,0x08,0x00,0x00,0x07,0x38,0x0E,0x01,0x00,0x00},//V 54 + + {0xF8,0x08,0x00,0xF8,0x00,0x08,0xF8,0x00,0x03,0x3C,0x07,0x00,0x07,0x3C,0x03,0x00},//W 55 + + {0x08,0x18,0x68,0x80,0x80,0x68,0x18,0x08,0x20,0x30,0x2C,0x03,0x03,0x2C,0x30,0x20},//X 56 + + {0x08,0x38,0xC8,0x00,0xC8,0x38,0x08,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00},//Y 57 + + {0x10,0x08,0x08,0x08,0xC8,0x38,0x08,0x00,0x20,0x38,0x26,0x21,0x20,0x20,0x18,0x00},//Z 58 + + {0x00,0x00,0x00,0xFE,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x7F,0x40,0x40,0x40,0x00},//[ 59 + + {0x00,0x0C,0x30,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x06,0x38,0xC0,0x00},//\ 60 + + {0x00,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0x00,0x40,0x40,0x40,0x7F,0x00,0x00,0x00},//] 61 + + {0x00,0x00,0x04,0x02,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//^ 62 + + {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80},//_ 63 + + {0x00,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//` 64 + + {0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x19,0x24,0x22,0x22,0x22,0x3F,0x20},//a 65 + + {0x08,0xF8,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x3F,0x11,0x20,0x20,0x11,0x0E,0x00},//b 66 + + {0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x0E,0x11,0x20,0x20,0x20,0x11,0x00},//c 67 + + {0x00,0x00,0x00,0x80,0x80,0x88,0xF8,0x00,0x00,0x0E,0x11,0x20,0x20,0x10,0x3F,0x20},//d 68 + + {0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x22,0x22,0x22,0x22,0x13,0x00},//e 69 + + {0x00,0x80,0x80,0xF0,0x88,0x88,0x88,0x18,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00},//f 70 + + {0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x6B,0x94,0x94,0x94,0x93,0x60,0x00},//g 71 + + {0x08,0xF8,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20},//h 72 + + {0x00,0x80,0x98,0x98,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00},//i 73 + + {0x00,0x00,0x00,0x80,0x98,0x98,0x00,0x00,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00},//j 74 + + {0x08,0xF8,0x00,0x00,0x80,0x80,0x80,0x00,0x20,0x3F,0x24,0x02,0x2D,0x30,0x20,0x00},//k 75 + + {0x00,0x08,0x08,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00},//l 76 + + {0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F},//m 77 + + {0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20},//n 78 + + {0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00},//o 79 + + {0x80,0x80,0x00,0x80,0x80,0x00,0x00,0x00,0x80,0xFF,0xA1,0x20,0x20,0x11,0x0E,0x00},//p 80 + + {0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x0E,0x11,0x20,0x20,0xA0,0xFF,0x80},//q 81 + + {0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x20,0x20,0x3F,0x21,0x20,0x00,0x01,0x00},//r 82 + + {0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x33,0x24,0x24,0x24,0x24,0x19,0x00},//s 83 + + {0x00,0x80,0x80,0xE0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x1F,0x20,0x20,0x00,0x00},//t 84 + + {0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x1F,0x20,0x20,0x20,0x10,0x3F,0x20},//u 85 + + {0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x00,0x01,0x0E,0x30,0x08,0x06,0x01,0x00},//v 86 + + {0x80,0x80,0x00,0x80,0x00,0x80,0x80,0x80,0x0F,0x30,0x0C,0x03,0x0C,0x30,0x0F,0x00},//w 87 + + {0x00,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x31,0x2E,0x0E,0x31,0x20,0x00},//x 88 + + {0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x80,0x81,0x8E,0x70,0x18,0x06,0x01,0x00},//y 89 + + {0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x21,0x30,0x2C,0x22,0x21,0x30,0x00},//z 90 + + {0x00,0x00,0x00,0x00,0x80,0x7C,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x3F,0x40,0x40},//{ 91 + + {0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00},//| 92 + + {0x00,0x02,0x02,0x7C,0x80,0x00,0x00,0x00,0x00,0x40,0x40,0x3F,0x00,0x00,0x00,0x00},//} 93 + +// 0x00,0x06,0x01,0x01,0x02,0x02,0x04,0x04, +// 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//~ 94 + {0x00,0x00,0xF0,0xFC,0xFC,0xF0,0x00,0x00,0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0}, +// 0x00,0x00,0xF0,0xFF,0xFF,0xF0,0x00,0x00, +// 0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,/*"鏈懡鍚嶆枃浠",0*/ +}; + +#endif -- Gitee From 1c83408f52bb04aadeeadb2ab881fd8d7d472920 Mon Sep 17 00:00:00 2001 From: ZengHongKun <431250696@qq.com> Date: Sat, 30 May 2026 10:52:00 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E8=A7=84=E8=8C=831.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/i2c/Base_I2C.c | 18 +- common/i2c/Base_I2C.h | 47 ++-- modules/oled/.keep | 0 modules/oled/HW_OLED.c | 219 ++++++------------ modules/oled/HW_OLED.h | 134 +++-------- .../{OLED_Font.h => OLED_FONT_8X16_ENGLISH.h} | 17 +- modules/oled/OLED_FONT_MANAGE.h | 23 ++ 7 files changed, 169 insertions(+), 289 deletions(-) delete mode 100644 modules/oled/.keep rename modules/oled/{OLED_Font.h => OLED_FONT_8X16_ENGLISH.h} (95%) create mode 100644 modules/oled/OLED_FONT_MANAGE.h diff --git a/common/i2c/Base_I2C.c b/common/i2c/Base_I2C.c index c140748..18d2da9 100644 --- a/common/i2c/Base_I2C.c +++ b/common/i2c/Base_I2C.c @@ -1,11 +1,15 @@ #include "Base_I2C.h" -HAL_StatusTypeDef Base_I2C_WriteCmd(I2C_HandleTypeDef *hi2cx, uint16_t addr, uint8_t *txData, uint16_t len, uint16_t timeout) + +HAL_StatusTypeDef BASE_I2C_Write_Cmd(I2C_HandleTypeDef *hi2cX, uint16_t devAddr, + uint8_t *txData, uint16_t dataLen, uint16_t timeoutMs) { - // 调用HAL库I2C主机发送函数,直接透传参数 - return HAL_I2C_Master_Transmit(hi2cx, addr, txData, len, timeout); + return HAL_I2C_Master_Transmit(hi2cX, devAddr, txData, dataLen, timeoutMs); } -HAL_StatusTypeDef Base_I2C_ReadRegs(I2C_HandleTypeDef *hi2cx,uint16_t DevAddr, uint8_t RegAddr, uint8_t *buf, uint16_t len,uint16_t timeout) + +HAL_StatusTypeDef BASE_I2C_Read_Regs(I2C_HandleTypeDef *hi2cX, uint16_t devAddr, + uint8_t regAddr, uint8_t *outBuffer, + uint16_t bufferLen, uint16_t timeoutMs) { - // 调用HAL库存储器读函数,使用8位寄存器地址模式读取数据 - return HAL_I2C_Mem_Read(hi2cx,DevAddr,RegAddr,I2C_MEMADD_SIZE_8BIT,buf,len,timeout); -} + return HAL_I2C_Mem_Read(hi2cX, devAddr, regAddr, I2C_MEMADD_SIZE_8BIT, + outBuffer, bufferLen, timeoutMs); +} \ No newline at end of file diff --git a/common/i2c/Base_I2C.h b/common/i2c/Base_I2C.h index a358f61..5a896db 100644 --- a/common/i2c/Base_I2C.h +++ b/common/i2c/Base_I2C.h @@ -1,29 +1,32 @@ -#ifndef __BASE_I2C_H -#define __BASE_I2C_H -#include "main.h" +#ifndef BASE_I2C_H +#define BASE_I2C_H + #include "i2c.h" + /** - * @brief I2C 主机发送指令(纯数据发送,无寄存器地址) - * @param hi2cx : I2C句柄指针(如 &hi2c1) - * @param addr : I2C设备地址(左移前的7位地址) - * @param txData : 发送数据缓冲区指针 - * @param len : 要发送的数据长度 - * @param timeout : 超时时间(单位ms) - * @retval HAL_StatusTypeDef HAL库状态值(HAL_OK表示成功) + * @brief I2C涓绘満鍙戦佹寚浠(绾暟鎹彂閫,鏃犲瘎瀛樺櫒鍦板潃) + * @param hi2cX : I2C鍙ユ焺鎸囬拡(濡 &hi2c1) + * @param devAddr : I2C璁惧鍦板潃(宸︾Щ鍓嶇殑7浣嶅湴鍧) + * @param txData : 鍙戦佹暟鎹紦鍐插尯鎸囬拡 + * @param dataLen : 瑕佸彂閫佺殑鏁版嵁闀垮害 + * @param timeoutMs : 瓒呮椂鏃堕棿(鍗曚綅ms) + * @retval HAL_StatusTypeDef HAL搴撶姸鎬佸(HAL_OK琛ㄧず鎴愬姛) */ -HAL_StatusTypeDef Base_I2C_WriteCmd(I2C_HandleTypeDef *hi2cx, uint16_t addr, uint8_t *txData, uint16_t len, uint16_t timeout); +HAL_StatusTypeDef BASE_I2C_Write_Cmd(I2C_HandleTypeDef *hi2cX, uint16_t devAddr, + uint8_t *txData, uint16_t dataLen, uint16_t timeoutMs); /** - * @brief 读取 I2C 设备多个连续寄存器 - * @param hi2cx : I2C句柄指针(如 &hi2c1) - * @param DevAddr : 设备7位I2C地址(左移前) 如 0x15 - * @param RegAddr : 起始寄存器地址 如 0x01 - * @param buf : 接收数据的缓冲区 - * @param len : 要读取的字节数 - * @param timeout : 超时时间(单位ms) - * @retval HAL_OK 读取成功 - * @retval 其他值 读取失败 + * @brief 璇诲彇I2C璁惧澶氫釜杩炵画瀵勫瓨鍣 + * @param hi2cX : I2C鍙ユ焺鎸囬拡(濡 &hi2c1) + * @param devAddr : 璁惧7浣岻2C鍦板潃(宸︾Щ鍓) + * @param regAddr : 璧峰瀵勫瓨鍣ㄥ湴鍧 + * @param outBuffer : 鎺ユ敹鏁版嵁鐨勭紦鍐插尯 + * @param bufferLen : 瑕佽鍙栫殑瀛楄妭鏁 + * @param timeoutMs : 瓒呮椂鏃堕棿(鍗曚綅ms) + * @retval HAL_OK 璇诲彇鎴愬姛, 鍏朵粬鍊艰鍙栧け璐 */ -HAL_StatusTypeDef Base_I2C_ReadRegs(I2C_HandleTypeDef *hi2cx,uint16_t DevAddr, uint8_t RegAddr, uint8_t *buf, uint16_t len,uint16_t timeout); -#endif +HAL_StatusTypeDef BASE_I2C_Read_Regs(I2C_HandleTypeDef *hi2cX, uint16_t devAddr, + uint8_t regAddr, uint8_t *outBuffer, + uint16_t bufferLen, uint16_t timeoutMs); +#endif diff --git a/modules/oled/.keep b/modules/oled/.keep deleted file mode 100644 index e69de29..0000000 diff --git a/modules/oled/HW_OLED.c b/modules/oled/HW_OLED.c index cc7edee..ff13474 100644 --- a/modules/oled/HW_OLED.c +++ b/modules/oled/HW_OLED.c @@ -1,176 +1,87 @@ -#include "main.h" -#include "i2c.h" -#include "Base_I2C.h" -#include "OLED_Font.h" -#include "HW_OLED.h" -void HW_OLED_WriteByte(uint8_t regAddr, uint8_t data) { - uint8_t TxData[2] = {regAddr, data}; - Base_I2C_WriteCmd(&hi2c1, OLED_Addr, (uint8_t*)TxData, 2, 10); -} -void OLED_WriteCommand(uint8_t iicCommand) { - HW_OLED_WriteByte(0x00, iicCommand); -} -void OLED_WriteData(uint8_t iicData) { - HW_OLED_WriteByte(0x40, iicData); -} -void OLED_SetCursor(uint8_t Y, uint8_t X) -{ - OLED_WriteCommand(0xB0 | Y); //设置Y位置 - OLED_WriteCommand(0x10 | ((X & 0xF0) >> 4)); //设置X位置高4位 - OLED_WriteCommand(0x00 | (X & 0x0F)); //设置X位置低4位 -} +#include "hw_oled.h" -void OLED_Clear(void) -{ - uint8_t i, j; - for (j = 0; j < 8; j++) - { - OLED_SetCursor(j, 0); - for(i = 0; i < 128; i++) - { - OLED_WriteData(0x00); - } - } -} -void my_OLED_Clear(void) -{ - uint8_t i, j; - for (j = 0; j < 8; j++) - { - OLED_SetCursor(j, 0); - for(i = 0; i < 128; i++) - { - OLED_WriteData(0xff); - } - } -} +static I2C_HandleTypeDef *gI2cHandle; // 鍏ㄥ眬I2C鍙ユ焺鎸囬拡 -void OLED_ShowChar(uint8_t Line, uint8_t Column, char Char) -{ - uint8_t i; - OLED_SetCursor((Line - 1) * 2, (Column - 1) * 8); //设置光标位置在上半部分 - for (i = 0; i < 8; i++) - { - OLED_WriteData(OLED_F8x16[Char - ' '][i]); //显示上半部分内容 - } - OLED_SetCursor((Line - 1) * 2 + 1, (Column - 1) * 8); //设置光标位置在下半部分 - for (i = 0; i < 8; i++) - { - OLED_WriteData(OLED_F8x16[Char - ' '][i + 8]); //显示下半部分内容 - } -} - -void OLED_ShowString(uint8_t Line, uint8_t Column, char *String) +// 绉佹湁杈呭姪鍑芥暟 -------------------------------------------------------------- +static void OLED_Write_Byte(uint8_t regCtrl, uint8_t byteVal) { - uint8_t i; - for (i = 0; String[i] != '\0'; i++) - { - OLED_ShowChar(Line, Column + i, String[i]); - } + uint8_t txBuf[2] = {regCtrl, byteVal}; + BASE_I2C_Write_Cmd(gI2cHandle, OLED_I2C_ADDR, txBuf, 2, 10); } -uint32_t OLED_Pow(uint32_t X, uint32_t Y) +static void OLED_Write_Cmd(uint8_t cmd) { - uint32_t Result = 1; - while (Y--) - { - Result *= X; - } - return Result; + OLED_Write_Byte(0x00, cmd); } -void OLED_ShowNum(uint8_t Line, uint8_t Column, uint32_t Number, uint8_t Length) + +static void OLED_Write_Data(uint8_t data) { - uint8_t i; - for (i = 0; i < Length; i++) - { - OLED_ShowChar(Line, Column + i, Number / OLED_Pow(10, Length - i - 1) % 10 + '0'); - } + OLED_Write_Byte(0x40, data); } -void OLED_ShowSignedNum(uint8_t Line, uint8_t Column, int32_t Number, uint8_t Length) +static void OLED_Set_Cursor(uint8_t page, uint8_t column) { - uint8_t i; - uint32_t Number1; - if (Number >= 0) - { - OLED_ShowChar(Line, Column, '+'); - Number1 = Number; - } - else - { - OLED_ShowChar(Line, Column, '-'); - Number1 = -Number; - } - for (i = 0; i < Length; i++) - { - OLED_ShowChar(Line, Column + i + 1, Number1 / OLED_Pow(10, Length - i - 1) % 10 + '0'); - } + OLED_Write_Cmd(0xB0 | page); + OLED_Write_Cmd(0x10 | ((column & 0xF0) >> 4)); + OLED_Write_Cmd(0x00 | (column & 0x0F)); } -void OLED_ShowHexNum(uint8_t Line, uint8_t Column, uint32_t Number, uint8_t Length) + +static void OLED_Write_Batch(uint8_t page, uint8_t startCol, const uint8_t *data, uint8_t dataLen) { - uint8_t i, SingleNumber; - for (i = 0; i < Length; i++) - { - SingleNumber = Number / OLED_Pow(16, Length - i - 1) % 16; - if (SingleNumber < 10) - { - OLED_ShowChar(Line, Column + i, SingleNumber + '0'); - } - else - { - OLED_ShowChar(Line, Column + i, SingleNumber - 10 + 'A'); - } - } + OLED_Set_Cursor(page, startCol); + for (uint8_t i = 0; i < dataLen; ++i) + { + OLED_Write_Data(data[i]); + } } -void OLED_ShowBinNum(uint8_t Line, uint8_t Column, uint32_t Number, uint8_t Length) + +static void OLED_Write_Page(uint8_t page, uint8_t fillValue) { - uint8_t i; - for (i = 0; i < Length; i++) - { - OLED_ShowChar(Line, Column + i, Number / OLED_Pow(2, Length - i - 1) % 2 + '0'); - } + OLED_Set_Cursor(page, 0); + for (uint8_t i = 0; i < 128; ++i) + { + OLED_Write_Data(fillValue); + } } -void OLED_Init(void) -{ - HAL_Delay(100); - OLED_WriteCommand(0xAE); //关闭显示 - - OLED_WriteCommand(0xD5); //设置显示时钟分频比/振荡器频率 - OLED_WriteCommand(0x80); - - OLED_WriteCommand(0xA8); //设置多路复用率 - OLED_WriteCommand(0x3F); - - OLED_WriteCommand(0xD3); //设置显示偏移 - OLED_WriteCommand(0x00); - - OLED_WriteCommand(0x40); //设置显示开始行 - - OLED_WriteCommand(0xA1); //设置左右方向,0xA1正常 0xA0左右反置 - - OLED_WriteCommand(0xC8); //设置上下方向,0xC8正常 0xC0上下反置 - - OLED_WriteCommand(0xDA); //设置COM引脚硬件配置 - OLED_WriteCommand(0x12); - - OLED_WriteCommand(0x81); //设置对比度控制 - OLED_WriteCommand(0xCF); - - OLED_WriteCommand(0xD9); //设置预充电周期 - OLED_WriteCommand(0xF1); - OLED_WriteCommand(0xDB); //设置VCOMH取消选择级别 - OLED_WriteCommand(0x30); - - OLED_WriteCommand(0xA4); //设置整个显示打开/关闭 +// 鍏叡API ------------------------------------------------------------------- +void HW_OLED_Init(void) +{ + gI2cHandle = &hi2c1; // 鍋囪浣跨敤 hi2c1锛屾牴鎹疄闄呬慨鏀 + HAL_Delay(100); - OLED_WriteCommand(0xA6); //设置正常/倒转显示 + // 鍒濆鍖栧懡浠ゅ簭鍒 + OLED_Write_Cmd(0xAE); // 鍏抽棴鏄剧ず + OLED_Write_Cmd(0xD5); OLED_Write_Cmd(0x80); + OLED_Write_Cmd(0xA8); OLED_Write_Cmd(0x3F); + OLED_Write_Cmd(0xD3); OLED_Write_Cmd(0x00); + OLED_Write_Cmd(0x40); // 璧峰琛 + OLED_Write_Cmd(0xA1); // 宸﹀彸鍙嶇疆 + OLED_Write_Cmd(0xC8); // 涓婁笅鍙嶇疆 + OLED_Write_Cmd(0xDA); OLED_Write_Cmd(0x12); + OLED_Write_Cmd(0x81); OLED_Write_Cmd(0xCF); + OLED_Write_Cmd(0xD9); OLED_Write_Cmd(0xF1); + OLED_Write_Cmd(0xDB); OLED_Write_Cmd(0x30); + OLED_Write_Cmd(0xA4); // 鍏ㄥ眬鏄剧ず寮鍚 + OLED_Write_Cmd(0xA6); // 姝e父鏄剧ず + OLED_Write_Cmd(0x8D); OLED_Write_Cmd(0x14); // 鐢佃嵎娉典娇鑳 + OLED_Write_Cmd(0xAF); // 寮鍚樉绀 - OLED_WriteCommand(0x8D); //设置充电泵 - OLED_WriteCommand(0x14); + HW_OLED_Clear(); +} - OLED_WriteCommand(0xAF); //开启显示 - - OLED_Clear(); //OLED清屏 +void HW_OLED_Clear(void) +{ + for (uint8_t page = 0; page < 8; ++page) + { + OLED_Write_Page(page, 0x00); + } } +void HW_OLED_Fill(void) +{ + for (uint8_t page = 0; page < 8; ++page) + { + OLED_Write_Page(page, 0xFF); + } +} \ No newline at end of file diff --git a/modules/oled/HW_OLED.h b/modules/oled/HW_OLED.h index 2adff44..d67e923 100644 --- a/modules/oled/HW_OLED.h +++ b/modules/oled/HW_OLED.h @@ -1,125 +1,67 @@ -#ifndef __HW_OLED_H -#define __HW_OLED_H +#ifndef HW_OLED_H +#define HW_OLED_H -#include "main.h" #include "i2c.h" +#include "Base_I2C.h" -/************************* - * 功能:OLED I2C 驱动头文件 - * 依赖:STM32 HAL库 I2C - * 说明:提供OLED初始化、清屏、显示字符串等基础接口 - *************************/ +/*==================== OLED鎺у埗鍛戒护瀹忓畾涔 ====================*/ +#define OLED_CMD_LEFT 0x27 // 宸︾Щ鍛戒护 +#define OLED_CMD_RIGHT 0x26 // 鍙崇Щ鍛戒护 +#define OLED_CMD_UP 0x29 // 涓婄Щ鍛戒护 +#define OLED_CMD_DOWN 0x2A // 涓嬬Щ鍛戒护 +#define OLED_CMD_ON 0xA7 // 鏄剧ず寮鍚/鐐逛寒鍛戒护 +#define OLED_CMD_OFF 0xA6 // 鏄剧ず鍏抽棴/鐔勭伃鍛戒护 -/*==================== OLED 控制命令宏定义 ====================*/ -#define LEFT 0x27 // 左移命令 -#define RIGHT 0x26 // 右移命令 -#define UP 0x29 // 上移命令 -#define DOWN 0x2A // 下移命令 -#define ON 0xA7 // 显示开启/点亮命令 -#define OFF 0xA6 // 显示关闭/熄灭命令 +#define OLED_I2C_ADDR 0x78 // OLED I2C璁惧鍦板潃 -#define OLED_Addr 0x78 // OLED I2C 设备地址 +/*==================== OLED灞忓箷鍙傛暟 ====================*/ +#define OLED_WIDTH 128 // OLED瀹藉害:128 +#define OLED_HEIGHT 64 // OLED楂樺害:64 -/*==================== OLED 屏幕参数 ====================*/ -#define displayWidth 128 // OLED宽度:128 -#define displayHeight 64 // OLED高度:64 -/*==================== 底层I2C写函数 ====================*/ +/*==================== 灞忓箷鎿嶄綔鍑芥暟 ====================*/ /** - * @brief OLED通过I2C写入一个字节(命令/数据) - * @param regAddr: 控制字节 0x00=命令 0x40=数据 - * @param data: 要写入的命令或数据 - * @retval 无 + * @brief OLED鍒濆鍖(涓婄數蹇呴』璋冪敤) */ -void HW_OLED_WriteByte(uint8_t regAddr, uint8_t data); +void HW_OLED_Init(void); /** - * @brief 向OLED写入命令 - * @param iicCommand: 命令值 - * @retval 无 + * @brief OLED娓呭睆(鍏ㄩ粦) */ -void OLED_WriteCommand(uint8_t iicCommand); +void HW_OLED_Clear(void); /** - * @brief 向OLED写入数据 - * @param iicData: 显示数据 - * @retval 无 + * @brief OLED婊″睆鐐逛寒(鍏ㄧ櫧) */ -void OLED_WriteData(uint8_t iicData); +void HW_OLED_Fill(void); /** - * @brief 设置OLED光标位置 - * @param Y: 页地址 0~7 - * @param X: 列地址 0~127 - * @retval 无 + * @brief 璁剧疆鍏夋爣浣嶇疆骞惰繛缁啓鍏ュ涓瓧鑺傛暟鎹紙閫傜敤浜庨潪閲嶅鏁版嵁锛 + * @param page 椤靛湴鍧锛0~7锛屽搴 Y 鍧愭爣姣 8 鍍忕礌涓椤碉級 + * @param column 鍒楄捣濮嬪湴鍧锛0~127锛屽搴 X 鍧愭爣锛 + * @param data 寰呭啓鍏ョ殑鏁版嵁缂撳啿鍖烘寚閽 + * @param dataLen 瑕佸啓鍏ョ殑瀛楄妭鏁 */ -void OLED_SetCursor(uint8_t Y, uint8_t X); +static void HW_OLED_SetCursorAndWriteData(uint8_t page, uint8_t column, + const uint8_t *data, uint8_t dataLen); -/*==================== 屏幕操作函数 ====================*/ /** - * @brief OLED初始化(上电必须调用) - * @param 无 - * @retval 无 + * @brief 灏嗘暣椤碉紙128 鍒楋級濉厖涓烘寚瀹氬 + * @param page 椤靛湴鍧锛0~7锛 + * @param fillValue 濉厖鍊硷紙0x00 娓呯┖锛0xFF 鍏ㄤ寒锛 */ -void OLED_Init(void); +static void HW_OLED_WritePage(uint8_t page, uint8_t fillValue); /** - * @brief OLED清屏(全黑) - * @param 无 - * @retval 无 + * @brief 鍚 OLED 鍐欏叆鍛戒护瀛楄妭 + * @param cmd 鍛戒护瀛楄妭锛堝 0xAE 鍏抽棴鏄剧ず锛 */ -void OLED_Clear(void); +static void HW_OLED_WriteCommand(uint8_t cmd); /** - * @brief OLED满屏点亮(全白) - * @param 无 - * @retval 无 + * @brief 鍚 OLED 鍐欏叆鏁版嵁瀛楄妭锛堟樉绀哄唴瀹癸級 + * @param data 瑕佹樉绀虹殑鏁版嵁瀛楄妭锛堜竴鍒 8 鍍忕礌鐐癸級 */ -void my_OLED_Clear(void); - -/*==================== 显示函数 ====================*/ -/** - * @brief OLED显示单个字符(8x16字体) - * @param Line: 行 1~4 - * @param Column: 列 1~16 - * @param Char: 要显示的字符 - * @retval 无 - */ -void OLED_ShowChar(uint8_t Line, uint8_t Column, char Char); - -/** - * @brief OLED显示字符串 - * @param Line: 起始行 1~4 - * @param Column: 起始列 1~16 - * @param String: 字符串指针 - * @retval 无 - */ -void OLED_ShowString(uint8_t Line, uint8_t Column, char *String); - -/** - * @brief OLED显示无符号十进制数字 - * @param Line: 行 - * @param Column: 列 - * @param Number: 数字 0~4294967295 - * @param Length: 显示位数 - * @retval 无 - */ -void OLED_ShowNum(uint8_t Line, uint8_t Column, uint32_t Number, uint8_t Length); - -/** - * @brief OLED显示有符号十进制数字 - */ -void OLED_ShowSignedNum(uint8_t Line, uint8_t Column, int32_t Number, uint8_t Length); - -/** - * @brief OLED显示十六进制数字 - */ -void OLED_ShowHexNum(uint8_t Line, uint8_t Column, uint32_t Number, uint8_t Length); - -/** - * @brief OLED显示二进制数字 - */ -void OLED_ShowBinNum(uint8_t Line, uint8_t Column, uint32_t Number, uint8_t Length); +static void HW_OLED_WriteData(uint8_t data); #endif - diff --git a/modules/oled/OLED_Font.h b/modules/oled/OLED_FONT_8X16_ENGLISH.h similarity index 95% rename from modules/oled/OLED_Font.h rename to modules/oled/OLED_FONT_8X16_ENGLISH.h index 6cd34bf..9039df5 100644 --- a/modules/oled/OLED_Font.h +++ b/modules/oled/OLED_FONT_8X16_ENGLISH.h @@ -1,8 +1,9 @@ -#ifndef __OLED_FONT_H -#define __OLED_FONT_H -#include "main.h" -/*OLED瀛楁ā搴擄紝瀹8鍍忕礌锛岄珮16鍍忕礌*/ -const uint8_t OLED_F8x16[][16]= +#ifndef OLED_FONT_8X16_ENGLISH_H +#define OLED_FONT_8X16_ENGLISH_H + +#include + +static const uint8_t OLED_F8x16[][16]= { {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},// 0 @@ -192,11 +193,7 @@ const uint8_t OLED_F8x16[][16]= {0x00,0x02,0x02,0x7C,0x80,0x00,0x00,0x00,0x00,0x40,0x40,0x3F,0x00,0x00,0x00,0x00},//} 93 -// 0x00,0x06,0x01,0x01,0x02,0x02,0x04,0x04, -// 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//~ 94 - {0x00,0x00,0xF0,0xFC,0xFC,0xF0,0x00,0x00,0xF0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF0}, -// 0x00,0x00,0xF0,0xFF,0xFF,0xF0,0x00,0x00, -// 0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,/*"鏈懡鍚嶆枃浠",0*/ + {0x00,0x06,0x01,0x01,0x02,0x02,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}//~ 94 }; #endif diff --git a/modules/oled/OLED_FONT_MANAGE.h b/modules/oled/OLED_FONT_MANAGE.h new file mode 100644 index 0000000..aa8a781 --- /dev/null +++ b/modules/oled/OLED_FONT_MANAGE.h @@ -0,0 +1,23 @@ +#ifndef OLED_FONT_MANAGE_H +#define OLED_FONT_MANAGE_H + +#include +#include "HW_OLED.h" + +// 瀹忓畾涔:閫夋嫨褰撳墠浣跨敤鐨凮LED瀛楀簱(浠呭紑鍚竴涓嵆鍙) +#define OLED_FONT_8X16_ENGLISH // 8x16鑻辨枃瀛楀簱(榛樿寮鍚) +//#define OLED_FONT_16X16_CHINESE // 16x16涓枃瀛楀簱 +//#define OLED_FONT_8X16_NUMBER // 8x16鏁板瓧瀛楀簱 + +#ifdef OLED_FONT_8X16_ENGLISH + #include "OLED_FONT_8X16_ENGLISH.h" +#elif defined(OLED_FONT_16X16_CHINESE) + #include "OLED_FONT_16X16_CHINESE.h" +#elif defined(OLED_FONT_8X16_NUMBER) + #include "OLED_FONT_8X16_NUMBER.h" +#else + + #include "OLED_FONT_8X16_ENGLISH.h" // 鏃犱换浣曞瓧搴撳畾涔夋椂,榛樿鍔犺浇鏍囧噯鑻辨枃瀛楀簱 +#endif + +#endif -- Gitee From c5ee774145a5fe7e49c8d6f72281db441a97d900 Mon Sep 17 00:00:00 2001 From: ZengHongKun <431250696@qq.com> Date: Sat, 30 May 2026 12:00:36 +0800 Subject: [PATCH 3/3] Trigger PR update -- Gitee