我正在使用移出声明驱动一些7段显示(最后) 但是我遇到了一个问题。
我使用了#include <avr/pgmspace.h>
libary来节省处理空间。
在它结束时,我需要将一个二进制数转移到一个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行
有什么想法吗?
答案 0 :(得分: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])));