You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

STM32嵌入式开发:如何使用点阵工具数据在屏幕绘制点阵?

STM32点阵文字显示:点阵数据使用指南

我是嵌入式开发初学者,目前用STM32和C语言实现文字显示,但不知道怎么用点阵工具生成的点阵数据。我的尝试是把数据存入二维数组const uint8_t data[8][16],代码如下:

if (__HAL_GPIO_EXTI_GET_IT(GPIO_PIN_13) != RESET)
{
    LCD_Clear (0, 0, 240, 320, BACKGROUND); //data
    uint8_t ucTemp, ucPage, ucColumn;

    //ucRelativePositon = cChar - ' ';

    LCD_OpenWindow ( 100, 100, 32, 32 );

    LCD_Write_Cmd ( CMD_SetPixel );

    for ( ucPage = 0; ucPage < 16; ucPage ++ )
    {
        for ( ucColumn = 0; ucColumn < 8; ucColumn ++)
        {
            ucTemp = data [ucPage][ucColumn];
            if ( ucTemp & 0x01 )
                LCD_Write_Data ( 0x001F );

            else
                LCD_Write_Data (  0xFFFF );

            ucTemp >>= 1;

        }

    }
}

代码问题分析与修正

  1. 数组维度与循环不匹配
    原数组定义为data[8][16],但循环中ucPage遍历0到15(共16次),访问data[ucPage][ucColumn]时,当ucPage >=8会触发数组越界,导致数据错误或程序崩溃。需根据点阵尺寸调整数组:
  • 若为8列×16行的点阵(常用ASCII字符规格),数组应定义为const uint8_t data[16](每行1个字节,存储8个像素);
  • 若为16列×8行的点阵,数组定义为const uint8_t data[8][2](每行2个字节,对应16个像素)。
  1. 像素遍历逻辑缺失
    原代码仅处理了每个字节的最低位,剩余7个像素未写入。需遍历字节的每一位来输出对应像素:

修正后的示例代码(以8×16点阵为例)

if (__HAL_GPIO_EXTI_GET_IT(GPIO_PIN_13) != RESET)
{
    LCD_Clear(0, 0, 240, 320, BACKGROUND);
    uint8_t ucTemp, ucPage, ucBit;

    // 打开与点阵尺寸匹配的窗口:宽8,高16
    LCD_OpenWindow(100, 100, 8, 16);
    LCD_Write_Cmd(CMD_SetPixel);

    // 点阵数据:替换为工具生成的8×16点阵字节
    const uint8_t data[16] = {0x00, 0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C, 0x00,
                              0x00, 0x7E, 0x41, 0x41, 0x41, 0x41, 0x7E, 0x00};

    for (ucPage = 0; ucPage < 16; ucPage++)
    {
        ucTemp = data[ucPage];
        // 遍历字节的8个像素位(从高位到低位对应左到右像素)
        for (ucBit = 0; ucBit < 8; ucBit++)
        {
            if (ucTemp & 0x80)
                LCD_Write_Data(0x001F); // 前景色
            else
                LCD_Write_Data(0xFFFF); // 背景色
            ucTemp <<= 1; // 左移处理下一位
        }
    }

    __HAL_GPIO_EXTI_CLEAR_IT(GPIO_PIN_13); // 必须清除中断标志,避免重复触发
}

关键注意事项

  • 位序匹配:部分点阵工具生成的是低位对应左侧像素,此时需改为ucTemp & 0x01判断,再通过ucTemp >>=1遍历;
  • 窗口尺寸:LCD_OpenWindow的宽高需与点阵尺寸严格对应,避免写入多余区域;
  • 中断标志清除:处理完中断后必须调用__HAL_GPIO_EXTI_CLEAR_IT,否则会持续触发中断。

内容的提问来源于stack exchange,提问作者David47yu yu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 07:07:46