STM32 HAL库IIC协议控制0.96 OLED液晶显示
1. 前期准备
安装好STM32CubeMX
安装好Clion
0.96 OLED介绍以及基础代码详见《关于我和 Hugh 学嵌入式开发这件事 —— 51 篇》第 20 章 0.96 OLED 使用,在上述基础代码之上适配STM32。
2. 创建项目
将bmp.h、oled.h、oledfont.h、oled.c添加至工程现有项目中,51课程中使用IO口模拟的IIC总线,STM32我们使用HAL库的IIC函数,将上述文件中涉及到IIC操作的,均进行替代即可。
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;- 使用
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个函数即可,其他均保持不变。
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
登录 后参与评论
评论
成为第一个评论的人