OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2796|回复: 1

OLED模块程序源码的注释问题

[复制链接]

1

主题

2

帖子

0

精华

新手入门

积分
8
金钱
8
注册时间
2023-5-30
在线时间
1 小时
发表于 2023-5-30 16:43:07 | 显示全部楼层 |阅读模式
如何理解OLED画线函数中的判断和error变量?
uint8_t atk_md0096_oled_draw_line(uint8_t x1, uint8_t y1, uint8_t x2, uint8_t y2, atk_md0096_oled_show_mode_t mode)
{
    uint8_t ret;
    uint8_t x_delta;
    uint8_t y_delta;
    int8_t x_sign;
    int8_t y_sign;
    int16_t error;
    int16_t error2;

    x_delta = (x1 < x2) ? (x2 - x1) : (x1 - x2);//计算X的距离
    y_delta = (y1 < y2) ? (y2 - y1) : (y1 - y2);//计算Y的距离
    x_sign = (x1 < x2) ? 1 : -1;//
    y_sign = (y1 < y2) ? 1 : -1;//
    error = x_delta - y_delta;

    ret = atk_md0096_oled_draw_point(x2, y2, mode);
    if (ret != ATK_MD0096_EOK)
    {
        return ret;
    }

    while ((x1 != x2) || (y1 != y2))
    {
        ret = atk_md0096_oled_draw_point(x1, y1, mode);
        if (ret != ATK_MD0096_EOK)
        {
            return ret;
        }

        error2 =  error<< 1;
        if (error2 > -y_delta)
        {
            error -= y_delta;
            x1 += x_sign;
        }

        if (error2 < x_delta)
        {
            error += x_delta;
            y1 += y_sign;
        }
    }


    return ATK_MD0096_EOK;
}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

2

帖子

0

精华

新手入门

积分
8
金钱
8
注册时间
2023-5-30
在线时间
1 小时
 楼主| 发表于 2023-6-2 14:17:39 | 显示全部楼层
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-24 10:54

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表