STM32F103C8T6 0.96寸 OLED显示屏 IIC(CubeMx生成 HAL库)
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.引脚:
- GND 电源地
- VCC 电源正(3~5.5V)
- SCL OLED 的 D0 脚,在 IIC 通信中为时钟管脚,本篇文章中接PB6
- 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库)相关推荐
- STM32开源代码——0.96寸OLED显示屏IIC(可显示汉字)
正点原子精英开发板 模块化封装,入口函数简明,易上手操作 展示main.c代码,完整代码请下载 点击下载代码 #include "led.h" #include "del ...
- 0.96寸OLED显示屏标准库移植HAL库(模拟IIC) - 基于STM32
** 0.96寸OLED显示屏标准库移植HAL库,使用模拟IIC ** 由于项目的需要使用OLED屏显示,并且现有的项目程序是基于HAL库编写的,而手头能找到的程序是标准库的驱动程序,大概看了一下代码 ...
- 基于STM32F103C8T6的0.96寸OLED显示屏显示数据
一.了解SPI(串行外设接口) SPI全称是Serial Perripheral Interface,也就是串行外围设备接口.SPI是Motorola公司推出的一种同步串行接口技术,是一种高速,全双工 ...
- 【手把手带你用pid算法控制电机】——(1)编码器电机和0.96寸OLED显示屏的使用
目录 前言 一.需要用到的器材 二.接线说明 三.cubmx配置 3.1 时钟树 3.2 输出PWM(TIM4) 3.3 编码器模式(TIM3) 3.4 中断定时器配置(TIM1) 3.5 配置IIC ...
- 0.96寸OLED显示屏介绍续
0.96 寸OLED 显示屏使用方法 (以中景园电子的0.96 寸OLED 显示屏为例) 0.96寸OLED显示屏实物图 七针SPI/IIC 0.96寸OLED显示屏使用方法: 七针SPI/IIC 0 ...
- 3.2 0.96寸OLED显示屏的使用
0.96寸OLED显示屏:4线的串行SPI接口方式.IIC 接口方式,128*64像素. OLED每次控制8个点阵,垂直方向扫描控制,所以垂直方向坐标可选为0~7:水平方向可选坐标0~127 接线图: ...
- 0.96寸OLED显示屏介绍
OLED显示屏简介 OLED,即有机发光二极管(Organic Light Emitting Diode).OLED 由于同时具备自发光,不需背光源.对比度高.厚度薄.视角广.反应速度快.可用于挠曲性 ...
- 关于基于stm32的0.96寸oled显示屏的学习理解心得。
关于基于stm32的0.96寸oled显示屏的学习理解心得. oled粗了解 如何理解OLED分辨率? 这里0.96寸OLED分辨率是12864;即OLED显示是128行64列; 但是由于OLED不能 ...
- 基于STM32的0.96寸OLED显示屏显示固定数据、滑动数据、温湿度数据
目录 OLED显示原理 一.实验工具 二.OLED显示固定数据 1.显示数据相关函数 2.main函数 3.总显示函数 4.取字模 5.实现效果如下: 三.OLED实现滑动显示数据 1.添加滑动命令 ...
最新文章
- nodejs mysql 异步_Gearman + Nodejs + MySQL UDF异步实现 MySQL 到 Redis 的数据同步
- SAP Spartacus CmsComponentConnector
- 查看目标主机安装的杀毒软件
- 关联分析算法(一)——Apriori(先验算法)
- 数据库sql创建标量值函数_使用JSON_VALUE()从JSON数据中提取标量值
- Echart饼图简单使用
- linux学习命令总结⑩⑦
- What is yield
- exe图标修改器和EXE文件打不开了的办法
- Matlab mapminmax函数使用及原理
- 我与计算机的不解之缘
- 如何使用Python来提取视频中的音频
- 地铁信号tts是什么服务器,机场地铁公共广播
- 颜色空间:RGB,CMY,HSV,HSL,Lab,YUV详解
- Mac下使用Mounty挂载NTFS出现了文件不能拷贝的解决办法
- 基于Element组件下动态生成多级表头以及数据
- cve查询_CVE年满21岁:如何实现这一里程碑
- 微信支付 postman_微信刷脸支付补贴政策有哪些?
- 使用R语言 在rstudio中出现 列的数目比列的名字要多 的问题
- Scrum立会报告+燃尽图(Beta阶段第二周第三次)
热门文章
- 怎么分辨是808鼓_教你怎么简单快速有效的分辨音箱的好坏 (小白必读)
- 专访华为张平安:全球布局终端云服务生态,构筑华为终端极致体验
- 读SQL Server性能调优实战——陈畅亮、吴一晴著
- matlab 安装模块吗,matlab哪些模块不用安装 matlab组件要全装吗?
- 空气呼吸器.带式压滤机.袋式过滤器
- Solidworks 与 ROS URDF
- Virtualbox虚拟机的ubuntu与win11互相拖拽
- WebGL坐标系介绍
- java计算机毕业设计游戏交易平台源码+系统+mysql数据库+lw文档
- OpenCV笔记一:imread函数