在使用u8g2进行中文先显示时,踩到一个坑,其他大佬也没有专门提过这一点,现跟大家分享一下。
起因是在看一些例程时,直接采用u8g2.drawStr()来进行英文输出,在想用该方法进行中文输出时,无法显示中文。
运行代码如下:
#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();
}
void loop(void)
{
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_wqy15_t_gb2312);
u8g2.drawStr(10,20,"你好");
u8g2.drawStr(10,40,"Hello");
u8g2.sendBuffer();
delay(1000);
}
显示效果为:
只显示"Hello",不显示"你好"。
原因是u8g2.drawStr()只能进行英文显示,要想输出中文应使用u8g2.print()和u8g2.drawUTF8()
使用u8g2.print()方法输出:
#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();
}
void loop(void)
{
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_wqy15_t_gb2312);
//u8g2.drawStr(10,20,"你好");
u8g2.setCursor(10,20);
u8g2.print("你好");
u8g2.drawStr(10,40,"Hello");
u8g2.sendBuffer();
delay(1000);
}
使用u8g2.drawUTF8()输出
#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();
}
void loop(void)
{
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_wqy15_t_gb2312);
//u8g2.drawStr(10,20,"你好");
//u8g2.setCursor(10,20);
//u8g2.print("你好");
u8g2.drawUTF8(10,20,"你好啊");
u8g2.drawStr(10,40,"Hello");
u8g2.sendBuffer();
delay(1000);
}
官方文档中,也明确指出了这一点。
文章来源地址https://www.toymoban.com/news/detail-510245.html文章来源:https://www.toymoban.com/news/detail-510245.html
到了这里,关于U8G2中文显示问题(u8g2.drawStr()中文不显示)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!