自从我上次买了个1.3寸OLED,就一发不可收拾......
温馨提示:看完全文再复制代码!
话不多说,正文:
接线:
GND------GND
VCC------5V
SCL------SCL
SDA------SDA
驱动1.3寸或0.96寸OLED的代码也是十分有九分的简单,如下:
#include "U8glib.h"
#include "clib/u8g.h"
//接线:四针oled,Vcc-3.3v或5v,GND-GND,SCL-A5,SDA-A4
U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NONE);
//...
const uint8_t bitmap_a[] U8G_PROGMEM = {
/*-- 文字: M --*/
/*-- @Fixedsys12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00, 0x00, 0x00, 0x63, 0x63, 0x77, 0x6B, 0x6B, 0x6B, 0x63, 0x63, 0x63, 0x00, 0x00, 0x00, 0x00
};
const uint8_t bitmap_b[] U8G_PROGMEM = {
/*-- 文字: i --*/
/*-- @Fixedsys12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00, 0x00, 0x18, 0x18, 0x00, 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x7E, 0x00, 0x00, 0x00, 0x00
};
const uint8_t bitmap_c[] U8G_PROGMEM = {
/*-- 文字: n --*/
/*-- @Fixedsys12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x00, 0x00, 0x00
};
const uint8_t bitmap_d[] U8G_PROGMEM = {
/*-- 文字: e --*/
/*-- @Fixedsys12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x66, 0x66, 0x7E, 0x60, 0x60, 0x3C, 0x00, 0x00, 0x00, 0x00
};
const uint8_t bitmap_e[] U8G_PROGMEM = {
/*-- 文字: C --*/
/*-- @Fixedsys12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00, 0x00, 0x00, 0x3C, 0x66, 0x66, 0x60, 0x60, 0x60, 0x66, 0x66, 0x3C, 0x00, 0x00, 0x00, 0x00
};
const uint8_t bitmap_f[] U8G_PROGMEM = {
/*-- 文字: R --*/
/*-- @Fixedsys12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00, 0x7F, 0x7F, 0x49, 0x49, 0x77, 0x63, 0x6B, 0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x7F, 0x7F
};
const uint8_t bitmap_g[] U8G_PROGMEM = {
/*-- 文字: a --*/
/*-- @Fixedsys12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0x06, 0x06, 0x3E, 0x66, 0x66, 0x3E, 0x00, 0x00, 0x00, 0x00
};
const uint8_t bitmap_h[] U8G_PROGMEM = {
/*-- 文字: f --*/
/*-- @Fixedsys12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00, 0x00, 0x00, 0x1E, 0x30, 0x30, 0x30, 0x7E, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00
};
const uint8_t bitmap_i[] U8G_PROGMEM = {
/*-- 文字: t --*/
/*-- @Fixedsys12; 此字体下对应的点阵为:宽x高=8x16 --*/
0x00, 0x00, 0x00, 0x30, 0x30, 0x7E, 0x30, 0x30, 0x30, 0x30, 0x30, 0x1E, 0x00, 0x00, 0x00, 0x00
};
/*参数解释:drawBitmapP(u8g_uint_t x, u8g_uint_t y, u8g_uint_t cnt, u8g_uint_t h, const u8g_pgm_uint8_t *bitmap)
x:位图左上角的横坐标
y:位图左上角的纵坐标
cnt:在水平方向上的位图的字节数。该位图的宽度是cnt* 8(1字节=8位)
h:位图的高
*bitmap:位图对象
*/
void draw(void) {
u8g.setColorIndex(1);
u8g.drawBitmapP(1, 20, 1, 16, bitmap_a);
u8g.drawBitmapP(9, 20, 1, 16, bitmap_b);
u8g.drawBitmapP(18, 20, 1, 16, bitmap_c);
u8g.drawBitmapP(27, 20, 1, 16, bitmap_d);
u8g.drawBitmapP(36, 20, 1, 16, bitmap_e);
u8g.drawBitmapP(45, 20, 1, 16, bitmap_f);
u8g.drawBitmapP(54, 20, 1, 16, bitmap_g);
u8g.drawBitmapP(63, 20, 1, 16, bitmap_h);
u8g.drawBitmapP(72, 20, 1, 16, bitmap_i);
}
void setup() {
}
void loop() {
u8g.firstPage();
do {
draw();
} while (u8g.nextPage());
}
由于使用了 U8glib.h 库,咱还得去下载一个。。。。。。
显示出来的是:MineCRaft ——因为我刚玩MC不久 φ(* ̄0 ̄)
R变成了一只苦力怕。。。。。。
如果是0.96寸的OLED,把代码第五行的"SH1106"改成"SSD1306"。( ̄︶ ̄)↗注意了!
文章结束了,可以的话在评论区留个言吧! \^o^/(跪求评论!!!)