学习目标
- 掌握驱动屏幕的方式
- 掌握调用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的协议,进行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
输出模式
- 生成数据
- 新建图像
- 生成数据
点击生成
- 将生成的数据放到
bmp.h
中
练习题
- 在屏幕上显示自己的名字
- 在屏幕上显示时间