在SSD1306使用U8G2库进行全局刷新(Full screen buffer mode)显示,出现显示不全的问题,显示效果如下。
所使用的代码为:
#include <Arduino.h>
#include <U8g2lib.h>
#include <Wire.h>
U8G2_SSD1306_128X64_NONAME_1_SW_I2C u8g2(U8G2_R0, /* clock=*/ 22, /* data=*/ 21, /* reset=*/ U8X8_PIN_NONE); // SDA:21 scl:22
void setup(void) {
u8g2.begin();
u8g2.enableUTF8Print(); //中文必要设置
u8g2.setFont(u8g2_font_unifont_t_chinese2); //含有中文的字库
}
void loop(void) {
u8g2.clearBuffer();
u8g2.setCursor(0, 15);
u8g2.print("你好");
u8g2.sendBuffer();
delay(1000);
}
出问题的地方在u8g2的构造上:
U8G2_SSD1306_128X64_NONAME_1_SW_I2C u8g2(U8G2_R0, /* clock=*/ 22, /* data=*/ 21, /* reset=*/ U8X8_PIN_NONE);
去GitHub上查了U8G2的构造规则:U8G2设置CPP ·olikraus/u8g2 维基 ·GitHub
U8G2_SSD1306_128X64_NONAME_1_SW_I2C
将1更改为F,即可使用全局刷新
U8G2_SSD1306_128X64_NONAME_F_SW_I2C
显示效果为:
在该模式下,仍可使用页码刷新模式,即下列代码也可执行成功。
#include <Arduino.h>
#include <U8g2lib.h>
#include <Wire.h>
U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ 22, /* data=*/ 21, /* reset=*/ U8X8_PIN_NONE); // SDA:21 scl:22
void setup(void) {
u8g2.begin();
u8g2.enableUTF8Print(); //中文必要设置
u8g2.setFont(u8g2_font_unifont_t_chinese2); //含有中文的字库
}
void loop(void) {
u8g2.firstPage();
do{
u8g2.setCursor(0,20);
u8g2.print("你好");
}while(u8g2.nextPage());
delay(1000);
}