RYMCU

STM32篇——OLED

STM32 HAL 库 IIC 协议控制 0.96 OLED 液晶显示

1. 前期准备

安装好 STM32CubeMX

安装好 Clion

0.96 OLED 介绍以及基础代码详见《关于我和 Hugh 学嵌入式开发这件事 —— 51 篇》第 20 章 0.96 OLED 使用,在上述基础代码之上适配 STM32

2. 创建项目

bmp.holed.holedfont.holed.c 添加至工程现有项目中,51 课程中使用 IO 口模拟的 IIC 总线,STM32 我们使用 HAL 库的 IIC 函数,将上述文件中涉及到 IIC 操作的,均进行替代即可。

  1. IIC 对象声明

IIC 对象声明及初始化放入 oled.h,oled.c 文件中,因为 oled.c 中需要使用到。

//oled.h中添加头hal文件支持
#include "stm32f1xx_hal.h"
//oled.h中声明
extern I2C_HandleTypeDef hi2c1;

oled.c 中添加对象初始化:

//oled.c中初始化
I2C_HandleTypeDef hi2c1;
  1. 使用 HAL 库函数替换模拟 IIC 函数

oled.c 修改如下:

/**********************************************
// IIC Write Command
**********************************************/
void Write_IIC_Command(unsigned char IIC_Command)
{
    //使用HAL函数替代
   HAL_I2C_Mem_Write(&hi2c1,0x78,0x00,I2C_MEMADD_SIZE_8BIT,&IIC_Command,1,100);
}
/**********************************************
// IIC Write Data
**********************************************/
void Write_IIC_Data(unsigned char IIC_Data)
{
    //使用HAL函数替代
    HAL_I2C_Mem_Write(&hi2c1,0x78,0x40,I2C_MEMADD_SIZE_8BIT,&IIC_Data,1,100);
}

只需修改上述 2 个函数即可,其他均保持不变。

  1. main.c 文件中添加头文件支持
#include "oled.h"
#include "bmp.h"

同时 main.c 中需要在 IIC 对象前添加 extern 关键字,因为对象声明已经挪到 oled.h 中了,更改如下:

//添加关键字extern
extern I2C_HandleTypeDef hi2c1;

至此,完成了驱动代码修改。

3. OLED 显示示例

main.c 中添加代码测试代码:

//0.96 OLED测试
void OLED_IIC_Test(void)
{
    OLED_Init();//初始化OLED
    OLED_Clear();//清除屏幕
    OLED_Display_On();//开启OLED

/*****************************************
    *
    *0.96 OLED 字符显示测试
    *
*******************************************/
    OLED_ShowChar( 0,0,'A',16,0);
    OLED_ShowChar( 8,0,'B',16,0);
    OLED_ShowChar(16,0,'C',16,0);
    OLED_ShowChar(24,0,'D',16,0);

    OLED_ShowChar( 0,2,'A',8,0);
    OLED_ShowChar( 8,2,'B',8,0);
    OLED_ShowChar(16,2,'C',8,0);
    OLED_ShowChar(24,2,'D',8,0);

    OLED_ShowString(25,6,"Char Test!",16,1);

    HAL_Delay(5000);
    OLED_Clear();//清除屏幕

/*****************************************
    *
    *0.96 OLED 数字显示测试
    *
*******************************************/

    OLED_ShowNum(  0,1,12,2,16,0);
    OLED_ShowNum( 48,1,34,2,16,0);
    OLED_ShowNum( 96,1,56,2,16,0);

    OLED_ShowString(25,6,"Num Test!",16,1);

    HAL_Delay(5000);
    OLED_Clear();//清除屏幕

/*****************************************
    *
    *0.96 OLED 中文显示测试
    *
*******************************************/
    OLED_ShowCHinese(22   ,3,1,0);//不
    OLED_ShowCHinese(22+16,3,2,0);//见
    OLED_ShowCHinese(22+32,3,3,0);//不
    OLED_ShowCHinese(22+48,3,4,0);//散
    OLED_ShowCHinese(22+64,3,5,0);//!

    OLED_ShowString(25,6,"CHN Test!",16,1);

    HAL_Delay(5000);
    OLED_Clear();//清除屏幕

/*****************************************
    *
    *0.96 OLED 字符串显示测试
    *
*******************************************/

    OLED_ShowString(0,2,"Nebula-Pi,RYMCU!",16,0);
    OLED_ShowString(25,6,"Str Test!",16,1);
    HAL_Delay(5000);
    OLED_Clear();//清除屏幕
/*****************************************
    *
    *0.96 OLED 图片显示测试
    *
*******************************************/

    OLED_DrawBMP(0,0,Logo,0);//显示图片
    OLED_ShowString(25,6,"PIC Test!",16,1);
    HAL_Delay(5000);
}

4. 编译下载

将程序编译下载至开发板,观察 OLED 显示效果,最后图片显示效果如下:

loading-ag-166

5. 小结

本章学习了通过 IIC 协议控制 0.96 OLED

后发布评论