char *数组制动器具有超过6个值

时间:2014-11-09 18:41:28

标签: arrays arduino

我一整天都在这里,无法理解问题出在哪里。 我正在使用诺基亚液晶屏来打印我自己绘制的数字(2位数)。

每个数字(0到9)由一个数组组成,如下所示:

char Number_0[] = {0x04, 0x04, 0x04, 0xC4, 0xE4, 0xE4, 0xE4, 0xE4, 0xE4, 0xE4, 0xE4, 0xE4, 0xE4, 0xE4, 0xC4, 0x04, 0x04, 0x04, 0xFE, 0xFF, 0xFF, 0xFE, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xFE, 0xFF, 0xFF, 0xFE, 0x87, 0xCF, 0xCF, 0x87, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0xCF, 0xCF, 0x87, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x81, 0x83, 0x83, 0x8D, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x9E, 0x8D, 0x83, 0x83, 0x81};

为了能够指向每个数字数组,我正在使用另一个数组,其中包含数组列表,如下所示:

char* NumberList[] = {Number_0, Number_1, Number_2, Number_3, Number_4, Number_5, Number_6, Number_7, Number_8, Number_9};

要将数字打印到屏幕上,请使用以下功能:

int Number = 30;
void PrintNumber(){
  int Unit = int(Number / 10);
  LCDBitmap(DigitalList[Unit]); //should Print 3
  Unit = Number - Unit * 10;
  LCDBitmap(DigitalList[Unit]); //should Print 0
}

LCDBitmap是另一个功能,与手头的问题无关。

由于某些原因,除非我从NumberList []中删除4个值,否则这不起作用。 只要我只有6个值,它就可以工作,与我删除的一个无关,但作为儿子,我添加一个7º...代码刹车。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

恭喜,您已退出SRAM。由于此LUT在运行时不会发生变化,因此它应该是placed in flash

#include <avr/pgmspace.h>

 ...

char Number_0[] PROGMEM = {0x04, ...};
 ...
char* NumberList[] PROGMEM = {Number_0, ...};

然后,您使用pgm_read_word()NumberList读取位置,然后pgm_read_byte()Number_x读取具体值。