在这里简单介绍下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 字体即可满足,如果需要其他的中文字符,可以自己生成需要的字符。
显示效果如下: