淘宝上买的9.9包邮的GMG12864-03A单色LCD屏,ST7567驱动,12864分辨率,SPI接口,显示面积有33.2520.45mm,性价比还不错。但是这个屏u8g2库不支持,有一个U8G2_ST7567_OS12864_1_4W_SW_SPI,可以显示,但是直接使用显示上下颠倒,对比度有问题。好在店家提供了示例代码,按照示例代码把u8g2库改下就可以了。

找到libraries\U8g2\src\clib\u8x8_d_st7567.c文件,打开找到屏幕初始化代码。

static const uint8_t u8x8_st7567_os12864_init_seq[] = {
    
  U8X8_START_TRANSFER(),                 /* enable chip, delay is part of the transfer start */
  
  U8X8_C(0x0e2),                        /* soft reset */
  U8X8_C(0x0ae),                        /* display off */
  U8X8_C(0x040),                        /* set display start line to 0 */
  
  U8X8_C(0x0a1),                        /* ADC set to reverse */
  U8X8_C(0x0c0),                        /* common output mode */
  // Flipmode
  //U8X8_C(0x0a0),                        /* ADC set to reverse */
  //U8X8_C(0x0c8),                        /* common output mode */
  
  U8X8_C(0x0a6),                        /* display normal, bit val 0: LCD pixel off. */
  U8X8_C(0x0a3),                        /* LCD bias 1/7 */
  /* power on sequence from paxinstruments */
  U8X8_C(0x028|4),                        /* all power  control circuits on */
  U8X8_DLY(50),
  U8X8_C(0x028|6),                        /* all power  control circuits on */
  U8X8_DLY(50),
  U8X8_C(0x028|7),                        /* all power  control circuits on */
  U8X8_DLY(50),
  
  U8X8_C(0x026),                        /* v0 voltage resistor ratio */
  U8X8_CA(0x081, 50>>2),        /* set contrast, contrast value*/
  
  U8X8_C(0x0ae),                        /* display off */
  U8X8_C(0x0a5),                        /* enter powersafe: all pixel on, issue 142 */
   
  U8X8_END_TRANSFER(),                 /* disable chip */
  U8X8_END()                         /* end of sequence */
};

改成如下代码。

static const uint8_t u8x8_st7567_os12864_init_seq[] = {
    
  U8X8_START_TRANSFER(),                 /* enable chip, delay is part of the transfer start */
  //从这里开始修改
  U8X8_C(0x0e2),
  U8X8_C(0x0a6),
  U8X8_C(0x0c8),
  U8X8_C(0x02f),
  U8X8_C(0x026),
  U8X8_C(0x0a2),
  U8X8_C(0x0a1),
  U8X8_C(0x0f8),
  U8X8_C(0x000),
  U8X8_C(0x081),
  U8X8_C(0x009),
  U8X8_C(0x0af),
  //到这里修改结束
  U8X8_END_TRANSFER(),                 /* disable chip */
  U8X8_END()                         /* end of sequence */
};

改好库以后打开u8g2库的Hello World示例代码,编辑如下。

#include <Arduino.h>
#include <U8g2lib.h>

#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif
#ifdef U8X8_HAVE_HW_I2C
#include <Wire.h>
#endif
//这里用的合宙esp32c3开发板,根据接线修改引脚定义
U8G2_ST7567_OS12864_1_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 2, /* data=*/ 3, /* cs=*/ 7, /* dc=*/ 6, /* reset=*/ 11);  

void setup(void) {
  u8g2.begin();  
  u8g2.setContrast(20);//这里设置对比度,自行调整,直至显示效果最佳
}

void loop(void) {
  u8g2.firstPage();
  do {
    u8g2.setFont(u8g2_font_ncenB10_tr);
    u8g2.drawStr(0,24,"Hello World!");
  } while ( u8g2.nextPage() );
}

显示效果如下。