一个网上的LCD程序: for (i = 0; i < 7; ++i) { lcd.createChar(i ...-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3064|回复: 3

[未解决] 一个网上的LCD程序: for (i = 0; i < 7; ++i) { lcd.createChar(i ...

[复制链接]
发表于 2021-5-6 16:55 | 显示全部楼层 |阅读模式
请大家看看标题中的这行代码含义,怎么理解?下面是相关的代码;


LiquidCrystal lcd(11, 9, 6, 5, 4, 3);
static char terrainUpper[TERRAIN_WIDTH + 1];
static char terrainLower[TERRAIN_WIDTH + 1];
static bool buttonPushed = false;

void initializeGraphics(){
  static byte graphics[] = {
    // Run position 1
    B01100,
    B01100,
    B00000,
    B01110,
    B11100,
    B01100,
    B11010,
    B10011,
    // Run position 2
    B01100,
    B01100,
    B00000,
    B01100,
    B01100,
    B01100,
    B01100,
    B01110,
    // Jump
    B01100,
    B01100,
    B00000,
    B11110,
    B01101,
    B11111,
    B10000,
    B00000,
    // Jump lower
    B11110,
    B01101,
    B11111,
    B10000,
    B00000,
    B00000,
    B00000,
    B00000,
    // Ground
    B11111,
    B11111,
    B11111,
    B11111,
    B11111,
    B11111,
    B11111,
    B11111,
    // Ground right
    B00011,
    B00011,
    B00011,
    B00011,
    B00011,
    B00011,
    B00011,
    B00011,
    // Ground left
    B11000,
    B11000,
    B11000,
    B11000,
    B11000,
    B11000,
    B11000,
    B11000,
  };
  int i;
  // Skip using character 0, this allows lcd.print() to be used  
  // quickly draw multiple characters
  for (i = 0; i < 7; ++i) {
   lcd.createChar(i + 1, &graphics[i * 8]);
  }
  for (i = 0; i < TERRAIN_WIDTH; ++i) {
    terrainUpper = SPRITE_TERRAIN_EMPTY;
    terrainLower = SPRITE_TERRAIN_EMPTY;
  }
}

发表于 2021-5-7 15:41 | 显示全部楼层
1602 支持自定义字符,每个自定义字符需要传入 8 字节的字模数据。

createChar  就是在传入字模数据
 楼主| 发表于 2021-5-7 16:06 | 显示全部楼层
t3486784401 发表于 2021-5-7 15:41
1602 支持自定义字符,每个自定义字符需要传入 8 字节的字模数据。

createChar  就是在传入字模数据 ...

好像有点看懂了,creatChar函数读取的是数组地址编号往后的8个数据,编号可以是0,也可以像案例里的0~7里的任意数,理解对吗?
下面是原程序地址: 看ARDUINO官网里的示例,需要用lcd.wirte()函数来写入,但是在这个程序里并没有,是怎么实现的?
https://create.arduino.cc/projecthub/muhamd-magdy/arduino-game-by-lcd-9a3bc2?ref=tag&ref_id=games&offset=1
发表于 2021-5-7 21:49 | 显示全部楼层
haizeifan 发表于 2021-5-7 16:06
好像有点看懂了,creatChar函数读取的是数组地址编号往后的8个数据,编号可以是0,也可以像案例里的0~7里 ...

对的,最多自定义 8 个字符,编号 0~7 或者 8~15(写8和写0效果一样)。

createChar 内部已经调用了 lcd.write,所以不需要额外调用
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-29 07:50 , Processed in 0.068595 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表