Skip to content

Commit

Permalink
[drivers] hub75e change Z type to S type scan
Browse files Browse the repository at this point in the history
  • Loading branch information
vamoosebbf committed Dec 25, 2020
1 parent f5cee4d commit 4bc2384
Showing 1 changed file with 34 additions and 12 deletions.
46 changes: 34 additions & 12 deletions components/drivers/hub75e/src/hub75e.c
Original file line number Diff line number Diff line change
Expand Up @@ -163,32 +163,54 @@ int hub75e_display(int core)
*(rgb444 + y * hub75e_obj->width + x) = rgb565_to_rgb444[SWAP_TO_MP16(rgb565_yx)];
}
}

// 每张图刷新 16 次, 可以达到用占空比控制的效果, 16 为 4 位所能表示的全部色彩
for (t = 0; t < 16; t++)
{
// 32 扫, 每次填两行 y 和 y+32
// 32 扫, 每次将 y 和 y+32 行填入 linebuffer
for (y = 0; y < SCAN_TIMES; y++)
{
for (int bs = 1; bs <= vertical_boards; bs++)
// 每次发送一个 linebuffer , linebuffer 大小为 每块的行宽*一行的块数*竖直的板子数
for (int bs = vertical_boards; bs > 0; bs--)//刷新第 bs 行的板子, 板子总行数为 vertical_boards
{
// 当前需要显示的 img 行号
int img_line_num = (vertical_boards - bs) * HEIGHT_PER_BOARD + y;
// line_buffer 填充起点
int line_buf_base_index = ((bs-1)*hub75e_obj->width);
// 编码每行的点, 一次两行, 高三位: 7(r1),6(g1),5(b1)为第 img_line_num 行), 后三位: 4(r2),3(g2),2(b2) 为第 img_line_num+32 行)
for(int x = 0; x < hub75e_obj->width; x++)
{
line_buffer[x+line_buf_base_index] = ((pwm_table[t][*(rgb444 + img_line_num * hub75e_obj->width + x)]) | \
pwm_table[t][*(rgb444 + (img_line_num + SCAN_TIMES) * hub75e_obj->width + x)] >> 3);
int line_buf_base_index = ((vertical_boards - bs)*hub75e_obj->width);
if(bs % 2 ==0){// 垂直第偶数行板子, 刷新顺序从下到上, 从右至左
// 填入 linebuffer 的 img 行号
int img_line_num = bs * HEIGHT_PER_BOARD - y - 1;
// 填入 linebuffer 的 img 出发点
int img_line_begin = img_line_num * hub75e_obj->width;
// 填入 linebuffer 的 img 行加 32 扫, 因为从下往上
int img_line_scan_begin = (img_line_num - SCAN_TIMES) * hub75e_obj->width;
// 需要填充的 linebuffer 的结束点下标
int line_buf_end_index = line_buf_base_index + hub75e_obj->width - 1;
for(int x = hub75e_obj->width - 1; x >= 0; x--)
{
// 编码每行的点, 一次两行, 高三位: 7(r1),6(g1),5(b1)为第 img_line_num 行), 后三位: 4(r2),3(g2),2(b2) 为第 img_line_num - SCAN_TIMES 行)
line_buffer[line_buf_end_index - x] = ((pwm_table[t][*(rgb444 + img_line_begin + x)]) | \
pwm_table[t][*(rgb444 + img_line_scan_begin + x)] >> 3);
}
}else{// 垂直第奇数块, 刷新顺序从上到下, 从左至右
// 填入 line-buffer 的 img 行号
int img_line_num = (bs - 1) * HEIGHT_PER_BOARD + y;
// 当前显示 img 行的出发点
int img_line_begin = img_line_num * hub75e_obj->width;
// 填入 linebuffer 的 img 行加 32 扫
int img_line_scan_begin = (img_line_num + SCAN_TIMES) * hub75e_obj->width;
// 显示第 bs 块板的第 y 行
for(int x = 0; x < hub75e_obj->width; x++)
{
// 编码每行的点,高三位: 7(r1),6(g1),5(b1)为第 img_line_num 行), 后三位: 4(r2),3(g2),2(b2) 为第 img_line_num + SCAN_TIMES 行)
line_buffer[x+line_buf_base_index] = ((pwm_table[t][*(rgb444 + img_line_begin + x)]) | \
pwm_table[t][*(rgb444 + img_line_scan_begin + x)] >> 3);
}
}
}
fill_line(hub75e_obj, spi_handle, line_buffer, y, line_buf_size); // 发送行数据
}
}
free(line_buffer);
free(rgb444);
// disable_hub75e(hub75e_obj); //防止 31 和 64 行太亮
return 0;
}

Expand Down

0 comments on commit 4bc2384

Please sign in to comment.