学习目标

  1. 掌握驱动屏幕的方式
  2. 掌握调用Api
  3. 掌握软驱动改为硬驱动实现
  4. 屏幕中显示时间

    学习内容

    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的特点总结:

  5. 支持I2C、SPI等多种通信接口;

  6. 驱动方式简单,可快速上手;
  7. 低功耗,显示效果好,适合各种嵌入式系统;
  8. 内部集成RAM,能够缓存多页的图像;
  9. 提供多种字体和图形,支持自定义字体和图形;
  10. 支持对图像进行旋转、反转等操作;
  11. 支持多种显示模式和亮度控制。

应用场景:

  1. 数码管;
  2. 智能手表、手环等可穿戴设备;
  3. 智能家居控制面板;
  4. 可移动终端设备的显示部分;
  5. 电子秤、体脂称等健康设备的显示部分。

    I2C版的SSD1306

    89.png
    I2C版本就是在原来模组上做了外围电路,外围电路的作用是将ssd1306的模式配置为I2C模式,这样就可以采用I2C方式进行通讯

    原理图

    88.png

    驱动屏幕

    139.png
    通过官方给定的示例,进行改造,运行.

  6. 通常需要检查官方是否封装了驱动。

  7. 如果有封装,如何移植

此处我们只需要进行移植,移植需要看的是头文件。
官方示例头文件:
140.png

  • 引脚不符合需求,需要改成自己对应的
  • 引入的头存在差异,修改为自己的

修改后如下:
141.png
直接编译,烧录运行,验证是否成功。
当前不成功,通常此时是引脚模式问题。
在代码初始化时,初始化所有的引脚即可解决这个问题。

API的使用

  1. void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 sizey);
  2. void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 sizey);
  3. void OLED_ShowString(u8 x,u8 y,u8 *chr,u8 sizey);
  4. 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的实现即可
改为:

  1. void OLED_WR_Byte(u8 dat,u8 mode) {
  2. u8 reg;
  3. if(mode) {
  4. reg = 0x40;
  5. } else {
  6. reg = 0x00;
  7. }
  8. I2C_WriteNbyte(0x3C << 1, reg, &dat, 1);
  9. }

字体制作

  1. 打开提供的制作软件,确保为字符模式

131.png

  1. 在输入框输入要生成的文字

130.png

  1. 配置为c51输出模式

132.png
133.png

  1. 生成数据

134.png

  1. 将生成的数据放到 oledfont.h

    图形制作

  2. 配置模式

135.png

  1. 新建图像

136.png
137.png

  1. 生成数据

138.png
点击生成

  1. 将生成的数据放到 bmp.h

练习题

  1. 在屏幕上显示自己的名字
  2. 在屏幕上显示时间