能否将ascii字符也改成和中文一样占用16列
时间: 2024-02-12 18:06:03 浏览: 19
可以将ASCII字符也改成和中文一样占用16列,但是需要注意一下几点:
1. 英文字符的点阵数据只有8列,需要将其扩展为16列,可以将其复制一遍,或者使用插值算法等方式进行扩展。
2. 修改点阵数据时,需要将点阵数据写入到led_screen_data_buf数组中16列对应的两个字节中。
3. 修改col_pos_converted变量的增量,从8改为16。
下面是修改后的代码示例:
```
/* 英文点阵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;
LSD_ERROR("qinshengqi:333333333333\n");
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++)
{
buf_asc[2 * row + 1] = buf_asc[2 * row];
}
for (row = 0; row < 16; row++)
{
/* 写入点阵数据 */
led_screen_data_buf[(row * col_num + col_pos_converted) * 2] = buf_asc[2 * row];
led_screen_data_buf[(row * col_num + col_pos_converted) * 2 + 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) * 2] = buf_hz[2 * row];
led_screen_data_buf[(row * col_num + col_pos_converted) * 2 + 1] = buf_hz[2 * row + 1];
}
col_pos_converted += 16;
}
}
```