LOCAL S32 led_screen_content_to_display_buf(wchar_t *gb2312_content_str, int col_num, U8 *led_screen_data_buf) { /* 英文点阵buf:16行8列(每行用1个U8数据的bitmap表示) */ U8 buf_asc[2 * 16] = {0}; /* 中文点阵buf:16行16列(每行用2个U8数据的bitmap表示) */ U8 buf_hz[2 * 16] = {0}; int i = 0, row = 0; int col_pos_converted = 0; if (!gb2312_content_str || !led_screen_data_buf) { LSD_ERROR("param invalid!"); return ERROR; } for (i = 0; (i < LED_SCREEN_DISPLAY_STR_MAX_CLEN) && (col_pos_converted < col_num); i++) { if (gb2312_content_str[i] == 0) { continue; } if (gb2312_content_str[i] < 256) { /* 英文 */ led_screen_get_asc_code(gb2312_content_str[i], buf_asc); for(row = 0; row < 16; row++) { led_screen_data_buf[(row * col_num + col_pos_converted) / 8] = buf_asc[row]; } //todo col_pos_converted += 8; } else { /* 中文 */ led_screen_get_hz_code(gb2312_content_str[i], buf_hz); for(row = 0; row < 16; row++) { led_screen_data_buf[(row * col_num + col_pos_converted) / 8] = buf_hz[2 * row]; led_screen_data_buf[(row * col_num + col_pos_converted) / 8 + 1] = buf_hz[2 * row + 1]; } col_pos_converted += 16; } } return OK; }这个代码相应怎么修改
时间: 2024-02-16 07:05:32 浏览: 97
如果要将ASCII字符在点阵中占用的列数改为16,需要对函数led_screen_content_to_display_buf()中的一些部分进行修改,具体如下:
```
LOCAL S32 led_screen_content_to_display_buf(wchar_t *gb2312_content_str, int col_num, U8 *led_screen_data_buf) {
/* 英文点阵buf:16行16列(每行用2个U8数据的bitmap表示) */
U8 buf_asc[2 * 16] = {0};
/* 中文点阵buf:16行16列(每行用2个U8数据的bitmap表示) */
U8 buf_hz[2 * 16] = {0};
int i = 0, row = 0;
int col_pos_converted = 0;
if (!gb2312_content_str || !led_screen_data_buf)
{
LSD_ERROR("param invalid!");
return ERROR;
}
for (i = 0; (i < LED_SCREEN_DISPLAY_STR_MAX_CLEN) && (col_pos_converted < col_num); i++)
{
if (gb2312_content_str[i] == 0)
{
continue;
}
if (gb2312_content_str[i] < 256)
{
/* 英文 */
led_screen_get_asc_code(gb2312_content_str[i], buf_asc);
for(row = 0; row < 16; row++)
{
led_screen_data_buf[(row * col_num + col_pos_converted) / 8] = buf_asc[2 * row];
led_screen_data_buf[(row * col_num + col_pos_converted) / 8 + 1] = buf_asc[2 * row + 1];
}
col_pos_converted += 16;
}
else
{
/* 中文 */
led_screen_get_hz_code(gb2312_content_str[i], buf_hz);
for(row = 0; row < 16; row++)
{
led_screen_data_buf[(row * col_num + col_pos_converted) / 8] = buf_hz[2 * row];
led_screen_data_buf[(row * col_num + col_pos_converted) / 8 + 1] = buf_hz[2 * row + 1];
}
col_pos_converted += 16;
}
}
return OK;
}
```
修改后,函数中的两个U8型缓冲区buf_asc和buf_hz的长度都变成了2 * 16,即每行用2个U8数据的bitmap表示。在处理英文字符时,需要将缓冲区buf_asc中的16个英文字符点阵信息存储到LED屏幕数据缓冲区led_screen_data_buf中,每个英文字符占用16列。因此,在存储点阵信息时,需要分别存储buf_asc中的偶数行和奇数行。在处理中文字符时,同样需要将缓冲区buf_hz中的16行中文字符点阵信息存储到LED屏幕数据缓冲区led_screen_data_buf中,每个中文字符占用16列。因此,在存储点阵信息时,也需要分别存储buf_hz中的偶数行和奇数行。最后,将col_pos_converted变量的增量改为16,以便正确记录已经转换的列数。
阅读全文