一:OLED的基础知识
OLED,即有机发光二极管(Organic Light-Emitting Diode),又称为有机电激光显示(Organic Electroluminesence Display, OELD)。因为具备轻薄、省电等特性,因此从 2003 年开始,这种显示设备在 MP3 播放器上得到了广泛应用,而对于同属数码类产品的 DC 与手机,此前只是在一些展会上展示过采用 OLED 屏幕的工程样品。自 2007 年后,寿命得 到很大提高,具备了许多 LCD 不可比拟的优势。
GND:电源地 VCC:2.2V~5.5V SCL(D0):CLK 时钟 (高电平 2.2V~5.5V) SDA(D1):MOSI 数据(高电平 2.2V~5.5V) RST:复位(高电平 2.2V~5.5V) D/C:数据/命令(高电平 2.2V~5.5V) 兼容 3.3V 和 5V 控制芯片的 I/O 电平(无需任何设置,直接兼容)。
二:STM32 cube MX 软件配置
这里我所使用的是IIC1,使用的PB1,PB2 引脚,不过这里和STM32其他芯片配置有区别,需要设置一下高电平和低电平时,否则IIC的通讯存在问题。设置的时间,可以根据自己配置的通讯速度相关;
三:软件代码
3.1 底层函数如下所示:
- extern I2C_HandleTypeDef hi2c1;
- /***********************************************************************************************
- * @brief static unsigned char OLED_send_byteS(unsigned char *data, unsigned char length)
- * @param data:输入的数据 length:长度值,使用硬件IIC底层驱动函数
- * @retval 无
- * @author 聪聪哥哥
- * @version V1.1.0
- * @date 25-5-2025
- *************************************************************************************************/
- static unsigned char OLED_send_byteS(unsigned char *data, unsigned char length)
- {
- if (HAL_I2C_Master_Transmit(&hi2c1, 0x78, data, length, 2) != HAL_OK)
- {
- return 0;
- }
- return 1;
- }
- /***********************************************************************************************
- * @brief static void I2C_WriteByte(uint8_t addr, uint8_t value)
- * @param addr:IIC模块的地址,value :写入的数据
- * @retval 无
- * @author 聪聪哥哥
- * @version V1.1.0
- * @date 25-5-2025
- *************************************************************************************************/
- static void I2C_WriteByte(uint8_t addr, uint8_t value)
- {
- unsigned char dta[2] = {0};
- dta[0] = addr;
- dta[1] = value;
- OLED_send_byteS(dta, 2);
- }
- /***********************************************************************************************
- * @brief void WriteCmd(unsigned char I2C_Command)
- * @param I2C_Command : IIC的命令
- * @retval 无
- * @author 聪聪哥哥
- * @version V1.1.0
- * @date 25-5-2025
- *************************************************************************************************/
- void WriteCmd(unsigned char I2C_Command)
- {
- I2C_WriteByte(0x00, I2C_Command);
- }
- /***********************************************************************************************
- * @brief void WriteDat(unsigned char I2C_Data)
- * @param I2C_Data : IIC的数据
- * @retval 无
- * @author 聪聪哥哥
- * @version V1.1.0
- * @date 25-5-2025
- *************************************************************************************************/
- void WriteDat(unsigned char I2C_Data)//写数据
- {
- I2C_WriteByte(0x40, I2C_Data);
- }
3.2 显示部分:
- OLED_Init();
- OLED_ColorTurn(0);//0?????????1 ??????
- OLED_DisplayTurn(0);//0??????? 1 ?????????
- OLED_Refresh();
- OLED_Clear();
- OLED_ShowCN(16, 0, 0);
- OLED_ShowCN(32, 0, 1);
- OLED_ShowCN(48, 0, 2);
- OLED_ShowCN(64, 0, 3);
- OLED_ShowCN(16, 2, 4);
- OLED_ShowCN(32, 2, 4);
- OLED_ShowCN(48, 2, 5);
- OLED_ShowCN(64, 2, 5);
- OLED_ShowStr(20, 4, (uint8_t *)test_str, 2);
- OLED_ShowStr(40, 6, (uint8_t *)test_str1, 2);
四:实物如下所示:
|