通过Arduino Uno实现OLED屏显示英文、汉字、图片以及动图

# 学习笔记,大家共勉!

所需要用到的库

Wire、Adafruit_GFX、Adafruit_SSD1306

可以通过Arduino IDE的“管理库”中搜索下载。

所需要用到的函数

1. Adafruit_SSD1306 Name(width, height, &Wire, Reset); //声明OLED屏

Name:换成自己想要的名称;

宽度和高度填写自己OLED的对应参数;“&Wire”这个不要改动

Reset:默认填-1.

Adafruit_SSD1306 Oled(128, 64, &Wire, -1);

2. name.begin(switchvcc, i2caddr); //OLED初始化,

name:承接上文的设定;

switchvcc默认SSD1306_SWITCHCAPVCC,插3.3V;

i2caddr:OLED通信默认地址0x3C/0x3D,型号可以问厂家或者自己用I2C的scanner获取。

Oled.begin(SSD1306_SWITCHCAPVCC, 0x3c);

3. name.clearDisplay():清屏函数;

4. name.Dispaly():显示函数;

5. name.setTextSize(s):设置字体大小;

6. name.setCursor(x,y):设置光标位置,参数为坐标;

7. name.drawBitmap(x,y,Bitmap,w,h,c):显示图像。汉字和图片都需要用这个。

8...文字和图片显示要这些就足够了。

显示英文

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

Adafruit_SSD1306 Oled(128, 64, &Wire, -1); 

void setup() {
  Oled.begin(SSD1306_SWITCHCAPVCC, 0x3c); 
}

void loop() {
    Oled.clearDisplay();//清屏
    Oled.setTextSize(2);//设置字体大小
    Oled.setTextColor(1);//设置字体颜色,因为OLED不能改颜色,所以默认填1
    Oled.setCursor(0,0);//起始位置
    Oled.print("hello");
    Oled.display();//显示
    delay(1000);

}

显示汉字和图片

汉字和图片放在一起,是因为要用到软件将 汉字 与 图片转换一下,本质是一样的。

菜单栏里 “模式” 处可选 “字符模式” 与 “ 图形模式”,字符模式用于汉字转换,图形模式用于图片转换(这里的图片最好是简单的图片,如简笔画,过于复杂的呈现效果不容易好)。图形模式打开的图片是.bmp格式的文件,可以通过电脑自带的“画图”软件另存(注意像素大小,不要超过OLED)。

先选择模式后,点“选项”,按照如图所示更改参数(字符模式与图形模式下都是这样修改的)

选择好后,字符模式的话,输入想输的汉字,然后点“生成字模”,复制到程序里即可;

                  图形模式的话,打开位图,再点“生成字模”,复制即可。

这里要说明一下复制到程序的哪里:

static const unsigned char PROGMEM Zhong[] = {  //这里除了"Zhong"是自己的命名,其余不要改动
  //复制到这里,如下文是个“中”字
  
0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x3F,0xF8,0x21,0x08,0x21,0x08,0x21,0x08,
0x21,0x08,0x21,0x08,0x3F,0xF8,0x21,0x08,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,/*"中",0*/

};   

程序:

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

Adafruit_SSD1306 Oled(128, 64, &Wire, -1);

static const unsigned char PROGMEM Zhong[] = {
  0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x3F,0xF8,0x21,0x08,0x21,0x08,0x21,0x08,
0x21,0x08,0x21,0x08,0x3F,0xF8,0x21,0x08,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,/*"中",0*/
};

void setup() {
  Oled.begin(SSD1306_SWITCHCAPVCC, 0x3c);
}

void loop() {
  Oled.clearDisplay();//清屏
  Oled.drawBitmap(0, 0, Zhong, 16, 16, 1); //中文字符以图像形式显示,每个字大小为16x16
  Oled.display();//显示
  delay(1000);

}

类似的,如果要显示图片,替换

static const unsigned char PROGMEM Zhong[] = {  

};  

这部分内容即可

显示动画

动画即是多张图片连续快速播放得到的。可以到网上下载一个动图,然后在https://uutool.cn/gif2img/

通过这个链接里的GIF拆分功能获取动图里的各帧。对各帧图片进行上一节的操作,获取每一帧的字模。

例如,可以运行一下以下程序:

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

Adafruit_SSD1306 Oled(128, 64, &
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Caesarqhs

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值