🎬 秋野酱:《个人主页》
🔥 个人专栏:《Java专栏》《Python专栏》
⛺️心若有所向往,何惧道阻且长
文章目录
- SSD1306
- I2C版的SSD1306
- 原理图
- 驱动屏幕
- API的使用
- 软驱动与硬驱动
- 字体制作
- 图形制作
SSD1306
SSD1306是一款OLED显示驱动芯片,由Solomon Systech Limited公司制造。它支持基于SPI和I2C两种通信协议,具有低功耗、高对比度和快速响应等优点,通常用于各种小型嵌入式系统和DIY电子项目中。
SSD1306芯片可以控制OLED显示屏上的像素,支持的分辨率为128x32、128x64、96x16和64x48等不同规格。其中,128x64是最常见的规格,它由128列和64行像素组成,总共有8192个像素点。SSD1306芯片还支持多种字体和字符集,可显示各种文字、图标、图形等内容。
SSD1306芯片还具有内置的RAM缓冲区,可以通过SPI或I2C接口向缓冲区写入数据,然后再通过命令将缓冲区中的数据刷新到OLED显示屏上。这种方式可以大大减少SPI或I2C通信的次数,提高数据传输效率,从而达到更好的显示效果。
总之,SSD1306是一款高性能、低功耗、易于控制的OLED显示驱动芯片,广泛应用于各种嵌入式系统和电子产品中,是一种理想的显示解决方案。
以下是对ssd1306的特点总结:
- 支持I2C、SPI等多种通信接口;
- 驱动方式简单,可快速上手;
- 低功耗,显示效果好,适合各种嵌入式系统;
- 内部集成RAM,能够缓存多页的图像;
- 提供多种字体和图形,支持自定义字体和图形;
- 支持对图像进行旋转、反转等操作;
- 支持多种显示模式和亮度控制。
应用场景: - 数码管;
- 智能手表、手环等可穿戴设备;
- 智能家居控制面板;
- 可移动终端设备的显示部分;
- 电子秤、体脂称等健康设备的显示部分。
I2C版的SSD1306
I2C版本就是在原来模组上做了外围电路,外围电路的作用是将ssd1306的模式配置为I2C模式,这样就可以采用I2C方式进行通讯
原理图
驱动屏幕
通过官方给定的示例,进行改造,运行.
- 通常需要检查官方是否封装了驱动。
- 如果有封装,如何移植
此处我们只需要进行移植,移植需要看的是头文件。
官方示例头文件:
● 引脚不符合需求,需要改成自己对应的
● 引入的头存在差异,修改为自己的
修改后如下:
API的使用
void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 sizey);
void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 sizey);
void OLED_ShowString(u8 x,u8 y,u8 *chr,u8 sizey);
void OLED_ShowChinese(u8 x,u8 y,u8 no,u8 sizey);
● x, y: 为坐标
● sizey为字体高度
● 其他为显示的具体信息
软驱动与硬驱动
● 硬驱动:硬件电路实现(I2C外设)I2C数据的发送与读取,执行效率高,节省CPU的运算资源。
● 软实现:通过代码直接操作IO,进行拉高拉低,实现I2C数据的发送与读取,CPU较累。软实现优点是适用场景广泛,对硬件电路要求没那么严格。如果硬实现无法正常通信,可以尝试用软实现。
官方示例的逻辑为I2C的软件驱动方式,意思是自己通过发送高低电平,模拟I2C的协议,进行I2C通讯。
硬驱动的意思是,我的电路中通过电路设计,可以实现高低电平的变化,这个高低电平的变化遵循了I2C协议,只需要通过寄存器控制就可以打开这个功能。
一些冲突问题:
● I2C是总线,可以有很多从设备,我们扩展板上有时钟设备,也是I2C
● 时钟设备和屏幕应该可以采用I2C同时工作
● 时钟实现为默认的硬驱动
● 屏幕为软驱动
● 他们共用了相同的SCL和SDA引脚
如果不共用的话,一个软实现一个硬实现,不会有问题。共用,则需要修改一方。目前我们将软实现修改为硬实现。
修改 OLED_WR_Byte的实现即可
改为:
void OLED_WR_Byte(u8 dat,u8 mode) {
u8 reg;
if(mode) {
reg = 0x40;
} else {
reg = 0x00;
}
I2C_WriteNbyte(0x3C << 1, reg, &dat, 1);
}
字体制作
-
打开提供的制作软件,确保为字符模式
在输入框输入要生成的文字
配置为c51输出模式
-
生成数据
-
将生成的数据放到 oledfont.h中
图形制作
- 配置模式
新建图像
生成数据
点击生成 - 将生成的数据放到 bmp.h中