1

我正在使用 shift out 语句来驱动几个 7 段显示器(最后),但我遇到了问题。

我使用#include <avr/pgmspace.h>libary 来节省处理空间。最后,我需要 shiftOut 一个二进制数,然后输入一个 reg,然后输入 BCD,然后输入我的显示器:

strcpy_P(buffer, (char*)pgm_read_word(&(Times[big])));

shiftOut(dataPin, clockPin, MSBFIRST, buffer);

在缓冲区的地方会去选择的值(例如 B00100011 应该显示 23),我的代码给了我

Invalid conversion from char to 'uint8_t'

突出显示 shiftOut 行

有任何想法吗?

4

1 回答 1

1

这里的问题是shiftOut需要一个字节 ( uint8_t) 作为它的第四个参数 ( value)。传递的值是一个char*(大概声明为一个prog_char数组)。

为了解决这个问题,值的声明需要使用prog_uchar,如下所示:

prog_uchar values[] PROGMEM = { (prog_uchar) B00100011, ... };

...

int valueIndex = ...; // Index of value in the values array
shiftOut(dataPin, clockPin, MSBFIRST, pgm_read_byte(&(values[valueIndex])));
于 2013-01-02T20:58:01.573 回答