【发布时间】:2019-04-16 22:43:58
【问题描述】:
我正在研究包含 15 层的 LED 塔,其中每一层包含 4 个字节(32 个 LED)。我希望能够从右向左移动一个字节。但是,多字节存在问题,无法弄清楚如何连续转换移位。
附加信息:
void Invert_Display(void){
for (int y = 0; y < LAYERS; y++){
for (int x = 0; x < BYTES; x++){
LED_Buffer[y][x] ^= (0b11111111);
}
}
Update_Display();
其中UpdateDisplay函数如下:
void Update_Display(void){
while(!TRMT); // Wait until transmission register is empty
for (int y = 0; y < LAYERS; y++){
for (int x = 0; x < BYTES; x++){
TXREG = LED_Buffer[y][x];
while (!TRMT);
}
}
LE = 1; // Data is loaded to the Output latch
NOP();
LE = 0; // Data is latched into the Output latch
【问题讨论】:
-
1 位或 8 位移位多长时间?
-
理想情况下,我想在每层中移动所有字节(所有 LED)。
-
你能把你的 4 个字节打包成一个大的
uint32_t吗?如果是,那么您只需执行 1 位左移:my_uint32_variable <<= 1;— 或my_uint32_variable *= 2;。 -
我必须指定使用哪个 LED_Buffer[y][x] 将值移入。假设我想从 LED_Buffer[0][0] 开始移动 0xAA 值并在 LED_Buffer 之外完成[0][3],所以它扫过整个显示器。那是我的最终目标。 * 我添加了一些代码来更好地了解它是如何完成的。我正在使用 PIC16F1829 微控制器来开发这个。
-
我想主要问题是我使用字节更新显示,而移位通常是按单个位完成的,对吗?