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

如何将数字末位转为字符在STM8 LCD显示及整数显示功能实现

原有实现无法运行的问题原因

  • 字符常量误用:双引号"0"是字符串常量指针,数字转ASCII需要加单引号字符常量'0'获取ASCII偏移
  • 参数类型不匹配:LCD_GLASS_WriteChar第一个入参要求是uint8_t*指针,直接传递字符值会被识别为非法内存地址,导致运行异常
  • 显示顺序倒置:取余运算先得到整数的最低位,按显示位序号递增写入会导致数字倒序显示
  • 0值无输出:输入整数为0时循环条件不成立,不会执行显示逻辑
  • 运算符不规范:循环条件用按位与&替代逻辑与&&,存在潜在逻辑风险

方案1:整数转字符串复用原有显示接口(推荐,代码复用性高)

无需修改原有显示函数,自行实现纯C无库依赖的整数转字符串工具函数即可:

/**
 * @brief uint16_t整数转字符串,无额外库依赖
 * @param num 输入待转换的16位无符号整数
 * @param buff 输出字符串缓冲区,建议长度≥6字节(uint16最大值为65535,加结束符共6字节)
 */
void uint16_to_str(uint16_t num, uint8_t *buff)
{
    uint8_t i = 0;
    // 处理0值特殊场景
    if (num == 0)
    {
        buff[i++] = '0';
        buff[i] = '\0';
        return;
    }
    // 按低位到高位暂存数字
    while (num > 0 && i < 5)
    {
        buff[i++] = '0' + (num % 10);
        num /= 10;
    }
    // 反转字符串得到正序
    uint8_t start = 0, end = i - 1;
    while (start < end)
    {
        uint8_t temp = buff[start];
        buff[start] = buff[end];
        buff[end] = temp;
        start++;
        end--;
    }
    // 补充字符串结束符
    buff[i] = '\0';
}

调用示例:

uint8_t lcd_buf[6];
uint16_t target_num = 5678;
uint16_to_str(target_num, lcd_buf);
// 直接调用原有显示函数即可
LCD_GLASS_DisplayString(lcd_buf);

方案2:独立整数显示函数

无需转字符串步骤,直接实现专用的整数显示接口:

void LCD_GLASS_DisplayINT(uint16_t integer)
{
    uint8_t i = 0x01;
    uint8_t digits[5]; // 存储各位数字的ASCII值,uint16最大为5位
    uint8_t digit_cnt = 0;

    LCD_GLASS_Clear();

    // 处理0值场景
    if (integer == 0)
    {
        uint8_t zero_char = '0';
        LCD_GLASS_WriteChar(&zero_char, FALSE, FALSE, i);
        return;
    }

    // 提取所有位的数字ASCII值
    while (integer > 0 && digit_cnt < 5)
    {
        digits[digit_cnt++] = '0' + (integer % 10);
        integer /= 10;
    }

    // 从最高位开始依次写入LCD
    for (int8_t j = digit_cnt - 1; j >= 0 && i < 8; j--)
    {
        LCD_GLASS_WriteChar(&digits[j], FALSE, FALSE, i);
        i++;
    }
}

扩展说明

如果需要显示有符号整数,仅需增加负数判断逻辑,先显示负号'-'再转换绝对值部分即可;如果需要固定位数前导零补全,在数字提取完成后补够对应位数的'0'即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 15:36:03