基于I2C协议的OLED显示

一,简介

1.U8g2简介

U8g2 是一款用于单色 OLED、LCD 显示屏的 C/C++ 图形库,适用于嵌入式系统和微控制器。它提供了广泛的功能,如绘制图形、文本和图像,支持各种字体和语言,以及多种显示效果。U8g2 可以跨平台运行,支持多种开发板和控制器,使用简单方便,适用于各种项目,如传感器、数据采集、嵌入式系统等。U8g2 的代码库和文档都是开源的,用户可以根据自己的需要进行定制和修改。

接口方式分为spi和IIC 


2.OLED屏简介

OLED(Organic Light Emitting Diode)是一种有机发光二极管技术,用于制造显示屏幕。与传统的液晶显示屏相比,OLED 显示屏具有许多优势,包括更高的对比度、更快的响应时间、更广的视角、更薄更轻、更省电等特点。

OLED 显示屏不需要背光灯,因为它们的每个像素都是自发光的,这意味着可以实现更深的黑色和更生动的颜色。另外,由于 OLED 是有机材料,所以可以制造成柔性屏幕,适用于弯曲和折叠显示器。这使得 OLED 技术被广泛应用于手机、平板电脑、电视机、手表、车载显示屏等各种电子设备中。

总的来说,OLED 屏幕具有显示效果更好、更节能、更轻薄、更灵活等优点,因此在电子产品市场上受到了广泛的欢迎。

3.I2C简介

I2C(Inter-Integrated Circuit)是一种串行通信总线协议,用于在微处理器、传感器、存储器和其他外设之间传输数据。I2C 由飞利浦公司(现在的恩智浦半导体)开发,是一种简单、高效的通信方式,在嵌入式系统中广泛应用。

I2C 总线由两根线组成:SCL(串行时钟线)和SDA(串行数据线)。通过 SCL 线上的时钟脉冲来同步数据传输,而数据则通过 SDA 线进行双向传输。每个设备在总线上都有一个唯一的地址,可以通过这个地址与其通信。

I2C 主要优点包括双向通信、多主机支持、地址寻址、简单连接等。它适用于连接多种设备,如传感器、显示器、存储器等,并且能够减少系统中所需的引脚数。在嵌入式系统中,许多微控制器和外围设备都支持 I2C 接口,因此它成为了常用的通信标准之一。

I2C主设备接受流程

I2C总线读写数据操作

总线可挂多个设备

I2C时序图

二,Cubex MX 配置

RCC配置

SYS配置 

I2C配置

TIM1配置

时钟配置

工程配置

三,U8g2的移植

 下载地址https://github.com/olikraus/u8g2

如下图下载完后

一,精简U8g2库

这里我们主要关注的是U8g2库文件中的csrc文件。

 去掉无用文件,这些驱动文件通常是u8x8_d_xxx.c,xxx包括驱动的型号和屏幕分辨率。ssd1306驱动芯片的OLED,使用u8x8_ssd1306_128x64_noname.c这个文件,其它的屏幕驱动和分辨率的文件可以删掉。

二,精简u8g2_d_setup.c 

u8g2_Setup_ssd1306_i2c_128x64_noname_f就好(如果是SPI接口,需要使用u8g2_Setup_ssd1306_128x64_noname_f这个函数),其它的可以删掉或注释掉。

与这个函数看起来十分相似的函数的有:

u8g2_Setup_ssd1306_128x64_noname_1
u8g2_Setup_ssd1306_128x64_noname_2
u8g2_Setup_ssd1306_128x64_noname_f
u8g2_Setup_ssd1306_i2c_128x64_noname_1
u8g2_Setup_ssd1306_i2c_128x64_noname_2
u8g2_Setup_ssd1306_i2c_128x64_noname_f

注意是u8g2_Setup_ssd1306_i2c_128x64_noname_f



三, 精简u8g2_d_memory.c

由于用到的u8g2_Setup_ssd1306_i2c_128x64_noname_f函数中,只调用了u8g2_m_16_8_f这个函数,所以留下这个函数,其它的函数一定要删掉或注释掉,否则编译时很可能会提示内存不足!!

四, 将精简后的U8g2库添加至Keil

四, 代码实现

(1)

stm32_u8g2.h:

#ifndef __STM32_U8G2_H
#define __STM32_U8G2_H
 
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "u8g2.h"
/* USER CODE BEGIN Includes */
 
/* USER CODE END Includes */
 
 
 
/* USER CODE BEGIN Private defines */
 
/* USER CODE END Private defines */
#define u8         unsigned char  // ?unsigned char ????
#define MAX_LEN    128  //
#define OLED_ADDRESS  0x78 // oled
#define OLED_CMD   0x00  // 
#define OLED_DATA  0x40  // 
 
/* USER CODE BEGIN Prototypes */
uint8_t u8x8_byte_hw_i2c(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr);
uint8_t u8x8_gpio_and_delay(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值