STM32·

STM32篇——OLED

ronger

ronger

3360 0

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显示效果,最后图片显示效果如下:

5. 小结

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

所属系列

从当前文章继续阅读它所在合集中的前后内容。

关于我和 Hugh 学嵌入式开发这件事 —— STM32 篇 第 9 / 17 篇
查看合集

> 本作品集内教程基于 [Hugh](https://rymcu.com/user/hugh) 的创作基础上进行修订发布 关于我和 Hugh 学嵌入式开发这件事

相关文章

优先推荐同专题、同标签和同作者内容,补足热门文章。

评论 0

登录 后参与评论

评论

成为第一个评论的人