零知标准板 TFT LCD显示屏软件库 中文字体使用

在这里简单介绍下LCD相关的使用,本次使用如下LCD模块:

一、硬件:

这个LCD模块能直接接到零知-标准板上,并带有SD卡插槽,不需要其他任何连线,使用非常方便。

二、软件

零知软件平台已经移植好了相应的软件库,下面例子中把SD卡里面的BMP图片显示在LCD上面,主要代码如下:


							
  void setup()
  {
    Serial.begin(9600);
   
    tft.begin(0x9341);
   
    Serial.print(F("Initializing SD card..."));
    if (!SD.begin(SD_CS)) {
      Serial.println(F("failed!"));
      return;
    }
    Serial.println(F("OK!"));
   
    tft.fillScreen(BLACK);
    tft.setCursor(10, 40);
    tft.setTextColor(RED);  
    tft.setTextSize(2);
    tft.println("draw bmp test");
    delay(1000);
  }
   
  void loop()
  {
    bmpDraw("1.bmp",0,0);
    delay(2000);
    bmpDraw("2.bmp",0,0);
    delay(2000);
    bmpDraw("3.bmp",0,0);
    delay(2000);
    bmpDraw("4.bmp",0,0);
    delay(3000);
  }
  
  

三、测试

首先,我们在SD卡里面放入1、2、3、4四张bmp图片,并放到SD卡插槽中,图片属性如下:

然后我们打开零知软件开发工具,打开如下示例:

然后我们将该示例程序【验证】,并【上传】到零知-标准板中,然后再把LCD模块接到零知-标准板上,复位后,即可看到图片轮播:

注:这里也可以看出,该模块由于使用的引脚与Arduino兼容,因此数据传输时没有使用STM32本身引脚的一些特性,导致速度比较慢。要想获得更快的速度,可以考虑自己接线的方式使用并口传输数据,可以参考这里:零知开源软件库使用-ILI9341并口显示屏(点击跳转);或者使用零知增强板,该板有专用的LCD显示FSMC接口,可以达到非常高的速度。

为了使用方便,这里也移植了相应的中文字体显示的软件库,可以看下面示例:


							
	/**********************************************************
	*    文件: u8g2_gfx.ino      by 零知实验室([url=http://www.lingzhilab.com]www.lingzhilab.com[/url])
	*    -^^- 零知开源,让电子制作变得更简单! -^^-
	*    时间: 2019/03/21 09:47
	*    说明: 中文字体demo演示程序
	************************************************************/
	 
	#include <U8g2_for_Adafruit_GFX.h>
	#include  <Adafruit_TFTLCD_8bit_STM32.h>
	 
	Adafruit_TFTLCD_8bit_STM32 display;
	U8G2_FOR_ADAFRUIT_GFX u8g2_for_adafruit_gfx;
	 
	 
	//#define CN_FONT u8g2_font_wqy12_t_chinese3
	 
	//#define CN_FONT u8g2_font_wqy14_t_chinese1
	 
	//#define CN_FONT u8g2_font_wqy16_t_chinese3
	 
	#define CN_FONT u8g2_font_unifont_t_chinese3
	 
	const char c_str[] = 
	"    零知实验室专注于开\n\n"
	"放开源推广电子技术,让\n\n"
	"人更简单快乐的学习电子\n\n"
	"技术.\n\n"
	"\n\n\n"
	"    Powered by 零知实验室";
	 
	void setup() {
	        display.begin(0x9341);//ili9341 LCD
	        display.setRotation(0);
	        display.fillScreen(BLACK);
	        u8g2_for_adafruit_gfx.begin(display);                 // connect u8g2 procedures to Adafruit GFX
	         
	        u8g2_for_adafruit_gfx.setFontMode(0);                 // use u8g2 none transparent mode
	        u8g2_for_adafruit_gfx.setFontDirection(0);            // left to right (this is default)
	        u8g2_for_adafruit_gfx.setForegroundColor(WHITE);      // apply Adafruit GFX color
	        u8g2_for_adafruit_gfx.setFont(u8g2_font_helvR14_tf);  // select u8g2 font from here: [url=https://github.com/olikraus/u8g2/wiki/fntlistall]https://github.com/olikraus/u8g2/wiki/fntlistall[/url]
	        u8g2_for_adafruit_gfx.setCursor(30,20);                // start writing at this position
	        u8g2_for_adafruit_gfx.print("Chinese char testing");
	         
	        u8g2_for_adafruit_gfx.setForegroundColor(GREEN);
	        u8g2_for_adafruit_gfx.setFont(u8g2_font_unifont_t_symbols);  // icon font
	        u8g2_for_adafruit_gfx.setFontMode(1);                 // use u8g2 transparent mode (this is default)
	        u8g2_for_adafruit_gfx.drawGlyph(60, 50, 0x2600);  // 
	        u8g2_for_adafruit_gfx.drawGlyph(72, 50, 0x2601);  // 
	        u8g2_for_adafruit_gfx.drawGlyph(84, 50, 0x2602);  // 
	        u8g2_for_adafruit_gfx.drawGlyph(96, 50, 0x2603);  // 
	        u8g2_for_adafruit_gfx.drawGlyph(108, 50, 0x2604);  //
	        u8g2_for_adafruit_gfx.drawGlyph(120, 50, 0x2605);  // 
	        u8g2_for_adafruit_gfx.drawGlyph(132, 50, 0x2606);  //
	         
	        u8g2_for_adafruit_gfx.setForegroundColor(BLUE);
	        u8g2_for_adafruit_gfx.setFont(CN_FONT);
	        u8g2_for_adafruit_gfx.setCursor(0,80);                // start writing at this position
	        u8g2_for_adafruit_gfx.print(c_str);            // UTF-8 string
	         
	        u8g2_for_adafruit_gfx.setFont(u8g2_font_inb63_mn);  // select u8g2 font from here: [url=https://github.com/olikraus/u8g2/wiki/fntlistall]https://github.com/olikraus/u8g2/wiki/fntlistall[/url]
	        u8g2_for_adafruit_gfx.setFontMode(0);                 // use u8g2 none transparent mode
	         
	}
	 
	unsigned long x = 0;
	 
	void loop() {
	         
	        u8g2_for_adafruit_gfx.setCursor(60,300);                // start writing at this position
	        u8g2_for_adafruit_gfx.print(x);            // 
	        x++;
	        delay(400);
	}								
						
						

注意:虽然可以显示中文,但是由于单片机存储容量限制,不能显示所有的中文字符,对于大部分中文字符使用 u8g2_font_unifont_t_chinese3 字体即可满足,如果需要其他的中文字符,可以自己生成需要的字符。

显示效果如下: