u8g2库中文以及图片的显示入门

使用的是0.96寸的四脚OLED,芯片为ESP-WROOM-32。

汉字滚动:
(屏幕为128x64)

int y = 1, x = 0;   //改变y的值可以调节位移速度
void loop()
{
    if (x <= 256)
    {
      u8g2.clearBuffer();                         
      u8g2.setFont(u8g2_font_unifont_t_chinese1); //设置字体
      u8g2.setCursor(x, 15);                      //tx=x,ty=y(x轴[128],y轴[64])
      u8g2.print("中文");
      u8g2.setCursor(x - 128, 15);              
      u8g2.print("中文");
      delay(20);         //延时程序,可以降低位移速度
      x = x + y;
      u8g2.sendBuffer(); 
    }
    else
    {
      x = 0;
    }
}

字库建立的方法请参考:Arduino驱动LED128X64 - U8g2 自定义中文字库_在求学的路上越走越远-CSDN博客_u8g2自定义字库

或者通过PCtoLCD2002软件进行取模,这样可以规定字体的大小。如果使用建立字库或者直接使用原始字库,其字体大小时固定的。

图片显示:

static const unsigned char al_logo[] U8X8_PROGMEM = {
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, 0x3C, 0x80, 0x07,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x3C, 0x80, 0x07, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x03, 0x3C, 0x80, 0x07, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0xFF, 0x03, 0x3C, 0x80, 0x07, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x80, 0xCF, 0x07, 0x3C, 0x80, 0x07, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x80, 0x83, 0x07, 0x3C, 0x80, 0x07, 0xF8, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x81, 0x07, 0x3C, 0x80, 0x07, 0xFC, 0x03, 0x1C, 0x00, 0x3E, 0x1C,
  0xC0, 0x03, 0x3C, 0x80, 0x07, 0xFF, 0x07, 0x7F, 0x80, 0xFF, 0x3F, 0xE0,
  0x01, 0x3C, 0x80, 0x07, 0xFF, 0x8F, 0xFF, 0xC1, 0xFF, 0x3F, 0xF0, 0x00,
  0x3C, 0x80, 0x87, 0xFF, 0xDF, 0xFF, 0xC1, 0xC3, 0x07, 0x7C, 0x00, 0x3C,
  0x80, 0x87, 0x0F, 0xFE, 0xFF, 0xE3, 0x81, 0x03, 0x1E, 0x00, 0x3C, 0x80,
  0xC7, 0x07, 0xFC, 0xE3, 0xE3, 0x81, 0x07, 0x0F, 0x00, 0x3C, 0x80, 0xC7,
  0x07, 0xF8, 0xC1, 0xE7, 0x81, 0x87, 0xFF, 0x07, 0x3C, 0x80, 0xC7, 0x03,
  0xF0, 0x80, 0xE7, 0xC3, 0x87, 0xFF, 0x07, 0x3C, 0x80, 0xC7, 0x03, 0x70,
  0x80, 0xC7, 0xE7, 0x83, 0xFF, 0x07, 0x3C, 0x80, 0xC7, 0x03, 0x78, 0x80,
  0xC7, 0xFF, 0x03, 0x00, 0x00, 0x3C, 0x80, 0xC7, 0x03, 0xF8, 0xC0, 0x87,
  0xFF, 0x01, 0x00, 0x00, 0x3C, 0x80, 0xC7, 0x07, 0xFC, 0xC1, 0xC7, 0x7F,
  0x00, 0x00, 0x00, 0x3C, 0xC0, 0x87, 0x0F, 0xFE, 0xFF, 0xE3, 0x01, 0x00,
  0x00, 0x00, 0x78, 0xC0, 0x83, 0xFF, 0xDF, 0xFF, 0xE3, 0x03, 0x00, 0x00,
  0x00, 0xF8, 0xF1, 0x03, 0xFF, 0x8F, 0xFF, 0xE1, 0xFF, 0x07, 0x00, 0x00,
  0xF0, 0xFF, 0x01, 0xFE, 0x0F, 0xFF, 0xC0, 0xFF, 0x0F, 0x00, 0x00, 0xE0,
  0xFF, 0x00, 0xFC, 0x03, 0x7C, 0xC0, 0xFF, 0x1F, 0x00, 0x00, 0x80, 0x3F,
  0x00, 0xF8, 0x01, 0x00, 0xE0, 0x01, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0xF0, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0xF0, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x20, 0xF0, 0xC7, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60,
  0xE0, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xC0,
  0xFF, 0x03, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0xFF,
  0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  0x40, 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,};  //图片取模后的点阵
void setup()
{
  u8g2.begin();
}
void loop()
{
  u8g2.firstPage();
  do
  {
    u8g2.setFont(u8g2_font_ncenB14_tr);    //设置字体
    u8g2.drawXBMP(0, 0, 85, 44, al_logo);  // (0,0)为显示的起始位置;(85,44)为图片的大小,需要根据实际图片的大小来更改
  } while (u8g2.nextPage());
}

图片取模的方法请参考:
(1)(18条消息) U8g2显示BMP图片 PCtoLCD2002取模_在求学的路上越走越远-CSDN博客_pctolcd2002怎么显示图片

(2)(18条消息) 0.96寸OLED显示 图片_Hh刘的博客-CSDN博客_oled显示图片

其他:
一、用户选择界面

  u8g2.firstPage();
  do
  {
    u8g2.setFont(u8g2_font_6x10_tf); 
    u8g2.setFontRefHeightAll();    //这将为按钮内的文本添加一些额外的空间 
    u8g2.userInterfaceMessage("Title1", "Title2", "Title3", " Ok \n Cancel ");  //用户选择界面
  } while (u8g2.nextPage());

二、特殊图形
特殊图像有很多,这是其中的一部分。

  u8g2.firstPage();
  do
  {    u8g2.setFont(u8g2_font_unifont_t_symbols);      //特殊图形,见图标
    u8g2.drawGlyph(5, 20, 0x2603);  //dec 9731/hex 2603 Snowman (对应下图的位置) 
  } while (u8g2.nextPage());

部分图形编号如下图:
在这里插入图片描述
第一次发,如果有什么不对的地方,请各位大佬指出来,我一定改正或者有什么更好的方法也请大佬们能够指点指点。
这里祝大家每天开心,工作愉快,学习天天向上。

  • 9
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!对于STM32微控制器使用U8g2显示中文,需要进行以下步骤: 1. 下载U8g2:前往GitHub上的U8g2(https://github.com/olikraus/u8g2),下载最新版本的U8g2。 2. 将U8g2添加到您的工程中:将下载的U8g2文件夹中的 "src" 文件夹下的所有文件添加到您的工程中。 3. 在代码中配置U8g2:在您的代码中,包含U8g2的头文件,并根据U8g2的文档进行相关配置。例如,选择合适的显示驱动程序和字体配置。 4. 添加中文:在U8g2的 "u8g2_fonts.c" 文件中,可以找到多种字体。您可以根据需要选择合适的中文,然后将其添加到您的工程中。 5. 使用U8g2显示中文:在代码中使用U8g2提供的函数进行中文显示。例如,使用 `u8g2_DrawUTF8()` 函数来显示UTF-8编码的中文字符。 以下是一个简单的示例代码片段,演示了如何使用U8g2显示中文: ```c #include <U8g2lib.h> // 根据您的显示驱动和字体需求进行配置 U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0); void setup() { u8g2.begin(); } void loop() { u8g2.clearBuffer(); u8g2.setFont(u8g2_font_wqy12_t_gb2312); u8g2.setCursor(0, 20); u8g2.println("你好,世界!"); u8g2.sendBuffer(); delay(1000); } ``` 请注意,以上示例中的字体 `u8g2_font_wqy12_t_gb2312` 是一种常用的中文字体,您可以根据需要选择其他字体。 希望对您有所帮助!如有更多问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值