Arduino Uno 驱动OLED进阶 显示图片

本文介绍如何使用Arduino和OLED屏幕通过IIC接口显示BMP图片。首先需要准备一张BMP格式的图片,并利用字模提取软件进行点阵取模。随后将取模后的数组应用于Arduino程序中,实现图片的绘制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

用OLED实现图片的显示的具体实现方法

接线方法使用IIC方式,具体请参考入门篇

Arduino 驱动OLED屏幕IIC接线方式简单入门

 

 

看看示例实现效果哈

 

 

 

制作一张BMP图片

首先要有一张BMP图片

自己用windows自带的画版画了一张大气的 晴朗大山浮云图,保存为BMP格式。各位看官可自行创作

PS:我用的PS另存为的BMP图片无法在取模软件上读取,不解。

 

图片点阵取模

打开  字模提取V2.2 软件 

 

字模提取V2.2  

分享地址:http://pan.baidu.com/s/1i50UmxB

 

 

经过以上步骤 ,图片正确打开,会看到以下界面

 

 

接着点开取模方式,点击C51格式,就会看到点阵数组

 

在这里,注意宽度高度,还有把点阵数组都复制了。

 

开源程序代码:

 

//显示图片程序

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);

static const unsigned char PROGMEM logo[] =
{ 
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00,
    0x00,0x00,0x01,0xFF,0x83,0xC0,0x00,0x00,0x00,0x02,0x00,0x18,0x00,0x00,0x00,0x00,
    0x00,0x00,0x07,0x00,0xFC,0x40,0x00,0x00,0x00,0x03,0x00,0x18,0x00,0x00,0x00,0x00,
    0x00,0x00,0x0C,0x07,0x10,0x20,0x00,0x00,0x00,0x01,0xC0,0x00,0x01,0x80,0x00,0x00,
    0x00,0x00,0x08,0x7C,0xC0,0x30,0x00,0x00,0x00,0x00,0xC0,0x00,0x03,0x80,0x00,0x00,
    0x00,0x00,0x09,0xC0,0x60,0x10,0x00,0x00,0x00,0x00,0x00,0x78,0x07,0x00,0x00,0x00,
    0x00,0x7C,0x07,0x00,0x20,0x10,0x00,0x00,0x00,0x00,0x00,0xFE,0x0E,0x00,0x00,0x00,
    0x00,0xC7,0x9C,0x00,0x30,0x10,0x00,0x00,0x00,0x00,0x03,0xFF,0x00,0x00,0x00,0x00,
    0x01,0x80,0x70,0x00,0x10,0x10,0x00,0x00,0x00,0x00,0x07,0xFF,0x80,0x00,0x00,0x00,
    0x01,0x80,0x00,0x00,0x30,0x10,0x00,0x00,0x00,0x00,0x0F,0xFF,0xC0,0x00,0x00,0x00,
    0x00,0x80,0x00,0x00,0x60,0x1C,0x00,0x00,0x00,0x00,0x0F,0xFF,0xE0,0x00,0x00,0x00,
    0x00,0x80,0x00,0x01,0xC0,0x04,0x00,0x00,0x00,0x00,0x1F,0xFF,0xE2,0x00,0x00,0x00,
    0x00,0x80,0x00,0x07,0xFF,0xF8,0x00,0x00,0x00,0x00,0x1F,0xFF,0xE1,0xF0,0x00,0x00,
    0x00,0xC0,0x00,0x3E,0x00,0x00,0x00,0x00,0x00,0x1F,0xC7,0xFF,0xE1,0xF0,0x00,0x00,
    0x00,0x7F,0xFF,0xE0,0x0C,0x00,0x00,0x00,0x00,0x0F,0xC7,0xFF,0xE0,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x3E,0x00,0x00,0x00,0x00,0x00,0x03,0xFF,0xE0,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x61,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0xE0,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x01,0x80,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x07,0x00,0x38,0x00,0x00,0x3E,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
    0x00,0x00,0x00,0x0C,0x00,0x0C,0x00,0x00,0x23,0x00,0x04,0x00,0x07,0x00,0x00,0x00,
    0x00,0x00,0x00,0x18,0x00,0x04,0x00,0x00,0x41,0x00,0x0C,0x06,0x07,0x80,0x00,0x00,
    0x00,0x00,0x00,0x30,0x00,0x02,0x00,0x00,0xC0,0x80,0x1C,0x07,0x01,0xC0,0x00,0x00,
    0x00,0x00,0x00,0x60,0x00,0x03,0x00,0x01,0x80,0x60,0x78,0x07,0x00,0x60,0x00,0x00,
    0x00,0x00,0x00,0xCF,0x80,0x01,0x00,0x03,0x00,0x30,0x00,0x07,0x00,0x00,0x00,0x00,
    0x00,0x00,0x03,0xF8,0x7F,0xFF,0x80,0x06,0x00,0x18,0x00,0x07,0x00,0x00,0x00,0x00,
    0x00,0x00,0x07,0x80,0x00,0x00,0x40,0x0C,0x00,0x0C,0x00,0x06,0x00,0x00,0x00,0x00,
    0x00,0x00,0x1F,0xFF,0xFF,0xFF,0x20,0x18,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x70,0x00,0x00,0x00,0x30,0x30,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0xC0,0x00,0x00,0x00,0x18,0x43,0xFE,0x01,0xC0,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFE,0x40,0x03,0xFF,0x60,0x00,0x00,0x00,0x00,0x00,
    0x00,0x03,0x00,0x00,0x00,0x00,0x02,0x40,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,
    0x00,0x06,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x00,
    0x00,0x0F,0xFF,0xE0,0x00,0x00,0x00,0xC1,0xFF,0xFF,0xC6,0x00,0x00,0x00,0x00,0x00,
    0x00,0x1A,0x00,0x1F,0xFF,0xFF,0xC0,0x60,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,0x00,
    0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x30,0x3F,0xFF,0xE0,0xC0,0x00,0x00,0x00,0x00,
    0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,
    0x01,0x80,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x0F,0xFE,0x18,0x00,0x00,0x00,0x00,
    0x03,0x3F,0xFF,0xFF,0xFF,0xFF,0x80,0x06,0x7F,0xF8,0x00,0x06,0x00,0x00,0x00,0x00,
    0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,
    0x0C,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0x80,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,
    0x18,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x80,0x00,0x0F,0xFF,0x30,0x00,0x00,0x00,
    0x10,0x00,0x00,0x00,0x00,0x3F,0xFC,0x00,0xC1,0xFF,0xF0,0x00,0x08,0x00,0x00,0x00,
    0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x07,0x00,0x00,0x00,
    0x10,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x01,0x00,0x00,0x00,
    0x00,0x7F,0xFE,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x1F,0xFF,0xFF,0xFF,0xFF,0xFF,0xE0,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
  
#if (SSD1306_LCDHEIGHT != 64)
#error("Height incorrect, please fix Adafruit_SSD1306.h!");
#endif

void setup()   {                
  Serial.begin(9600);
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C); 
  display.clearDisplay();
}

void loop() {
  display.drawBitmap(0, 0, logo, 128, 64, 1);  //在坐标X0,Y0的位置开始显示图片
                                               //128是取模软件显示的宽度
                                               //64是取模软件显示的高度
  display.display();                           //把缓存的都显示
  delay(1);
  
  display.clearDisplay();     //清除屏幕
}

 

 

 

 

 

### 关于Arduino 0.96寸OLED显示屏的驱动代码与教程 #### 接口连接方法 针对Arduino UNO板子和0.96寸OLED屏幕之间的连接,具体的接线方式如下所示[^4]: - **VCC** -> 5V - **GND** -> GND - **SCL** -> A5 (对应I2C时钟信号) - **SDA** -> A4 (对应I2C数据信号) 这种连接模式利用了Arduino自带的硬件I2C总线来简化通信过程。 #### 库文件安装指南 为了能够顺利操作这块OLED屏,在编写程序前需先加载相应的库文件。通常情况下会采用`Adafruit_SSD1306.h`以及依赖它的图形处理库`Adafruit_GFX.h`作为基础支持[^1]。这些库可以通过Arduino IDE中的库管理器轻松获取并安装。 #### 基础示例代码展示 下面给出一段用于测试OLED能否正常工作的简单例子: ```cpp #include <Wire.h> #include <Adafruit_GFX.h> // Core graphics library #include <Adafruit_SSD1306.h>// Hardware-specific library for SSD1306 displays #define SCREEN_WIDTH 128 // OLED display width, in pixels #define SCREEN_HEIGHT 64// OLED display height, in pixels // Declaration for an SSD1306 display connected to I2C (SDA, SCL pins) #define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin) Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); void setup() { if(!display.begin(SSD1306_I2C_ADDRESS, OLED_RESET)) { Serial.println(F("SSD1306 allocation failed")); for(;;); } delay(2000); // Pause for 2 seconds // Show initial text on the screen. display.clearDisplay(); display.setTextSize(1); display.setTextColor(SSD1306_WHITE); display.setCursor(0,0); display.cp437(true); display.print("Hello, world!"); display.display(); } void loop() {} ``` 此段代码实现了开机后向屏幕上打印“Hello,world!”的功能,并保持显示不变。通过调整`setTextSize()`参数可以改变字体大小;而想要实现更多复杂功能如图像绘制,则可进一步探索上述提及到的各种绘图APIs。 #### 进阶应用案例分享 除了基本的文字输出外,还有不少有趣的项目可供尝试。比如有开发者基于FFT算法制作了一个可视化的音频频谱仪,它能实时分析输入的声音并将不同频率范围内的能量强度以柱状形式呈现在OLED上[^3]。这不仅展示了如何结合外部传感器采集数据,同时也体现了良好的视觉呈现效果。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值