创建和显示自定义字符 如果您觉得在显示屏上显示的字符比较乏味,则可以为LCD创建自己的自定义字符和符号。当您要显示不属于标准ASCII字符集的字符时,它们非常有用。
如本教程前面所述,一个字符由5×8像素矩阵组成,因此您需要在该矩阵中定义自定义字符。您可以使用CreateChar()函数来定义字符。
要使用CreateChar(),首先设置了8个字节的数组。数组中的每个字节代表5×8矩阵中的一行字符。而字节中的0和1表示该行中的哪个像素应打开,哪个应该关闭。所有这些用户定义的字符都存储在LCD的cgram中。
自定义字符生成器 创建自定义字符从未如此简单!我们创建了一个称为自定义字符生成器的小应用程序。您能看到下面的蓝网格吗?您可以单击任何5×8像素以设置/清除该特定像素。当您单击时,字符的代码将在网格旁边生成。该代码可以直接在您的ESP8266草图中使用。
ESP8266示例代码 以下草图显示了如何创建自定义字符并在LCD上打印它们。 - #include <LiquidCrystal_I2C.h>
- LiquidCrystal_I2C lcd(0x3F, 16, 2); // set the LCD address to 0x3F for a 16 chars and 2 line display
- // make some custom characters:
- byte Heart[8] = {
- 0b00000,
- 0b01010,
- 0b11111,
- 0b11111,
- 0b01110,
- 0b00100,
- 0b00000,
- 0b00000
- };
- byte Bell[8] = {
- 0b00100,
- 0b01110,
- 0b01110,
- 0b01110,
- 0b11111,
- 0b00000,
- 0b00100,
- 0b00000
- };
- byte Alien[8] = {
- 0b11111,
- 0b10101,
- 0b11111,
- 0b11111,
- 0b01110,
- 0b01010,
- 0b11011,
- 0b00000
- };
- byte Check[8] = {
- 0b00000,
- 0b00001,
- 0b00011,
- 0b10110,
- 0b11100,
- 0b01000,
- 0b00000,
- 0b00000
- };
- byte Speaker[8] = {
- 0b00001,
- 0b00011,
- 0b01111,
- 0b01111,
- 0b01111,
- 0b00011,
- 0b00001,
- 0b00000
- };
- byte Sound[8] = {
- 0b00001,
- 0b00011,
- 0b00101,
- 0b01001,
- 0b01001,
- 0b01011,
- 0b11011,
- 0b11000
- };
- byte Skull[8] = {
- 0b00000,
- 0b01110,
- 0b10101,
- 0b11011,
- 0b01110,
- 0b01110,
- 0b00000,
- 0b00000
- };
- byte Lock[8] = {
- 0b01110,
- 0b10001,
- 0b10001,
- 0b11111,
- 0b11011,
- 0b11011,
- 0b11111,
- 0b00000
- };
- void setup()
- {
- lcd.init();
- // Make sure backlight is on
- lcd.backlight();
- // create a new characters
- lcd.createChar(0, Heart);
- lcd.createChar(1, Bell);
- lcd.createChar(2, Alien);
- lcd.createChar(3, Check);
- lcd.createChar(4, Speaker);
- lcd.createChar(5, Sound);
- lcd.createChar(6, Skull);
- lcd.createChar(7, Lock);
- // Clears the LCD screen
- lcd.clear();
- // Print a message to the lcd.
- lcd.print("Custom Character");
- }
- // Print All the custom characters
- void loop()
- {
- lcd.setCursor(0, 1);
- lcd.write(0);
- lcd.setCursor(2, 1);
- lcd.write(1);
- lcd.setCursor(4, 1);
- lcd.write(2);
- lcd.setCursor(6, 1);
- lcd.write(3);
- lcd.setCursor(8, 1);
- lcd.write(4);
- lcd.setCursor(10, 1);
- lcd.write(5);
- lcd.setCursor(12, 1);
- lcd.write(6);
- lcd.setCursor(14, 1);
- lcd.write(7);
- }
复制代码您将在LCD上看到以下输出:
代码说明 包含库并创建LCD对象后,定义了自定义字符数组。数组由8个字节组成,每个字节代表一个5×8矩阵的行。在此草图中,已经创建了八个自定义字符。
让我们以Heart[8]数组为例。您可以看到如何使用位(0和1)形成心脏形状。 0关闭像素,1打开像素。 - byte Heart[8] = {
- 0b00000,
- 0b01010,
- 0b11111,
- 0b11111,
- 0b01110,
- 0b00100,
- 0b00000,
- 0b00000
- };
复制代码
在setup()函数中,使用CreateChar()函数创建自定义字符。此函数需要两个参数。第一个参数是0到7之间的数字,可以保留8个受支持的自定义字符之一。第二个是数组的名称。 - lcd.createChar(0, Heart);
复制代码接下来,在loop()函数中,要显示自定义字符,我们只需使用write()函数并传递我们之前保留的字符的序号。 - lcd.setCursor(0, 1);
- lcd.write(0);
复制代码
|