Files
CHJ/user/Device/oled.h

245 lines
5.6 KiB
C
Raw Normal View History

2026-03-20 21:16:58 +08:00
#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>----------------
2026-03-20 21:19:53 +08:00
#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)
2026-03-20 21:16:58 +08:00
2026-03-20 21:19:53 +08:00
#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)
2026-03-20 21:16:58 +08:00
2026-03-20 21:19:53 +08:00
#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)
2026-03-20 21:16:58 +08:00
#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 <EFBFBD><EFBFBD>ʼ<EFBFBD>ź<EFBFBD>
*/
void I2C_Start(void);
/**
* @brief I2C <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>
*/
void I2C_Stop(void);
/**
* @brief I2C <EFBFBD>ȴ<EFBFBD>Ӧ<EFBFBD><EFBFBD>
*/
void I2C_WaitAck(void);
/**
* @brief I2C д<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD>
* @param dat Ҫд<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
void Send_Byte(u8 dat);
/**
* @brief <EFBFBD><EFBFBD>OLEDд<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param dat Ҫд<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param mode ģʽѡ<EFBFBD><EFBFBD>: 0<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 1<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
void OLED_WR_Byte(u8 dat, u8 mode);
/**
* @brief OLED <EFBFBD><EFBFBD><EFBFBD>ż<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>
*/
void OLED_Init(void);
// --- 3. <20><>Ļ<EFBFBD><C4BB><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD> ---
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>OLED<EFBFBD><EFBFBD>ʾ
*/
void OLED_DisPlay_On(void);
/**
* @brief <EFBFBD>ر<EFBFBD>OLED<EFBFBD><EFBFBD>ʾ
*/
void OLED_DisPlay_Off(void);
/**
* @brief <EFBFBD><EFBFBD>Ļ<EFBFBD><EFBFBD>ɫ<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param i 0:<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ, 1:<EFBFBD><EFBFBD>ɫ<EFBFBD><EFBFBD>ʾ
*/
void OLED_ColorTurn(u8 i);
/**
* @brief <EFBFBD><EFBFBD>Ļ<EFBFBD><EFBFBD>ת180<EFBFBD><EFBFBD>
* @param i 0:<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ, 1:<EFBFBD><EFBFBD>ת180<EFBFBD><EFBFBD>
*/
void OLED_DisplayTurn(u8 i);
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><EFBFBD><EFBFBD><EFBFBD> (OLED_GRAM)
* @note <EFBFBD>˺<EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD>ˢ<EFBFBD>µ<EFBFBD>Ӳ<EFBFBD><EFBFBD>
*/
void OLED_Clear(void);
/**
* @brief <EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ھֲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param x1 <EFBFBD><EFBFBD>ʼx<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param y1 <EFBFBD><EFBFBD>ʼy<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param x2 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>x<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param y2 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>y<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @note <EFBFBD>˺<EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD>޸<EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD>е<EFBFBD>OLED_GRAM<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>Ӳ<EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD><EFBFBD>
*/
void OLED_FillArea(u8 x1, u8 y1, u8 x2, u8 y2);
// --- 4. <20><>Ļˢ<C4BB>º<EFBFBD><C2BA><EFBFBD> ---
/**
* @brief <EFBFBD><EFBFBD><EFBFBD>ݾɽӿڵ<EFBFBD>ȫ<EFBFBD><EFBFBD>ˢ<EFBFBD><EFBFBD>
* @note <EFBFBD><EFBFBD> OLED_GRAM <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>̨<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
void OLED_Refresh(void);
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˢ<EFBFBD><EFBFBD>ȫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><EFBFBD>
* @note <EFBFBD>Ա<EFBFBD> OLED_GRAM <EFBFBD><EFBFBD> OLED_GRAM_Back<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˢ<EFBFBD>±<EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD>
*/
void OLED_Refresh_Diff(void);
/**
* @brief <EFBFBD><EFBFBD><EFBFBD>ݾɽӿڵĵ<EFBFBD><EFBFBD><EFBFBD>ˢ<EFBFBD><EFBFBD>
* @param line <EFBFBD>к<EFBFBD> (0-7)
*/
void OLED_Refresh_Line(u8 line);
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˢ<EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><EFBFBD>
* @param line <EFBFBD>к<EFBFBD> (0-7)
* @note <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ޱ<EFBFBD><EFBFBD><EFBFBD>򲻽<EFBFBD><EFBFBD><EFBFBD> I2C <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
void OLED_Refresh_Line_Diff(u8 line);
// --- 5. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD> ---
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param x 0~127
* @param y 0~63
* @param t 1:<EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 0:<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
void OLED_DrawPoint(u8 x, u8 y, u8 t);
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param x1,y1 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param x2,y2 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param mode 1:<EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 0:<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
void OLED_DrawLine(u8 x1, u8 y1, u8 x2, u8 y2, u8 mode);
/**
* @brief <EFBFBD><EFBFBD>Բ
* @param x,y Բ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param r Բ<EFBFBD>İ
*/
void OLED_DrawCircle(u8 x, u8 y, u8 r);
// --- 6. <20>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>ʾ ---
/**
* @brief <EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾһ<EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>
* @param x,y <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param chr Ҫ<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>
* @param size1 ѡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 6x8 / 12x12 / 16x16 / 24x24 (<EFBFBD>˴<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>8,12,16,24)
* @param mode 0:<EFBFBD><EFBFBD>ɫ<EFBFBD><EFBFBD>ʾ, 1:<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
*/
void OLED_ShowChar(u8 x, u8 y, u8 chr, u8 size1, u8 mode);
/**
* @brief <EFBFBD><EFBFBD>ʾ<EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>
* @param x,y <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param chr <EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>ַ
* @param size1 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
* @param mode 0:<EFBFBD><EFBFBD>ɫ<EFBFBD><EFBFBD>ʾ, 1:<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
*/
void OLED_ShowString(u8 x, u8 y, u8 *chr, u8 size1, u8 mode);
/**
* @brief <EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param x,y <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param num Ҫ<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param len <EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>λ<EFBFBD><EFBFBD>
* @param size1 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
* @param mode 0:<EFBFBD><EFBFBD>ɫ<EFBFBD><EFBFBD>ʾ, 1:<EFBFBD><EFBFBD><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 <EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param x,y <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param num <EFBFBD><EFBFBD><EFBFBD>ֶ<EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<EFBFBD><EFBFBD>Hzk<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
* @param size1 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С (16, 24, 32, 64)
* @param mode 0:<EFBFBD><EFBFBD>ɫ<EFBFBD><EFBFBD>ʾ, 1:<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
*/
void OLED_ShowChinese(u8 x, u8 y, u8 num, u8 size1, u8 mode);
/**
* @brief <EFBFBD><EFBFBD>ʾͼƬ
* @param x,y <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param sizex,sizey ͼƬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param BMP Ҫд<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼƬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param mode 0:<EFBFBD><EFBFBD>ɫ<EFBFBD><EFBFBD>ʾ, 1:<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
*/
void OLED_ShowPicture(u8 x, u8 y, u8 sizex, u8 sizey, u8 BMP[], u8 mode);
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param num <EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD>ֵĸ<EFBFBD><EFBFBD><EFBFBD>
* @param space ÿһ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD>
* @param mode 0:<EFBFBD><EFBFBD>ɫ<EFBFBD><EFBFBD>ʾ, 1:<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ
* @note <EFBFBD>˺<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> while(1) <EFBFBD><EFBFBD>ѭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾЧ<EFBFBD><EFBFBD>
*/
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