This commit is contained in:
2026-03-20 21:16:58 +08:00
parent 286ff98b8e
commit 90c3d919df
248 changed files with 94554 additions and 0 deletions

244
user/Device/oled.h Executable file
View File

@@ -0,0 +1,244 @@
#ifndef __OLED_H
#define __OLED_H
#include "stdlib.h"
#include "stdint.h"
//
//////////////////////////////////////////////////////////////////////////////////
//
// <20><> <20><> <20><> : oled.c
// <20><> <20><> <20><> : v1.0
// <20><> <20><> :
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : 2025-11-14
// <20><><EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD> :
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> : OLED I2C<32>ӿ<EFBFBD><D3BF><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
// ˵<><CBB5>:
// ----------------------------------------------------------------
// GND <20><>Դ<EFBFBD><D4B4>
// VCC 3.3v<EFBFBD><EFBFBD>Դ
// D0 P2.0<EFBFBD><EFBFBD>SCL<EFBFBD><EFBFBD>
// D1 P1.4<EFBFBD><EFBFBD>SDA<EFBFBD><EFBFBD>
// RES P1.6<EFBFBD><EFBFBD>SPIģ<EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD>IICģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>Ӵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD>IICģ<EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԣ<EFBFBD>
// ----------------------------------------------------------------
//-----------------OLED<45>˿ڶ<CBBF><DAB6><EFBFBD>----------------
#define OLED_SCL_Clr() LHL_GPIO_WritePin(I2C_SCL_GPIO, GPIO_PIN_0,GPIO_PIN_RESET)//SCL
#define OLED_SCL_Set() LHL_GPIO_WritePin(I2C_SCL_GPIO, GPIO_PIN_0, GPIO_PIN_SET)
#define OLED_SDA_Clr() LHL_GPIO_WritePin(I2C_SDA_GPIO, I2C_SDA, GPIO_PIN_RESET)//DIN
#define OLED_SDA_Set() LHL_GPIO_WritePin(I2C_SDA_GPIO, I2C_SDA, GPIO_PIN_SET)
#define OLED_RES_Clr() LHL_GPIO_WritePin(I2C_RES_GPIO, I2C_RES, GPIO_PIN_RESET)//RES
#define OLED_RES_Set() LHL_GPIO_WritePin(I2C_RES_GPIO, I2C_RES, GPIO_PIN_SET)
#define OLED_CMD 0 //д<><D0B4><EFBFBD><EFBFBD>
#define OLED_DATA 1 //д<><D0B4><EFBFBD><EFBFBD>
#define u8 uint8_t
#define u16 uint16_t
#define u32 uint32_t
// --- 1. <20>Դ涨<D4B4><E6B6A8> ---
// ǰ̨<C7B0><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD>µ<EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
extern u8 OLED_GRAM[144][8];
// <20><>̨<EFBFBD><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ洢<DAB4><E6B4A2>ǰ<EFBFBD><C7B0>Ļ<EFBFBD><C4BB>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD>ڶԱȲ<D4B1><C8B2><EFBFBD>
extern u8 OLED_GRAM_Back[144][8];
// --- 2. Ӳ<><D3B2><EFBFBD>ײ<EFBFBD><D7B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (I2C/GPIO) ---
/**
* @brief I2C <20><>ʼ<EFBFBD>ź<EFBFBD>
*/
void I2C_Start(void);
/**
* @brief I2C <20><><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>
*/
void I2C_Stop(void);
/**
* @brief I2C <20>ȴ<EFBFBD>Ӧ<EFBFBD><D3A6>
*/
void I2C_WaitAck(void);
/**
* @brief I2C д<><D0B4>һ<EFBFBD><D2BB><EFBFBD>ֽ<EFBFBD>
* @param dat Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
void Send_Byte(u8 dat);
/**
* @brief <20><>OLEDд<44><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param dat Ҫд<D2AA><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param mode ģʽѡ<CABD><D1A1>: 0<><30>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>, 1<><31>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
*/
void OLED_WR_Byte(u8 dat, u8 mode);
/**
* @brief OLED <20><><EFBFBD>ż<EFBFBD><C5BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
*/
void OLED_Init(void);
// --- 3. <20><>Ļ<EFBFBD><C4BB><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD> ---
/**
* @brief <20><><EFBFBD><EFBFBD>OLED<45><44>ʾ
*/
void OLED_DisPlay_On(void);
/**
* @brief <20>ر<EFBFBD>OLED<45><44>ʾ
*/
void OLED_DisPlay_Off(void);
/**
* @brief <20><>Ļ<EFBFBD><C4BB>ɫ<EFBFBD><C9AB>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
* @param i 0:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ, 1:<3A><>ɫ<EFBFBD><C9AB>ʾ
*/
void OLED_ColorTurn(u8 i);
/**
* @brief <20><>Ļ<EFBFBD><C4BB>ת180<38><30>
* @param i 0:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ, 1:<3A><>ת180<38><30>
*/
void OLED_DisplayTurn(u8 i);
/**
* @brief <20><><EFBFBD><EFBFBD><EFBFBD>Դ滺<D4B4><E6BBBA><EFBFBD><EFBFBD> (OLED_GRAM)
* @note <20>˺<EFBFBD><CBBA><EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD><EFBFBD>ڴ棬<DAB4><E6A3AC><EFBFBD>Զ<EFBFBD>ˢ<EFBFBD>µ<EFBFBD>Ӳ<EFBFBD><D3B2>
*/
void OLED_Clear(void);
/**
* @brief <20><><EFBFBD>ڴ滺<DAB4><E6BBBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ھֲ<DABE><D6B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param x1 <20><>ʼx<CABC><78><EFBFBD><EFBFBD>
* @param y1 <20><>ʼy<CABC><79><EFBFBD><EFBFBD>
* @param x2 <20><><EFBFBD><EFBFBD>x<EFBFBD><78><EFBFBD><EFBFBD>
* @param y2 <20><><EFBFBD><EFBFBD>y<EFBFBD><79><EFBFBD><EFBFBD>
* @note <20>˺<EFBFBD><CBBA><EFBFBD>ֻ<EFBFBD>޸<EFBFBD><DEB8>ڴ<EFBFBD><DAB4>е<EFBFBD>OLED_GRAM<41><4D><EFBFBD><EFBFBD>ֱ<EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD>Ӳ<EFBFBD><D3B2>
*/
void OLED_FillArea(u8 x1, u8 y1, u8 x2, u8 y2);
// --- 4. <20><>Ļˢ<C4BB>º<EFBFBD><C2BA><EFBFBD> ---
/**
* @brief <20><><EFBFBD>ݾɽӿڵ<D3BF>ȫ<EFBFBD><C8AB>ˢ<EFBFBD><CBA2>
* @note <20><> OLED_GRAM <20><><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><CDB5><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD>̨<EFBFBD><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
void OLED_Refresh(void);
/**
* @brief <20><><EFBFBD><EFBFBD>ˢ<EFBFBD><CBA2>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>
* @note <20>Ա<EFBFBD> OLED_GRAM <20><> OLED_GRAM_Back<63><6B><EFBFBD><EFBFBD>ˢ<EFBFBD>±仯<C2B1><E4BBAF><EFBFBD>ֽ<EFBFBD>
*/
void OLED_Refresh_Diff(void);
/**
* @brief <20><><EFBFBD>ݾɽӿڵĵ<DAB5><C4B5><EFBFBD>ˢ<EFBFBD><CBA2>
* @param line <20>к<EFBFBD> (0-7)
*/
void OLED_Refresh_Line(u8 line);
/**
* @brief <20><><EFBFBD><EFBFBD>ˢ<EFBFBD><CBA2>ָ<EFBFBD><D6B8><EFBFBD>У<EFBFBD><D0A3><EFBFBD>Ч<EFBFBD><D0A7>
* @param line <20>к<EFBFBD> (0-7)
* @note <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ޱ仯<DEB1><E4BBAF><EFBFBD>򲻽<EFBFBD><F2B2BBBD><EFBFBD> I2C <20><><EFBFBD><EFBFBD>
*/
void OLED_Refresh_Line_Diff(u8 line);
// --- 5. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD> ---
/**
* @brief <20><><EFBFBD><EFBFBD>
* @param x 0~127
* @param y 0~63
* @param t 1:<3A><><EFBFBD><EFBFBD>, 0:<3A><><EFBFBD><EFBFBD>
*/
void OLED_DrawPoint(u8 x, u8 y, u8 t);
/**
* @brief <20><><EFBFBD><EFBFBD>
* @param x1,y1 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param x2,y2 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param mode 1:<3A><><EFBFBD><EFBFBD>, 0:<3A><><EFBFBD><EFBFBD>
*/
void OLED_DrawLine(u8 x1, u8 y1, u8 x2, u8 y2, u8 mode);
/**
* @brief <20><>Բ
* @param x,y Բ<><D4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param r Բ<>İ뾶
*/
void OLED_DrawCircle(u8 x, u8 y, u8 r);
// --- 6. <20>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ʾ ---
/**
* @brief <20><>ָ<EFBFBD><D6B8>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>ʾһ<CABE><D2BB><EFBFBD>ַ<EFBFBD>
* @param x,y <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param chr Ҫ<><D2AA>ʾ<EFBFBD><CABE><EFBFBD>ַ<EFBFBD>
* @param size1 ѡ<><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 6x8 / 12x12 / 16x16 / 24x24 (<28>˴<EFBFBD><CBB4><EFBFBD><EFBFBD><EFBFBD>8,12,16,24)
* @param mode 0:<3A><>ɫ<EFBFBD><C9AB>ʾ, 1:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
*/
void OLED_ShowChar(u8 x, u8 y, u8 chr, u8 size1, u8 mode);
/**
* @brief <20><>ʾ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
* @param x,y <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param chr <20>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַ
* @param size1 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
* @param mode 0:<3A><>ɫ<EFBFBD><C9AB>ʾ, 1:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
*/
void OLED_ShowString(u8 x, u8 y, u8 *chr, u8 size1, u8 mode);
/**
* @brief <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
* @param x,y <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param num Ҫ<><D2AA>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param len <20><><EFBFBD>ֵ<EFBFBD>λ<EFBFBD><CEBB>
* @param size1 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
* @param mode 0:<3A><>ɫ<EFBFBD><C9AB>ʾ, 1:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
*/
void OLED_ShowNum(u8 x, u8 y, u32 num, u8 len, u8 size1, u8 mode);
// --- 7. <20>߼<EFBFBD><DFBC><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD>/ͼƬ/<2F><><EFBFBD><EFBFBD>) ---
/**
* @brief <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
* @param x,y <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param num <20><><EFBFBD>ֶ<EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><>Hzk<7A><6B><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD>)
* @param size1 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С (16, 24, 32, 64)
* @param mode 0:<3A><>ɫ<EFBFBD><C9AB>ʾ, 1:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
*/
void OLED_ShowChinese(u8 x, u8 y, u8 num, u8 size1, u8 mode);
/**
* @brief <20><>ʾͼƬ
* @param x,y <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param sizex,sizey ͼƬ<CDBC><C6AC><EFBFBD><EFBFBD>
* @param BMP Ҫд<D2AA><D0B4><EFBFBD><EFBFBD>ͼƬ<CDBC><C6AC><EFBFBD><EFBFBD>
* @param mode 0:<3A><>ɫ<EFBFBD><C9AB>ʾ, 1:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
*/
void OLED_ShowPicture(u8 x, u8 y, u8 sizex, u8 sizey, u8 BMP[], u8 mode);
/**
* @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
* @param num <20><>ʾ<EFBFBD><CABE><EFBFBD>ֵĸ<D6B5><C4B8><EFBFBD>
* @param space ÿһ<C3BF><D2BB><EFBFBD><EFBFBD>ʾ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
* @param mode 0:<3A><>ɫ<EFBFBD><C9AB>ʾ, 1:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
* @note <20>˺<EFBFBD><CBBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> while(1) <20><>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾЧ<CABE><D0A7>
*/
void OLED_ScrollDisplay(u8 num, u8 space, u8 mode);
void OLED_FillArea(u8 x1, u8 y1, u8 x2, u8 y2);
void OLED_FillRect(u8 x1, u8 y1, u8 x2, u8 y2);
void OLED_FillRect_White(u8 x1, u8 y1, u8 x2, u8 y2);
#endif