STM32F103C8T6 0.96寸 OLED显示屏 IIC(CubeMx生成 HAL库

文章目录

  • STM32F103C8T6 0.96寸 OLED显示屏 IIC(CubeMx生成 HAL库
  • 一、OLED简单介绍
  • 二、CubeMx设置
  • 二、加入OLED屏幕驱动
    • 1.生成User文件夹
    • 2.添加OLED相关文件
  • 三、结果展示

一、OLED简单介绍

1,.OLED是有机发光二极管,由于其具备自发光,不需要背光的特点,被认为是下一代的平面显示器新兴应用技术
2.0.96寸的OLED显示屏幕分辨率为128*64
3.引脚:

  1. GND 电源地
  2. VCC 电源正(3~5.5V)
  3. SCL OLED 的 D0 脚,在 IIC 通信中为时钟管脚,本篇文章中接PB6
  4. SDA OLED 的 D1 脚,在 IIC 通信中为数据管脚,本篇文章中接PB7

二、CubeMx设置

1.选择芯片

2.在RCC中选择外部晶振

3.在SYS中设置如下

4.时钟设置为自己的芯片对应的频率(c8t6是72Hz)

5.I2C设置
配置普通I2C即可

6.引脚

根据引脚连接IIC通信的OLED显示屏幕

7.生成代码
在project中生成MDK代码


设置完毕后生成即可

二、加入OLED屏幕驱动

1.生成User文件夹



点击小方块图标生成新的文件夹


同时在文件目录下建立同样的文件夹以免混淆

2.添加OLED相关文件

oled.c

#include "oledfont.h"
#include "oled.h"#define OLED_ADD 0x78
static void oled_cmd(uint8_t i2c_cmd)
{uint8_t *cmd;cmd = &i2c_cmd;HAL_I2C_Mem_Write(&hi2c1, OLED_ADD, 0x00, I2C_MEMADD_SIZE_8BIT, cmd, 1,100);
}
static void oled_data(uint8_t i2c_data)
{uint8_t *data;data = &i2c_data;HAL_I2C_Mem_Write(&hi2c1, OLED_ADD, 0x40, I2C_MEMADD_SIZE_8BIT, data, 1,100);
}
static void oled_origin(uint8_t x, uint8_t y)
{oled_cmd(0xb0+y);oled_cmd(((x&0xf0)>>4)|0x10);oled_cmd((x&0x0f)|0x01);
}void oled_clear()
{uint8_t i,n;           for(i=0;i<8;i++)  {  oled_cmd(0xb0+i);oled_cmd (0x00); oled_cmd (0x10); for(n=0;n<128;n++)oled_data(0);}
}void oled_full(uint8_t data)//0xff
{uint8_t m,n;for(m=0;m<8;m++){oled_cmd(0xb0+m);      //page0-page1oled_cmd(0x00);        //low column start addressoled_cmd(0x10);       //high column start addressfor(n=0;n<128;n++){oled_data(data);}}
}
void oled_init(void)
{HAL_Delay(100);oled_cmd(0xAE); //display offoled_cmd(0x20);    //Set Memory Addressing Mode    oled_cmd(0x10); //00,Horizontal Addressing Mode;01,Vertical Addressing Mode;10,Page Addressing Mode (RESET);11,Invalidoled_cmd(0xb0);   //Set Page Start Address for Page Addressing Mode,0-7oled_cmd(0xc8);    //Set COM Output Scan Directionoled_cmd(0x00); //---set low column addressoled_cmd(0x10); //---set high column addressoled_cmd(0x40); //--set start line addressoled_cmd(0x81); //--set contrast control registeroled_cmd(0xff); //áá?èμ÷?ú 0x00~0xffoled_cmd(0xa1); //--set segment re-map 0 to 127oled_cmd(0xa6); //--set normal displayoled_cmd(0xa8); //--set multiplex ratio(1 to 64)oled_cmd(0x3F); //oled_cmd(0xa4); //0xa4,Output follows RAM content;0xa5,Output ignores RAM contentoled_cmd(0xd3); //-set display offsetoled_cmd(0x00); //-not offsetoled_cmd(0xd5); //--set display clock divide ratio/oscillator frequencyoled_cmd(0xf0); //--set divide ratiooled_cmd(0xd9); //--set pre-charge periodoled_cmd(0x22); //oled_cmd(0xda); //--set com pins hardware configurationoled_cmd(0x12);oled_cmd(0xdb); //--set vcomholed_cmd(0x20); //0x20,0.77xVccoled_cmd(0x8d); //--set DC-DC enableoled_cmd(0x14); //oled_cmd(0xaf); //--turn on oled paneloled_full(0x00);
}void oled_display_char(uint8_t x,uint8_t y,uint8_t chr,uint8_t Char_Size)
{       unsigned char c=0,i=0;    c=chr-' ';//得到偏移后的值          if(x>128-1){x=0;y=y+2;}if(Char_Size == 16){oled_origin(x,y);    for(i=0;i<8;i++)oled_data(F8X16[c*16+i]);oled_origin(x,y+1);for(i=0;i<8;i++)oled_data(F8X16[c*16+i+8]);}else {  oled_origin(x,y);for(i=0;i<6;i++)oled_data(F6x8[c][i]);}
}void oled_show_string(uint8_t x, uint8_t y, char ch[], uint8_t TextSize)
{uint8_t c = 0,i = 0,j = 0;switch(TextSize){case 1:{while(ch[j] != '\0'){c = ch[j] - 32;if(x > 126){x = 0;y++;}oled_origin(x,y);for(i=0;i<6;i++)oled_data(F6x8[c][i]);x += 6;j++;}}break;case 2:{while(ch[j] != '\0'){c = ch[j] - 32;if(x > 120){x = 0;y++;}oled_origin(x,y);for(i=0;i<8;i++)oled_data(F8X16[c*16+i]);oled_origin(x,y+1);for(i=0;i<8;i++)oled_data(F8X16[c*16+i+8]);x += 8;j++;}}break;}
}

保存在User文件夹下,以下文件同

oled.h

#ifndef __OLED_H_
#define __OLED_H_#include "main.h"extern I2C_HandleTypeDef hi2c1;void oled_full(uint8_t data);
void oled_init(void);
void oled_display_char(uint8_t x,uint8_t y,uint8_t chr,uint8_t Char_Size);
void oled_show_string(uint8_t x, uint8_t y, char ch[], uint8_t TextSize);
void oled_clear();#endif

oledfont.c

在cube自动生成的代码main.c中,添加自己想要生成的代码


在生成以上代码以后,在user中添加oled.c文件

将User文件夹加入c/c++路径中




加入路径后进行编译。


编译完成后烧录即可

三、结果展示

STM32F103C8T6 0.96寸 OLED显示屏 IIC(CubeMx生成 HAL库)相关推荐

  1. STM32开源代码——0.96寸OLED显示屏IIC(可显示汉字)

    正点原子精英开发板 模块化封装,入口函数简明,易上手操作 展示main.c代码,完整代码请下载 点击下载代码 #include "led.h" #include "del ...

  2. 0.96寸OLED显示屏标准库移植HAL库(模拟IIC) - 基于STM32

    ** 0.96寸OLED显示屏标准库移植HAL库,使用模拟IIC ** 由于项目的需要使用OLED屏显示,并且现有的项目程序是基于HAL库编写的,而手头能找到的程序是标准库的驱动程序,大概看了一下代码 ...

  3. 基于STM32F103C8T6的0.96寸OLED显示屏显示数据

    一.了解SPI(串行外设接口) SPI全称是Serial Perripheral Interface,也就是串行外围设备接口.SPI是Motorola公司推出的一种同步串行接口技术,是一种高速,全双工 ...

  4. 【手把手带你用pid算法控制电机】——(1)编码器电机和0.96寸OLED显示屏的使用

    目录 前言 一.需要用到的器材 二.接线说明 三.cubmx配置 3.1 时钟树 3.2 输出PWM(TIM4) 3.3 编码器模式(TIM3) 3.4 中断定时器配置(TIM1) 3.5 配置IIC ...

  5. 0.96寸OLED显示屏介绍续

    0.96 寸OLED 显示屏使用方法 (以中景园电子的0.96 寸OLED 显示屏为例) 0.96寸OLED显示屏实物图 七针SPI/IIC 0.96寸OLED显示屏使用方法: 七针SPI/IIC 0 ...

  6. 3.2 0.96寸OLED显示屏的使用

    0.96寸OLED显示屏:4线的串行SPI接口方式.IIC 接口方式,128*64像素. OLED每次控制8个点阵,垂直方向扫描控制,所以垂直方向坐标可选为0~7:水平方向可选坐标0~127 接线图: ...

  7. 0.96寸OLED显示屏介绍

    OLED显示屏简介 OLED,即有机发光二极管(Organic Light Emitting Diode).OLED 由于同时具备自发光,不需背光源.对比度高.厚度薄.视角广.反应速度快.可用于挠曲性 ...

  8. 关于基于stm32的0.96寸oled显示屏的学习理解心得。

    关于基于stm32的0.96寸oled显示屏的学习理解心得. oled粗了解 如何理解OLED分辨率? 这里0.96寸OLED分辨率是12864;即OLED显示是128行64列; 但是由于OLED不能 ...

  9. 基于STM32的0.96寸OLED显示屏显示固定数据、滑动数据、温湿度数据

    目录 OLED显示原理 一.实验工具 二.OLED显示固定数据 1.显示数据相关函数 2.main函数 3.总显示函数 4.取字模 5.实现效果如下: 三.OLED实现滑动显示数据 1.添加滑动命令 ...

最新文章

  1. nodejs mysql 异步_Gearman + Nodejs + MySQL UDF异步实现 MySQL 到 Redis 的数据同步
  2. SAP Spartacus CmsComponentConnector
  3. 查看目标主机安装的杀毒软件
  4. 关联分析算法(一)——Apriori(先验算法)
  5. 数据库sql创建标量值函数_使用JSON_VALUE()从JSON数据中提取标量值
  6. Echart饼图简单使用
  7. linux学习命令总结⑩⑦
  8. What is yield
  9. exe图标修改器和EXE文件打不开了的办法
  10. Matlab mapminmax函数使用及原理
  11. 我与计算机的不解之缘
  12. 如何使用Python来提取视频中的音频
  13. 地铁信号tts是什么服务器,机场地铁公共广播
  14. 颜色空间:RGB,CMY,HSV,HSL,Lab,YUV详解
  15. Mac下使用Mounty挂载NTFS出现了文件不能拷贝的解决办法
  16. 基于Element组件下动态生成多级表头以及数据
  17. cve查询_CVE年满21岁:如何实现这一里程碑
  18. 微信支付 postman_微信刷脸支付补贴政策有哪些?
  19. 使用R语言 在rstudio中出现 列的数目比列的名字要多 的问题
  20. Scrum立会报告+燃尽图(Beta阶段第二周第三次)

热门文章

  1. 怎么分辨是808鼓_教你怎么简单快速有效的分辨音箱的好坏 (小白必读)
  2. 专访华为张平安:全球布局终端云服务生态,构筑华为终端极致体验
  3. 读SQL Server性能调优实战——陈畅亮、吴一晴著
  4. matlab 安装模块吗,matlab哪些模块不用安装 matlab组件要全装吗?
  5. 空气呼吸器.带式压滤机.袋式过滤器
  6. Solidworks 与 ROS URDF
  7. Virtualbox虚拟机的ubuntu与win11互相拖拽
  8. WebGL坐标系介绍
  9. java计算机毕业设计游戏交易平台源码+系统+mysql数据库+lw文档
  10. OpenCV笔记一:imread函数